티스토리 뷰
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 서버가 필요하며 추가적인 네트워크 설정이 필요
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스] 9. 네트워크 4) DNS (1) | 2024.12.13 |
---|---|
[쿠버네티스] 9. 네트워크 3) 서비스 네트워킹 (0) | 2024.12.13 |
[쿠버네티스] 9. 네트워크 1) 쿠버네티스의 네트워크 기본 (0) | 2024.12.13 |
[쿠버네티스] 8. 스토리지 (4) | 2024.12.13 |
[쿠버네티스] 7. 보안 (5) 네트워크 정책 (0) | 2024.12.13 |