[k8s] controlplane Pod들이 CNI망에 속하지 않는 이유

2023. 8. 8. 15:16[ DevOps ]/[ k8s ]

 

controlplane을 구성하는 Pod IP 확인

 

현재 클러스터의 Pod CIDR은 10.244.0.0/16로 설정되어 있으며 호스트 CIDR은 172.31.50.113/20로 설정되어 있는 상태이다. 하지만 controlplane을 구성하는 Pod IP를 확인한 결과 kube api server를 비롯한 각종 Pod는 CNI 망에 속하지 않는 것을 볼 수 있다.

 

 

cf. Pod CIDR 확인하기

k describe po <구동중인 CNI플러그인 pod name> -n kube-system  | grep -i ip

 

 

API server, kube-proxy와 같은 Master Node의 컴포넌트들은 CNI 망에 속하지 않고 호스트 네트워크 영역을 따른다.(모든 Master Node 컴포넌트가 그러한 것은 아님) 즉, 컨테이너(Pod)로 띄워지더라도 네트워크 영역은 호스트와 격리되지 않는다는 것이다. 이는 API server와 같은 컴포넌트가 CNI가 구동되기 전에도 구동되어야 하는 존재이기 때문이다. 

 

api server의 manifest를 보면 "hostNetwork: true"로 설정된 것을 확인할 수 있다. 즉, api server 역시 Pod로 구동되긴 하지만, kubelet이 api server를 띄울 때 호스트 망에서 구동되도록 하는 것이다.

 

 

controlplane Pod들이 CNI망에 속하지 않는 이유

1) 보안: Master 컴포넌트는 클러스터를 관리하고 제어하는 역할을 수행하기 때문에 보안적인 이유로 격리되어야 한다. 예를들어 클러스터 관리에서 주요 역할을 할 api-server가 CNI망에 속할 경우, CNI 장애에 대한 디펜던시를 갖게 되는 위험한 구조가 된다.

 

2) 논리적 분리: 애초에 api-server, 컨트롤러와 같은 컴포넌트는 애플리케이션 Pod 들과 논리적인 역할 자체가 다르다.

 

 

 

 

Reference

- hostNetwork 옵션의 구동방식, https://xn--vj5b11biyw.kr/306

 

 

 

 

'[ DevOps ] > [ k8s ]' 카테고리의 다른 글

[k8s] 오토스케일링(HPA, VPA) 기본개념  (0) 2023.07.01
[k8s] Kustomize  (0) 2022.12.05
[k8s] Controller - CronJob  (0) 2022.10.01
[k8s] Controller - Job  (0) 2022.09.27
[k8s] Controller - StatefulSet(sf)  (0) 2022.09.22