新聞中心
本文接k8s之ingress 。
創(chuàng)新互聯(lián)公司2013年至今,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元臨潁做網(wǎng)站,已為上家服務(wù),為臨潁各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):028-86922220
本文看一個(gè)基于ingress作為流量入口的實(shí)戰(zhàn)例子,架構(gòu)圖如下:
接下來(lái)詳細(xì)看下。
1:部署MariaDB首先我們需要定義MariaDB使用的configmap,如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: maria-cm
data:
DATABASE: 'db'
USER: 'wp'
PASSWORD: '123'
ROOT_PASSWORD: '123'
然后需要定義后MariaDB的deploy來(lái)維持MariaDB的POD數(shù)在一定個(gè)數(shù),如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: maria-dep
name: maria-dep
spec:
replicas: 1
selector:
matchLabels:
app: maria-dep
template:
metadata:
labels:
app: maria-dep
spec:
containers:
- image: mariadb:10
name: mariadb
ports:
- containerPort: 3306
envFrom:
- prefix: 'MARIADB_'
configMapRef:
name: maria-cm
最后定義MariaDB的POD的service,這樣可以域名方式訪(fǎng)問(wèn)POD,這樣就不用關(guān)心POD的退出和新建而導(dǎo)致的IP地址變化問(wèn)題,yaml如下:
apiVersion: v1
kind: Service
metadata:
labels:
app: maria-dep
name: maria-svc
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
selector:
app: maria-dep
最后我們使用---
將以上3個(gè)yaml定義在一個(gè)文件中,然后apply如下:
dongyunqi@mongodaddy:~/k8s$ kubectl apply -f wp-maria.yml
configmap/maria-cm created
deployment.apps/maria-dep created
service/maria-svc created
查看如下:
dongyunqi@mongodaddy:~/k8s$ kubectl get pod
NAME READY STATUS RESTARTS AGE
maria-dep-767bbdccb5-dbm2t 1/1 Running 0 41m
dongyunqi@mongodaddy:~/k8s$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
maria-dep 1/1 1 1 41m
dongyunqi@mongodaddy:~/k8s$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
...
maria-svc ClusterIP 10.108.87.2403306/TCP 41m
2:部署WordPress首先我們需要定義WordPress使用的ConfigMap,如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: wp-cm
data:
HOST: 'maria-svc'
USER: 'wp'
PASSWORD: '123'
NAME: 'db'
注意HOST: 'maria-svc'
配置的是MariaDB的service 域名,這樣就能屏蔽IP地址的變化帶來(lái)的影響,然后定義deploy,控制WordPress的個(gè)數(shù),這里定義2個(gè)POD,envFrom設(shè)置環(huán)境變量,如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: wp-dep
name: wp-dep
spec:
replicas: 2
selector:
matchLabels:
app: wp-dep
template:
metadata:
labels:
app: wp-dep
spec:
containers:
- image: wordpress:5
name: wordpress
ports:
- containerPort: 80
envFrom:
- prefix: 'WORDPRESS_DB_'
configMapRef:
name: wp-cm
最后設(shè)置service,實(shí)現(xiàn)負(fù)載均衡以及服務(wù)發(fā)現(xiàn),并通過(guò)NodePort暴露端口號(hào)30088
(必須在30000~32767之間)到宿主機(jī),這樣我們就可以在ingress訪(fǎng)問(wèn)不正常時(shí)通過(guò)訪(fǎng)問(wèn)該service來(lái)排查問(wèn)題。如下:
apiVersion: v1
kind: Service
metadata:
labels:
app: wp-dep
name: wp-svc
spec:
ports:
- name: http80
port: 80
protocol: TCP
targetPort: 80
nodePort: 30088
selector:
app: wp-dep
type: NodePort
接著我們將三個(gè)yaml以---
放在一個(gè)文件中,并apply,如下:
dongyunqi@mongodaddy:~/k8s$ kubectl apply -f wp-dep.yml
configmap/wp-cm created
deployment.apps/wp-dep created
service/wp-svc created
dongyunqi@mongodaddy:~/k8s$ kubectl get pod
NAME READY STATUS RESTARTS AGE
maria-dep-767bbdccb5-dbm2t 1/1 Running 0 81m
wp-dep-5b5586d79c-fvj86 1/1 Running 0 2m23s
wp-dep-5b5586d79c-qf2zt 1/1 Running 0 2m23s
dongyunqi@mongodaddy:~/k8s$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
maria-dep 1/1 1 1 81m
wp-dep 2/2 2 2 2m34s
dongyunqi@mongodaddy:~/k8s$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1443/TCP 46h
maria-svc ClusterIP 10.108.87.2403306/TCP 81m
wp-svc NodePort 10.99.4.11780:30088/TCP 2m48s
接著我們就可以通過(guò)任意一個(gè)節(jié)點(diǎn)的30088端口來(lái)訪(fǎng)問(wèn)WordPress網(wǎng)站了,如下:
最后我們來(lái)部署流量真正的入口ingress。
3:部署ingress首先定義ingress class:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: wp-ink
spec:
controller: nginx.org/ingress-controller
然后用kubectl create命令生成ingress樣板文件,指定域名是wp.test
,后端Service是wp-svc:80
,Ingress Class就是剛定義的wp-ink
,如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wp-ing
spec:
ingressClassName: wp-ink
rules:
- host: wp.test
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wp-svc
port:
number: 80
最后定義ingress controller yaml,如下:
dongyunqi@mongodaddy:~/k8s$ cat my-ingress-controller.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wp-ing
namespace: nginx-ingress
spec:
replicas: 1
selector:
matchLabels:
app: ngx-kic-dep
template:
metadata:
labels:
app: ngx-kic-dep
spec:
hostNetwork: true
serviceAccountName: nginx-ingress
automountServiceAccountToken: true
containers:
- image: nginx/nginx-ingress:2.2-alpine
imagePullPolicy: IfNotPresent
name: nginx-ingress
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
- name: readiness-port
containerPort: 8081
- name: prometheus
containerPort: 9113
readinessProbe:
httpGet:
path: /nginx-ready
port: readiness-port
periodSeconds: 1
resources:
requests:
cpu: "100m"
memory: "128Mi"
securityContext:
allowPrivilegeEscalation: true
runAsUser: 101 #nginx
runAsNonRoot: true
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
args:
- -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
- -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret
- -ingress-class=wp-ink
注意Nginx的pod配置了hostNetwork: true
即和宿主機(jī)共享網(wǎng)絡(luò)。分別apply后還不能直接訪(fǎng)問(wèn),還需要配置hosts,將域名wp.test
映射到Nginx的pod所在的Node的IP(通過(guò)-o wide查看POD會(huì)顯示所在Node的IP地址信息)
,如下:
192.168.64.132 wp.test
測(cè)試如下:
寫(xiě)在后面這里頁(yè)面報(bào)錯(cuò)是WordPress的,因?yàn)槭俏冶镜貦C(jī)器的資源不足,導(dǎo)致MariaDB的POD停止了,不過(guò)不影響我們測(cè)試,畢竟已經(jīng)訪(fǎng)問(wèn)到WordPress了。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱(chēng):k8s之ingress實(shí)戰(zhàn)小栗子-創(chuàng)新互聯(lián)
地址分享:http://fisionsoft.com.cn/article/hchpg.html