Linux, docker, rkt, mesos, kubernetes 등 많은 솔루션에서 각자의 네트워킹 방식이 있다.
이러한 방식을 통일하기 위해 Interface 를 만든 것을 CNI 라고 한다.
쿠버네티스에서 CNI 는 클러스터 내의 파드들에게 네트워크 연결성을 제공하고 관리하는 것으로 볼 수 있다.
앞서 네트워크 네임스페이스와 네트워킹을 통해 브릿지 네트워크에 연결하고 컨테이너끼리 통신하는 방식이 있지만, 이는 수많은 파드가 운영되는 클러스터에서 일일히 작업할 수 없는 양에 달한다.
그렇기 때문에 컨테이너가 생성될 때 자동으로 네트워크 연결성을 제공하기 위해 CNI 를 사용한다.
동작하는 방식은 다음과 같음.
1. 파드 생성 시 쿠버네티스는 CNI 플러그인에게 네트워크 설정을 요청 (weave, cillium 등..)
2. kubelet 은 /etc/cni/net.d 에 있는 CNI 설정 파일을 읽어 어떤 cni 플러그인을 사용할지 결정
해당 파일에는 플러그인 이름, 설정 정보 등이 담겨 있음
3. kubelet 은 설정 파일에 명시된 type 에 해당하는 cni 플러그인 실행 파일을 /opt/cni/bin 에서 찾아 실행
4. 실행된 cni 플러그인은 파드를 위한 네트워크 인터페이스를 생성하고, IP 주소를 할당 및 라우팅 규칙 설정
이 과정에서 노드의 네트워크 네임스페이스가 수정될 수 있음
5. 이에 대한 결과를 kubelet 에 반환하고 kubelet 은 파드의 네트워크 상태를 업데이트함.
즉 CNI 주요 역할은 다음과 같다.
1. IP 주소 할당 : 각 파드에게 고유한 IP 주소를 할당하여 클러스터 내부 통신을 가능하게 함.
2. 네트워크 연결 : 파드들이 서로 통신할 수 있ㅎ도록 네트워크 인터페이스를 설정하고 연결
3. 네트워크 정책적용 : NetworkPolicy 를 구현하여 파드 간의 통신을 제어한다.
'DevOps > ✏️ Cloud' 카테고리의 다른 글
K8s Gateway API (1) | 2025.05.25 |
---|---|
Kubernetes DNS ( coreDNS ) (0) | 2025.05.19 |
Docker Networking (1) | 2025.05.16 |
Network Namespace (1) | 2025.05.15 |
drain, cordon, uncordon 명령 (0) | 2025.03.27 |