配置默認的backend
為了讓Ingress Controller正常啟動,需要給它配置一個默認的backend,用于當客戶端訪問的URL地址不存在時,能夠返回一個正確的404應答。
這個backend服務用任何應用實現都可以,只要滿足默認對/path的訪問返回404的應答,同時能夠提供/healthz路徑以提供kubelet完成對它的健康檢查。
這里default-backend的定義文件復制于kubernetes官方文檔。?
https://github.com/kubernetes/ingress/blob/master/examples/deployment/nginx/default-backend.yaml
所需鏡像地址為:gcr.io/google_containers/defaultbackend:1.0?
這里我已經push到了本地倉庫里。?
內容如下:
apiVersion: extensions/v1beta1kind:Deploymentmetadata:? name:default-http-backendlabels:? ? k8s-app:default-http-backendnamespace: kube-systemspec:? replicas:1template:? ? metadata:? ? ? labels:? ? ? ? k8s-app:default-http-backendspec:? ? ? terminationGracePeriodSeconds:60containers:? ? ? - name:default-http-backend#Anyimage is permissableaslongas:? ? ? ? #1.Itserves a404page at /? ? ? ? #2.Itserves200on a /healthz endpoint? ? ? ? image:192.168.121.140:5000/defaultbackend? ? ? ? livenessProbe:? ? ? ? ? httpGet:? ? ? ? ? ? path: /healthz? ? ? ? ? ? port:8080scheme:HTTPinitialDelaySeconds:30timeoutSeconds:5ports:? ? ? ? - containerPort:8080resources:? ? ? ? ? limits:? ? ? ? ? ? cpu:10m? ? ? ? ? ? memory:20Mi? ? ? ? ? requests:? ? ? ? ? ? cpu:10m? ? ? ? ? ? memory:20Mi---apiVersion: v1kind:Servicemetadata:? name:default-http-backendnamespace: kube-system? labels:? ? k8s-app:default-http-backendspec:? ports:? - port:80targetPort:8080selector:? ? k8s-app:default-http-backend
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
創建backend
# kubectl apply -f default-backend.yaml
1
在kubernetes中,Ingress Controller將以Pod的形式運行,監控apiserver的/ingress接口后端的backend services,如果service發生變化,則Ingress Controller自動更新其轉發規則。
在此使用谷歌提供的nginx-ingress-controller鏡像。鏡像地址為:gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.11(yaml中修改為了本地鏡像)
這里是針對TCP的負載均衡例子。
對kubernetes學習記錄(6)——Guestbook Demo?frontend service做負載均衡。
首先是nginx-tcp-ingress-configmap.yaml
yaml定義文件復制自https://github.com/kubernetes/ingress/blob/master/examples/tcp/nginx/nginx-tcp-ingress-configmap.yaml?
內容如下:(將9000端口轉發到defaulf/frontend:80服務端口上)
apiVersion: v1kind: ConfigMapmetadata:? name: nginx-tcp-ingress-configmapnamespace: kube-systemdata:9000:"default/frontend:80"
1
2
3
4
5
6
7
創建
# kubectl create -f nginx-tcp-ingress-configmap.yaml
1
nginx-tcp-ingress-controller.yaml定義文件復制自https://github.com/kubernetes/ingress/blob/master/examples/tcp/nginx/nginx-tcp-ingress-controller.yaml
內容如下:
apiVersion: v1kind: ReplicationControllermetadata:? name: nginx-ingress-controllerlabels:? ? k8s-app: nginx-ingress-lbnamespace: kube-systemspec:? replicas:1selector:? ? k8s-app: nginx-tcp-ingress-lbtemplate:? ? metadata:? ? ? labels:? ? ? ? k8s-app: nginx-tcp-ingress-lbname: nginx-tcp-ingress-lbspec:? ? ? terminationGracePeriodSeconds:60containers:-image:192.168.121.140:5000/nginx-ingress-controllername: nginx-tcp-ingress-lbreadinessProbe:? ? ? ? ? httpGet:? ? ? ? ? ? path: /healthz? ? ? ? ? ? port:10254scheme: HTTP? ? ? ? livenessProbe:? ? ? ? ? httpGet:? ? ? ? ? ? path: /healthz? ? ? ? ? ? port:10254scheme: HTTP? ? ? ? ? initialDelaySeconds:10timeoutSeconds:1env:-name: POD_NAME? ? ? ? ? ? valueFrom:? ? ? ? ? ? ? fieldRef:? ? ? ? ? ? ? ? fieldPath: metadata.name-name: POD_NAMESPACE? ? ? ? ? ? valueFrom:? ? ? ? ? ? ? fieldRef:? ? ? ? ? ? ? ? fieldPath: metadata.namespace? ? ? ? ports:-containerPort:80hostPort:80-containerPort:443hostPort:443-containerPort:9000hostPort:9000args:-/nginx-ingress-controller---default-backend-service=$(POD_NAMESPACE)/default-http-backend---tcp-services-configmap=$(POD_NAMESPACE)/nginx-tcp-ingress-configmap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
創建:
# kubectl create -f nginx-tcp-ingress-controller.yaml
1
從上圖看出nginx-ingress-controller-fm45m運行在192.168.121.145上。之前的nginx-tcp-ingress-configmap定義的端口號是9000。
訪問192.168.121.145:9000直接可以訪問到Guestbook。