728x90

pod는 동일한 호스트에 배치된 하나 이상의 컨테이너로 구성되며, 네트워크 스택 및 볼륨과 같은 리소스를 공유하도록 구성된다

“네트워크 스택 공유”는 pod의 모든 컨테이너가 localhost를 통해 서로 연결될 수 있음을 의미한다

네트워크 네임스페이스

  • Host Network Namespace:
    • eth0 (Host NIC): 호스트 시스템의 물리적 네트워크 인터페이스로, 외부 네트워크와 통신함
    • kube-proxy:
      • Kubernetes 컴포넌트로, 클러스터 내의 네트워크 프록시 역할을 수행함
      • iptables 또는 IPVS를 사용하여 클러스터 내의 서비스 트래픽을 적절한 Pod로 라우팅함
    • cni0 (bridge): 호스트 네트워크 네임스페이스에서 사용하는 가상 브리지로, 쿠버네티스 CNI (Container Network Interface) 플러그인에 의해 생성됨. 여러 포드 네트워크 네임스페이스를 연결하는 역할을 함
    • veth0 (veth): 호스트 네트워크 네임스페이스와 포드 네트워크 네임스페이스를 연결하는 가상 이더넷 인터페이스 페어의 한 쪽 끝으로, 호스트 네트워크 네임스페이스의 cni0 브리지와 연결됨
  • Pod Network Namespace
    • eth0 (veth) : 포드 내 모든 컨테이너는 동일한 네트워크 네임스페이스를 공유하며, 이 네트워크 네임스페이스 내에서 eth0 인터페이스를 사용하여 통신함
    • pause 컨테이너: 포드 네트워크 네임스페이스를 설정하고 유지하며, 이 네트워크 네임스페이스를 다른 컨테이너들과 공유함
    • container1, container2, container3: 사용자 컨테이너들이며, 모두 pause 컨테이너가 설정한 네트워크 네임스페이스를 공유함

네트워크 연결 과정

  1. pod가 생성되고 함께 PAUSE 컨테이너가 생성될 때, PAUSE 컨테이너에 네트워크 인터페이스(eth0)가 생성됨
  2. pod가 생성되는 Node의 host network namespace에도 가상의 인터페이스(veth0)가 하나 생성되며, PAUSE 컨테이너와 직접 연결됨
  3. 이후 PAUSE 컨테이너는 해당 인터페이스에 새로운 IP주소도 자동으로 할당받아 갖게 됨
  4. k8s는 PAUSE 컨테이너가 가진 네트워크 인터페이스를 pod 내 모든 컨테이너가 사용할 수 있도록 구성함
  5. pod 내 모든 컨테이너는 PAUSE 컨테이너를 통해 동일한 IP를 사용하게 되며, 포트를 통해 컨테이너를 구분하게 됨
728x90

+ Recent posts