YJWANG

Kubernetes Network 교육용 본문

60.Cloud/80.Kubernetes

Kubernetes Network 교육용

왕영주 2021. 2. 9. 17:32

작성중

Pod to Pod network


pod 내 인터페이스 > veth > teln > (Route table 참고하여 Other Node 로 이동) > terln > veth > pod 내 인터페이스

kubespray 에서 default로 master node HA되는 법


현재 kubernetes service (api-server)는 10.233.0.1의 주소를 가지고 있고 433을 listen 하고 있다.

[root@master01 ~]# kubectl get svc kubernetes 
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.233.0.1   <none>        443/TCP   19h

이는 ipvs로 각 서버에 동일한 IP (10.233.0.1)의 interface가 생기며

6: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    link/ether c6:25:eb:47:61:24 brd ff:ff:ff:ff:ff:ff

ipvs 룰을 통해 각 master node의 api-server의 port로 포워딩된다.

[root@master01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.233.0.1:443 rr
  -> 10.96.90.10:6443             Masq    1      2          0         
  -> 10.96.90.11:6443             Masq    1      2          0         
  -> 10.96.90.12:6443             Masq    1      1          0  

아래 내용은 예전 버전으로 보인다.. 왜 아직까지 nginx가 있는지는 잘 모르겠다.

AWS등과 같은 Public Cloud와 다르게 bare-metal에서는 LB가 없기에 kubespray는 각 WorkerNode에 nginx proxy로 이용하여 LB를 구성하며 이는 POD 올라간다. Config File은 각 Worker Node 의 /etc/nginx/nginx.conf에 있음

[root@master01 ~]# kubectl get pod -o wide -n kube-system 
NAME                                       READY   STATUS    RESTARTS   AGE     IP             NODE       NOMINATED NODE   READINESS GATES
...
nginx-proxy-worker01                       1/1     Running   0          9m9s    10.96.90.20    worker01   <none>           <none>
nginx-proxy-worker02                       1/1     Running   0          9m24s   10.96.90.21    worker02   <none>           <none>

그리고 해당 Config File에 보면 각 Node로 Load Balancing 됨을 알 수 있다. (Upstream)
6443은 각 서버에서 실행되고 있는 kube-apiserver이다.

[root@worker01 ~]# cat /etc/nginx/nginx.conf
...

stream {
  upstream kube_apiserver {
    least_conn;
    server 10.96.90.10:6443;
    server 10.96.90.11:6443;
    server 10.96.90.12:6443;
    }

-

[root@master01 ~]# ss -antp |grep 6443
...                                     
LISTEN    0      128                       *:6443                       *:*      users:(("kube-apiserver",pid=40292,fd=7))

이를 이용해서 master node는 HA를 구성한다.

반응형