Kubernetes服務是一種爲一組功能相同的pod提供單一不變的接入點的資源。當服務存在時,它的IP地址和端口不會改變。客戶端經過IP地址和端口號創建鏈接,這些鏈接會被路由到提供該服務的任意一個pod上。經過這種方式,客戶端不須要知道每一個單獨的提供服務的pod的地址,這樣這些pod就能夠在集羣中隨時被建立或移除。node
一、建立一個pod apiVersion: v1 kind: Pod metadata: name: nginx labels: app: web #標籤選擇器app:web namespace: test spec: containers: - name: nginx-test image: test-harbor.cedarhd.com/public/nginx:curl ports: - containerPort: 80 #容器端口 二、爲該pod建立對應的service apiVersion: v1 kind: Service metadata: name: nginx namespace: test spec: ports: - port: 80 #該service服務的可用對外端口 targetPort: 80 #服務將鏈接轉發到容器的端口 selector: app: web #具備app=web標籤的pod都屬於該服務 [root@test-nodes1 k8s-yaml-file]# kubectl get svc -n test NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx ClusterIP 192.168.81.180 <none> 80/TCP 8m8s [root@test-nodes1 k8s-yaml-file]# kubectl get pod -o wide -n test NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 27m 172.7.21.6 test-nodes1.cedarhd.com <none> <none> [root@test-nodes1 k8s-yaml-file]# ipvsadm -ln | grep -C 3 192.168.81.180 TCP 192.168.66.183:80 nq -> 172.7.21.3:8082 Masq 1 0 0 -> 172.7.22.4:8082 Masq 1 0 0 TCP 192.168.81.180:80 nq #對應 -> 172.7.21.6:80 Masq 1 0 0 TCP 192.168.96.231:80 nq -> 172.7.21.6:80 Masq 1 0 0
apiVersion: v1 kind: Service metadata: name: nginx namespace: test spec: ports: - name: http port: 80 targetPort: 80 - name: https port: 443 targetPort: 443 selector: app: web 備註:在建立一個有多個端口的服務的時候,必須給每一個端口指定名字。