[19:49:54 root@master1 service]#cat 07-service-LoadBalancer-externalip.yml apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: LoadBalancer ports: - port: 80 selector: app: my-nginx externalIPs: - 10.0.0.99 [19:50:01 root@master1 service]#kubectl get pod NAME READY STATUS RESTARTS AGE my-nginx-7678697fc-dgjwm 1/1 Running 0 11h my-nginx-7678697fc-lvlsd 1/1 Running 0 11h my-nginx-7678697fc-nbfx4 1/1 Running 0 11h my-nginx-7678697fc-tgpjn 1/1 Running 0 11h [19:50:47 root@master1 service]#kubectl get all NAME READY STATUS RESTARTS AGE pod/my-nginx-7678697fc-dgjwm 1/1 Running 0 11h pod/my-nginx-7678697fc-lvlsd 1/1 Running 0 11h pod/my-nginx-7678697fc-nbfx4 1/1 Running 0 11h pod/my-nginx-7678697fc-tgpjn 1/1 Running 0 11h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-nginx 4/4 4 4 11h NAME DESIRED CURRENT READY AGE replicaset.apps/my-nginx-7678697fc 4 4 4 11h [19:50:57 root@master1 service]#kubectl apply -f 06-service-LoadBalancer.yml service/nginx-service created [19:52:20 root@master1 service]#kubectl get all NAME READY STATUS RESTARTS AGE pod/my-nginx-7678697fc-dgjwm 1/1 Running 0 11h pod/my-nginx-7678697fc-lvlsd 1/1 Running 0 11h pod/my-nginx-7678697fc-nbfx4 1/1 Running 0 11h pod/my-nginx-7678697fc-tgpjn 1/1 Running 0 11h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d service/nginx-service LoadBalancer 10.104.200.153 <pending> 80:31935/TCP 5s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-nginx 4/4 4 4 11h NAME DESIRED CURRENT READY AGE replicaset.apps/my-nginx-7678697fc 4 4 4 11h # 其他机器访问 [19:52:43 root@hakeepalvied2 ~]#curl 10.0.0.50:31935 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [19:52:57 root@hakeepalvied2 ~]#curl 10.0.0.50:31935 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [19:52:58 root@hakeepalvied2 ~]#curl 10.0.0.50:31935 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! [19:52:59 root@hakeepalvied2 ~]#curl 10.0.0.50:31935 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! [19:52:59 root@hakeepalvied2 ~]#curl 10.0.0.50:31935 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [19:52:59 root@hakeepalvied2 ~]#curl 10.0.0.50:31935 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! [19:53:00 root@hakeepalvied2 ~]#curl 10.0.0.50:31935 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [19:53:00 root@hakeepalvied2 ~]#curl 10.0.0.50:31935 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76!
# 添加externalIP [19:55:20 root@master1 service]#cat 07-service-LoadBalancer-externalip.yml apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: LoadBalancer ports: - port: 80 selector: app: my-nginx externalIPs: - 10.0.0.99 [19:55:22 root@master1 service]#kubectl apply -f 07-service-LoadBalancer-externalip.yml service/nginx-service created [20:01:44 root@master1 service]#kubectl get all NAME READY STATUS RESTARTS AGE pod/my-nginx-7678697fc-dgjwm 1/1 Running 0 11h pod/my-nginx-7678697fc-lvlsd 1/1 Running 0 11h pod/my-nginx-7678697fc-nbfx4 1/1 Running 0 11h pod/my-nginx-7678697fc-tgpjn 1/1 Running 0 11h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d service/nginx-service LoadBalancer 10.110.2.86 10.0.0.99 80:30048/TCP 2m14s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-nginx 4/4 4 4 11h NAME DESIRED CURRENT READY AGE replicaset.apps/my-nginx-7678697fc 4 4 4 11h # 非集群机器访问 - 由于externalIP一般是公网,此次将模拟公网IP [20:03:04 root@hakeepalvied2 ~]#ifconfig eth0:1 10.0.0.99 netmask 255.255.255.0 [20:03:11 root@hakeepalvied2 ~]#ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.57 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::20c:29ff:fed5:8871 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:d5:88:71 txqueuelen 1000 (Ethernet) RX packets 52558 bytes 11333545 (11.3 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3897 bytes 280765 (280.7 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.99 netmask 255.255.255.0 broadcast 10.0.0.255 ether 00:0c:29:d5:88:71 txqueuelen 1000 (Ethernet) lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 46 bytes 4410 (4.4 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 46 bytes 4410 (4.4 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [20:03:51 root@master1 service]#curl 10.0.0.99 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [20:03:51 root@master1 service]#curl 10.0.0.99 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [20:03:54 root@master1 service]#curl 10.0.0.99 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [20:03:54 root@master1 service]#curl 10.0.0.99 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38! [20:03:57 root@master1 service]#curl 10.0.0.99 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [20:03:57 root@master1 service]#curl 10.0.0.99 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [20:03:58 root@master1 service]#curl 10.0.0.99 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76! [20:03:58 root@master1 service]#curl 10.0.0.99 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39!
# 绑定clientIP,类似nginx的源地址hash [20:08:54 root@master1 service]#cat 08-service-session.yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: LoadBalancer ports: - port: 80 selector: app: my-nginx sessionAffinity: ClientIP [20:09:05 root@master1 service]#kubectl apply -f 08-service-session.yaml service/nginx-service created [20:09:26 root@master1 service]#kubectl get all NAME READY STATUS RESTARTS AGE pod/my-nginx-7678697fc-dgjwm 1/1 Running 0 11h pod/my-nginx-7678697fc-lvlsd 1/1 Running 0 11h pod/my-nginx-7678697fc-nbfx4 1/1 Running 0 11h pod/my-nginx-7678697fc-tgpjn 1/1 Running 0 11h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d service/nginx-service LoadBalancer 10.111.249.42 <pending> 80:30984/TCP 5s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-nginx 4/4 4 4 11h NAME DESIRED CURRENT READY AGE replicaset.apps/my-nginx-7678697fc 4 4 4 11h [20:09:31 root@master1 service]#curl 10.111.249.42 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [20:09:44 root@master1 service]#curl 10.0.0.50:300984 curl: (3) Port number out of range [20:09:52 root@master1 service]#curl 10.0.0.50:30984 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [20:09:57 root@master1 service]#curl 10.0.0.50:30984 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [20:09:58 root@master1 service]#curl 10.0.0.50:30984 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [20:09:59 root@master1 service]#curl 10.0.0.50:30984 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [20:10:00 root@master1 service]#curl 10.0.0.50:30984 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [20:10:00 root@master1 service]#curl 10.0.0.50:30984 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! [20:10:01 root@master1 service]#curl 10.0.0.50:30984 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77! # 在其他机器访问 [20:08:46 root@hakeepalvied2 ~]#curl 10.0.0.50:30984 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39! [20:10:14 root@hakeepalvied2 ~]#curl 10.0.0.50:30984 kubernetes pod-test v0.1!! ClientIP: 10.0.0.50, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39!
# 无头服务 [20:12:21 root@master1 service]#cat 09-service-headless.yaml apiVersion: v1 kind: Service metadata: name: service-headless spec: selector: app: my-nginx clusterIP: "None" [20:12:25 root@master1 service]#kubectl apply -f 09-service-headless.yaml service/service-headless created [20:12:40 root@master1 service]#kubectl get all NAME READY STATUS RESTARTS AGE pod/my-nginx-7678697fc-dgjwm 1/1 Running 0 11h pod/my-nginx-7678697fc-lvlsd 1/1 Running 0 11h pod/my-nginx-7678697fc-nbfx4 1/1 Running 0 11h pod/my-nginx-7678697fc-tgpjn 1/1 Running 0 11h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d service/service-headless ClusterIP None <none> <none> 6s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-nginx 4/4 4 4 11h NAME DESIRED CURRENT READY AGE replicaset.apps/my-nginx-7678697fc 4 4 4 11h # 进入其中一个pod查看 [20:16:19 root@master1 service]#kubectl exec -it my-nginx-7678697fc-dgjwm -- sh [root@my-nginx-7678697fc-dgjwm /]# nslookup 10.244.4.77 77.4.244.10.in-addr.arpa name = 10-244-4-77.service-headless.default.svc.cluster.local. [root@my-nginx-7678697fc-dgjwm /]# nslookup -query=A service-headless.default.svc.cluster.local. Server: 10.96.0.10 Address: 10.96.0.10#53 Name: service-headless.default.svc.cluster.local Address: 10.244.3.38 Name: service-headless.default.svc.cluster.local Address: 10.244.4.77 Name: service-headless.default.svc.cluster.local Address: 10.244.3.39 Name: service-headless.default.svc.cluster.local Address: 10.244.4.76
[root@my-nginx-7678697fc-dgjwm /]# curl service-headless.default.svc.cluster.local.
kubernetes pod-test v0.1!! ClientIP: 10.244.4.77, ServerName: my-nginx-7678697fc-tgpjn, ServerIP: 10.244.4.76!
[root@my-nginx-7678697fc-dgjwm /]# curl service-headless.default.svc.cluster.local.
kubernetes pod-test v0.1!! ClientIP: 10.244.4.77, ServerName: my-nginx-7678697fc-nbfx4, ServerIP: 10.244.3.38!
[root@my-nginx-7678697fc-dgjwm /]# curl service-headless.default.svc.cluster.local.
kubernetes pod-test v0.1!! ClientIP: 10.244.4.77, ServerName: my-nginx-7678697fc-lvlsd, ServerIP: 10.244.3.39!
[root@my-nginx-7678697fc-dgjwm /]# curl service-headless.default.svc.cluster.local.
kubernetes pod-test v0.1!! ClientIP: 10.244.4.77, ServerName: my-nginx-7678697fc-dgjwm, ServerIP: 10.244.4.77!
# 由此看出,每个都有自己的A记录,可以通过DNS域彼此通信