[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域彼此通信