[CKA] Docker 네트워킹과 CNI

Docker bridge의 연결 방식과 CNI가 컨테이너 네트워크 설정을 표준화하는 이유를 설명합니다.

Docker의 기본 bridge 네트워크는 호스트에 가상 브리지를 만들고 컨테이너의 네트워크 네임스페이스를 veth 쌍으로 연결합니다. 컨테이너는 브리지 대역의 IP를 받고, 외부로 나갈 때 호스트의 NAT 규칙을 이용합니다.

외부에서 컨테이너로 들어오려면 호스트 포트를 컨테이너 포트에 연결합니다.

docker run -p 8080:80 nginx

이 명령은 호스트의 8080 포트로 들어온 트래픽을 컨테이너의 80 포트로 전달합니다.

CNI가 필요한 이유

런타임마다 브리지 생성, IP 할당, 라우팅 설정 방식을 따로 구현하면 오케스트레이터와 네트워크 구현이 강하게 결합됩니다. CNI는 컨테이너 런타임이 네트워크 플러그인을 호출하는 규약을 정합니다.

Kubernetes의 노드 런타임은 Pod sandbox를 만든 뒤 구성된 CNI 플러그인을 호출합니다. 플러그인은 Pod의 네트워크 네임스페이스에 인터페이스를 연결하고 IP와 경로를 설정합니다.