카테고리 없음

KANS 2주차 - K8S Flannel CNI & PAUSE

유랑유랑 2024. 9. 8. 01:03

CNI(Container Network Interface)

예전부터 CNI란 무엇이고 왜 필요한 것일까하고 궁금했던 적은 있지만 굳이 알아보지 않았다.

일단 이번 스터디를 통해 이것을 알게 되어 좋았다.

 

CNI(Container Network Interface)가 뭐야?

CNI(Container Network Interface)는 컨테이너 런타임 환경과 네트워크 플러그인 간의 표준 인터페이스를 정의하는 규격입니다. 이는 컨테이너 네트워킹을 더욱 유연하고 확장 가능하게 만듭니다.

 

컨테이너 네트워킹? 그게 뭐지?

 

컨테이너 네트워킹은 여러 대상과 통신할 수 있습니다. 주요 통신 대상은 다음과 같습니다:

  1. 컨테이너 간 통신:
    • 같은 호스트 내의 다른 컨테이너들
    • 다른 호스트에 있는 컨테이너들
  2. 호스트와의 통신:
    • 컨테이너가 실행 중인 호스트 시스템
  3. 외부 네트워크와의 통신:
    • 인터넷
    • 외부 서비스나 API
    • 기업 내부 네트워크의 다른 시스템들
  4. 스토리지 시스템과의 통신:
    • 네트워크 attached 스토리지 (NAS)
    • 분산 파일 시스템
  5. 서비스 디스커버리 및 로드 밸런싱 시스템과의 통신
  6. 모니터링 및 로깅 시스템과의 통신

 

K8S 네트워크 동작 기준 중 CNI가 만족시켜야 하는 기준은?

  1. 모든 Pod는 고유한 IP 주소를 가져야 한다:
    • 각 Pod는 NAT 없이 직접 통신할 수 있는 고유한 IP 주소를 가져야 합니다.
  2. 모든 Pod는 노드의 IP를 통해 다른 노드의 Pod와 통신할 수 있어야 한다:
    • 서로 다른 노드에 있는 Pod들 간의 통신이 가능해야 합니다.
  3. 모든 Pod는 NAT 없이 노드의 다른 Pod와 통신할 수 있어야 한다:
    • 같은 노드 내의 Pod들은 직접 통신이 가능해야 합니다.
  4. Pod가 자신을 바라보는 IP와 다른 Pod가 바라보는 IP가 동일해야 한다:
    • Pod의 IP 주소는 내부와 외부에서 동일하게 인식되어야 합니다.
  5. Pod 간 통신 시 포트 충돌을 피해야 한다:
    • 각 Pod는 독립적인 네트워크 네임스페이스를 가져야 합니다.
  6. 클러스터 외부와의 통신을 지원해야 한다:
    • Pod에서 외부 네트워크로의 접근, 그리고 외부에서 Pod로의 접근이 가능해야 합니다.
  7. 네트워크 정책을 지원해야 한다:
    • 트래픽 흐름을 제어하고 보안을 강화하기 위한 네트워크 정책을 구현할 수 있어야 합니다.

 

다음 링크에서 CNI Spec의 상세 내용을 확인할 수 있다.

https://github.com/containernetworking/cni/blob/main/SPEC.md

https://www.cni.dev/

 

CNI 홈페이지도 있으니 한 번 방문해보시라.

 

CNI에 대한 설명은 아래 커피 고래님의 블로그에도 상세하게 기술되어 있습니다. 

https://coffeewhale.com/packet-network1

 

 

Pause Container

쿠버네티스를 공부하다 보면 모르는 것의 연속이라 검색하고 알아볼 내용이 정말 많네요.

Pause 컨테이너는 쿠버네티스 Pod의 '인프라 컨테이너'입니다. 주요 역할은 다음과 같습니다:

  1. 네트워크 네임스페이스 유지: Pod 내 모든 컨테이너가 공유하는 네트워크 환경을 제공합니다.
  2. 좀비 프로세스 처리: Pod 내 다른 컨테이너의 종료된 프로세스를 정리합니다.
  3. Pod 생명주기 관리: Pod가 살아있는 동안 계속 실행되며, Pod의 상태를 대표합니다.

Pause 컨테이너는 매우 작고 가벼우며, 실제로 아무것도 하지 않습니다. 그저 '대기' 상태를 유지할 뿐입니다. 하지만 이 단순한 작업이 쿠버네티스 Pod의 안정적인 운영을 가능하게 합니다.

 

여기에 실제 코드도 있으니 한 번 살펴보는 것도 좋겠습니다.

https://github.com/kubernetes/kubernetes/blob/master/build/pause/linux/pause.c