티스토리 뷰

1. CNI

1) 정의

- 컨테이너 런타임과 네트워크 플러그인 간의 상호작용을 정의하는 표준 인터페이스 

2) 역할

- 컨테이너 생성 시 네트워크 설정 자동화 

- IP 주소 할당 및 라우팅 테이블 구성

- 컨테이너 삭제 시 네트워크 정리 

(1) 컨테이너 런타임과 CNI

- 컨테이너 런타임: 컨테이너를 생성, 실행, 관리하는 소프트웨어로 컨테이너의 핵심적인 동작을 지원하며, 쿠버네티스와 같은 오케스트레이션 도구와 통합되어 클러스트 내에서 컨테이너 배포 및 관리를 자동화 (Docker, Containerd, CRI-O)

- 컨테이너 런타임은 CNI 플러그인을 호출하여 Pod의 네트워크를 설정 

(2) CNI플러그인의 동작 

- 컨테이너 런타임은 Pod 생성시 CNI플러그인을 호출 

- CNI 플러그인은 Veth Pair 생성, 브리지 네트워크에 연결, IP주소할당, 라우팅 테이블 구성을 수행한다. 

3) 구성 디렉토리

(1) /opt/cni/bin = --cni-bin-dir

- CNI 플러그인의 실행파일을 포함(bridge,flannel,host-local,macvlan)

(2) /etc/cni/net.d

- CNI 플러그인의 구성파일을 포함 

- 구성파일은 사용할 플러그인과 네트워크 설정을 정의 

## 예시
{
  "cniVersion": "0.4.0",
  "name": "mynet",
  "type": "bridge",
  "bridge": "cni0", ## 브릿지 지정
  "isGateway": true, ##게이트웨이 IP 할당 여부 
  "ipMasq": true, ## NAT 활성화 여부 
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/16",
    "routes": [
      { "dst": "0.0.0.0/0" }
    ]
  }
}

4) Pod 생성시 동작 과정 

(1) Kubernetes는 컨테이너 런타임(docker, containerd)을 호출하여 Pod 생성 요청

(2) 컨테이너 런타임은 /etc/cni/net.d 디렉토리에서 JSON 구성 파일을 읽고, /opt/cni/bin 디렉토리에서 적절한 플러그인 실행 파일 호출 

(3) CNI 플러그인은 Veth Pair 생성 및 브리지 연결, IPAM을 통해 Pod에 고유한 IP 주소 할당, 라우팅 테이블 업데이트 

 

2. Weaveworks

1) 정의: Weave CNI는 쿠버네티스 클러스터에서 Pod 간의 네트워크 연결을 지원하는 네트워크 플러그인중 하나 

(1) 기능

- Pod 간 통신: Nat 없이 간 직접 통신 

- 네트워크 토폴로지 관리: 클러스터 내 모든 노드와 Pod의 네트워크 정보 유지 

- 오버레이 네트워크: 노드 간 통신을 위해 패킷 캡슐화 및 디캡슐화 수행 

2) 작동 방식

(1) Weave Agent

- Weave는 각 노드에 에이전트를 배치하여 네트워크를 관리

- 에이전트는 각 노드의 Pod와 네트워크 정보를 동기화하며, 클러스터 전체의 네트워크 토폴로지 유지 

(2) 브리지 생성 

- Weave는 각 노드에 Weave라는 이름의 브리지를 생성 

- 브리지는 Veth Pair를 통해 Pod와 연결되며, Pod에 IP 주소 할당 

(3) 패킷 캡슐화 및 디캡슐화

- 다른 노드에 있는 pod로 전송할 때 : 

Weave 에이전트가 패킷을 가로채고 대상 Pod가 다른 노드에 있음을 인식 -> 패킷을 캡슐화하여 다른 노드의 Weave 에이전트로 전송 -> 대상 노드의 Weave 에이전트가 패킷을 디캡슐화하고 대상 Pod로 전달 

(4) IP 주소 관리

- Weave는 각 Pod에 고유한 IP 주소를 할당하며, 이를 통해 NAT 없어도 Pod 간 통신이 가능 

3) 주요 특징 

(1) 오버레이 네트워크

- Weave는 오버레이 네트워크를 사용하여 물리적 네트워크 위에 가상 네트워크를 생성한다. 

(2) 자동화된 라우팅 

- 각 노드의 Weave 에이전트가 서로 다른 노드와 통신을 하기 위한 라우팅 정보를 자동으로 동기화

(3) DaemonSet배포 

- Weave는 Kubernetes DaemonSet으로 배포되어 클러스터 내 모든 노드에 자동으로 설치 

 

3. IPAM

1) IPAM란?

(1) 정의

- 네트워크에서 IP주소를 할당, 추적, 관리하는 프로세스를 의미

- Pod 네트워킹을 위해 각 Pod에 고유한 IP주소를 할당해야 하며 이를 CNI 플러그인이 담당 

(2) 역할

- Kubernetes는 Pod 간 통신을 위해 각 Pod에 고유한 IP 주소를 할당 

- NAT없이 Pod 간 통신이 가능하도록 네트워크 범위를 관리 

2) CNI와 IPAM

(1) CNI 에서 IPAM

- CNI 구성 파일의 IPAM 섹션에서 IPAM플러그인을 설정

{
  "cniVersion": "0.4.0",
  "name": "example-network",
  "type": "bridge",
  "bridge": "cni0",
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/16",
    "routes": [
      { "dst": "0.0.0.0/0" }
    ]
  }
}

- type: 사용할 IPAM 플러그인 설정(host-local,dhcp)

- subnet: Pod에 할당할 IP 주소 범위

- routes: 라우팅설정 

3) 주요 IPAM 유형 

(1) Host-Local IPAM

- 각 노드에서 로컬로 IP 주소를 관리 

- 사전에 정의된 CIDR 범위에서 Pod에 고유한 IP를 할당

- 할당된 상태는 로컬 파일 시스템에 저장(/var/lib/cni/networks)

- 설정이 비교적 쉽고, 외부 DHCP 서버에 필요하지  않아 단일 노드 환경이나 작은 클러스터에 적합.  멀티 노드 클러스터에선 중복 IP 방지나 노드 간 동기화가 이루어지 않는다. 

(2) DHCP IPAM

- 기존 네트워크의 DHCP 서버를 사용하여 Pod에 동적으로 IP주소를 할당 

- DHCP 임대를 관리하며 DHCP IP 임대기간이 만료됨녀 갱신 요청을 보냄 

- 기존 네트워크 인프라를 활용가능 하며 대규모 멀티 녿 클러스터에서 효율적

- DHCP 서버가 필요하며 추가적인 네트워크 설정이 필요 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함