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 备注:在建立一个有多个端口的服务的时候,必须给每一个端口指定名字。