1. 程式人生 > 其它 >Linux - K8S - 網路之LoadBalancer

Linux - K8S - 網路之LoadBalancer

[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

# 由此看出,每個都有自己的A記錄,可以通過DNS域彼此通訊