5月 062020
Kubernetes集群中的Service从逻辑上代表了一组Pod,并通过label建立与pod的关联
准备Deployment配置文件
[root@k8s-01 ~]# vi httpd-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: httpd spec: replicas: 3 selector: matchLabels: run: httpd template: metadata: labels: run: httpd spec: containers: - name: httpd image: httpd:2.4.41 ports: - containerPort: 80 [root@k8s-01 ~]# kubectl apply -f httpd-deployment.yaml deployment.apps/httpd created [root@k8s-01 ~]#
获取集群pod列表详情
[root@k8s-01 ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES httpd-5bb8cdb99c-g5m95 1/1 Running 0 4m29s 10.244.2.3 k8s-03 <none> <none> httpd-5bb8cdb99c-hzjqd 1/1 Running 0 4m29s 10.244.1.3 k8s-02 <none> <none> httpd-5bb8cdb99c-s4q25 1/1 Running 0 4m29s 10.244.1.4 k8s-02 <none> <none> [root@k8s-01 ~]#
使用CURL模拟浏览器请求pod的IP地址(Pod的IP地址只能被集群中的容器和节点访问到)
[root@k8s-01 ~]# curl 10.244.2.3 <html><body><h1>It works!</h1></body></html> [root@k8s-01 ~]# curl 10.244.1.3 <html><body><h1>It works!</h1></body></html> [root@k8s-01 ~]# curl 10.244.1.4 <html><body><h1>It works!</h1></body></html> [root@k8s-01 ~]# [root@k8s-02 ~]# curl 10.244.2.3 <html><body><h1>It works!</h1></body></html> [root@k8s-02 ~]# curl 10.244.1.3 <html><body><h1>It works!</h1></body></html> [root@k8s-02 ~]# curl 10.244.1.4 <html><body><h1>It works!</h1></body></html> [root@k8s-02 ~]# [root@k8s-03 ~]# curl 10.244.2.3 <html><body><h1>It works!</h1></body></html> [root@k8s-03 ~]# curl 10.244.1.3 <html><body><h1>It works!</h1></body></html> [root@k8s-03 ~]# curl 10.244.1.4 <html><body><h1>It works!</h1></body></html> [root@k8s-03 ~]#
对Pod IP进行PING测试
[root@k8s-01 ~]# ping -c 2 10.244.2.3 PING 10.244.2.3 (10.244.2.3) 56(84) bytes of data. 64 bytes from 10.244.2.3: icmp_seq=1 ttl=63 time=2.03 ms 64 bytes from 10.244.2.3: icmp_seq=2 ttl=63 time=0.660 ms --- 10.244.2.3 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.660/1.348/2.036/0.688 ms [root@k8s-01 ~]# ping -c 2 10.244.1.3 PING 10.244.1.3 (10.244.1.3) 56(84) bytes of data. 64 bytes from 10.244.1.3: icmp_seq=1 ttl=63 time=1.58 ms 64 bytes from 10.244.1.3: icmp_seq=2 ttl=63 time=0.641 ms --- 10.244.1.3 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.641/1.115/1.589/0.474 ms [root@k8s-01 ~]# ping -c 2 10.244.1.4 PING 10.244.1.4 (10.244.1.4) 56(84) bytes of data. 64 bytes from 10.244.1.4: icmp_seq=1 ttl=63 time=0.658 ms 64 bytes from 10.244.1.4: icmp_seq=2 ttl=63 time=0.483 ms --- 10.244.1.4 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.483/0.570/0.658/0.090 ms [root@k8s-01 ~]#
创建服务Service配置文件
[root@k8s-01 ~]# vi httpd-service.yaml apiVersion: v1 kind: Service metadata: name: httpd-service spec: selector: run: httpd ports: - protocol: TCP port: 8080 targetPort: 80 [root@k8s-01 ~]# kubectl apply -f httpd-service.yaml service/httpd-service created [root@k8s-01 ~]#
获取集群Service列表详情
[root@k8s-01 ~]# kubectl get services -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR httpd-service ClusterIP 10.109.145.140 <none> 8080/TCP 4m9s run=httpd kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m <none> [root@k8s-01 ~]#
尝试ping集群IP地址(默认无法ping通)
[root@k8s-01 ~]# ping 10.109.145.140 PING 10.109.145.140 (10.109.145.140) 56(84) bytes of data. ^C --- 10.109.145.140 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 1999ms [root@k8s-01 ~]#
使用Service获得的集群IP访问具有run=httpd标签的后端Pod及容器
[root@k8s-01 ~]# curl 10.109.145.140:8080 <html><body><h1>It works!</h1></body></html> [root@k8s-01 ~]# curl 10.109.145.140:8080 <html><body><h1>It works!</h1></body></html> [root@k8s-01 ~]# curl 10.109.145.140:8080 <html><body><h1>It works!</h1></body></html> [root@k8s-01 ~]# curl -I 10.109.145.140:8080 HTTP/1.1 200 OK Date: Wed, 06 May 2020 07:24:57 GMT Server: Apache/2.4.41 (Unix) Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT ETag: "2d-432a5e4a73a80" Accept-Ranges: bytes Content-Length: 45 Content-Type: text/html [root@k8s-01 ~]#
获取服务详情以确认Cluster IP指向的后端Pod IP信息
[root@k8s-01 ~]# kubectl describe services httpd-service Name: httpd-service Namespace: default Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"httpd-service","namespace":"default"},"spec":{"ports":[{"port":80... Selector: run=httpd Type: ClusterIP IP: 10.109.145.140 Port: <unset> 8080/TCP TargetPort: 80/TCP Endpoints: 10.244.1.3:80,10.244.1.4:80,10.244.2.3:80 Session Affinity: None Events: <none> [root@k8s-01 ~]# [root@k8s-01 ~]# kubectl get endpoints httpd-service NAME ENDPOINTS AGE httpd-service 10.244.1.3:80,10.244.1.4:80,10.244.2.3:80 5m23s [root@k8s-01 ~]#