kubernetes - pod가 ip를 할당 받는 방법

우야·2021년 5월 26일
0

https://ronaknathani.com/blog/2020/08/how-a-kubernetes-pod-gets-an-ip-address/

Flannel:오버레이 네트워크 공급자(overlay network provider)

  • 역할 : 노드에 할당된 subnet내에서 pod에 ip를 할당하고, ip를 저장하고 있어 서로 네트워크 통신 할수 있게 한다.

CNI (Contanier Network Interface):

  • Linux 컨테이너를위한 일반 플러그인 기반 네트워킹 솔루션을 제공
  • Container에 veth(가상 이더넷)이 장치되며, 이 veth들 사이에서 CNI는 Bridge역할을 하며 IP를 가지고 있다.

CRI (Container Runtime Interface) : kubelet이 다른 컨테이너 런타임을 사용할 수 있도록하는 플러그인 인터페이스

동작 순서
1. kube-controller-manager

  • nodeipam옵션으로 전달 되면,
  • 클러스터 CIDR (클러스터 네트워크의 IP 범위)에서 각 노드에 전용 서브넷 (podCIDR)을 할당합니다.
  • 이러한 podCIDR은 분리 된 서브넷이므로 각 포드에 고유 한 IP 주소를 할당 할 수 있습니다
  1. Kubernetes 클러스터 관리자는 kubelet, 컨테이너 런타임, 네트워크 공급자 에이전트(flannel)를 구성 및 설치하고 각 노드에 CNI 플러그인을 배포

  2. 네트워크 공급자 에이전트(flannel)이 시작되면, 데몬으로 뜬다.

  3. 네트워크 공급자 에이전트(flannel)가 시작되면 CNI 구성이 생성

    • 각 노드에서, Flanneld는 vxlan 장치를 생성하고 kube-controller-manager에서 만든 podCIDR을 apiserver에서 가져와서 각 노드별로 생성가능한 Subnet을 가지고 있다.
    • /run/flannel/subnet.env
  4. 노드에서 포드가 예약되면 kubelet은 CRI 플러그인을 호출하여 포드를 생성

  5. containerd의 경우 Containerd CRI 플러그인은 CNI 구성에 지정된 CNI 플러그인을 호출하여 포드 네트워크를 구성

  6. 이 모든 결과로 포드가 IP 주소

  7. 각 노드에 vxlan디바이스와 일부 라우팅 테이블 항목을 생성

  8. 포드가 생성되면 전체 클러스터에 모든 포드에 대한 경로를 배포하고 이러한 경로를 통해 포드가 IP 주소를 통해 서로 연결할 수 있습니다.

  9. 패킷은 vxlan을 통과하고 UDP패킷으로 캡슐화하며, 캡슐된 패킷은 검색되어 대상 포드로 보내짐

profile
Fullstack developer

0개의 댓글