CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다.
시작하기 전: 쿠버네티스 네트워킹
쿠버네티스 네트워크 모델은 4가지 요구사항과 4가지 문제를 해결해야 합니다.
✰ 요구사항
- 파드와 파드간 통신시 NAT 없이 통신이 가능합니다.
- 노드의 에이전트(kubelet, systemd)는 파드와 통신이 가능합니다.
- 호스트 네트워크를 사용하는 파드는 NAT없이 파드와 통신이 가능합니다.
- 서비스 클러스터 IP대역과 파드가 사용하는 IP대역은 중복되지 않아야 합니다.
✰ 문제 점
- 파드 내 컨테이너는 루프백을 통한 통신을 할 수 있습니다.
- 파드 간 통신을 할 수 있습니다.
- 클러스터 내부에서 서비스를 통한 통신을 할 수 있습니다.
- 클러스터 외부에서 서비스를 통한 통신을 할 수 있습니다.
CNI 란
CNI란 Container Network Interface의 약자로 컨테이너로 위에 설명되어있는 4개의 요구사항과 4개의 문제점을 해결하기 위한 규칙을 제공합니다. 대표적인 CNI 플러그인으로는 Calico, Cilium 등이 있습니다.
CNI의 역할
- IP 주소 할당(IPAM): 각 컨테이너 또는 파드에 고유한 IP 주소를 할당합니다.
- 네트워크 설정: 컨테이너가 네트워크 상에서 통신할 수 있도록 가상 네트워크 인터페이스를 생성하고 연결합니다.
- 다양한 네트워크 플러그인 지원: 쿠버네티스는 다양한 CNI 플러그인을 지원하여 클러스터에서 네트워킹 정책 및 설정을 유연하게 관리할 수 있게 합니다. 예를 들어, Calico, Flannel, Weave 등 여러 CNI 플러그인을 통해 네트워크 구현을 할 수 있습니다.
CNI 플러그인의 동작 과정
- 파드가 생성될 때, 쿠버네티스(kubelet)는 CNI 플러그인에게 요청하여 네트워크를 설정합니다.
- CNI 플러그인은 파드에 가상 네트워크 인터페이스를 생성하고, IP 주소를 할당합니다.
- 파드가 삭제될 때는 네트워크 자원 해제 작업을 수행합니다.
Flannel CNI
Flannel은 단일 바이너리 에이전트인 flanneld이 각 노드에서 동작하여, 작은 규모의 클러스터 환경에서 파드들 간 통신 환경을 구성해주는 CNI입니다. host-gw, udp, vxlan 3가지의 모드가 지원되지만 권장되는 방법은 vxlan 모드입니다.
VXLAN 모드
직접 설치해보기
간단하게 kind를 이용하여 flannel을 설치해보려고 합니다. kind를 사용하는 경우 기본 cni가 설치되기 때문에 이 설정을 끈 뒤 클러스터를 생성해봅니다.
아직 노드에 CNI가 설치되지 않아서 NotReady상태인 것을 확인할 수 있습니다.
이제 flannel을 설치해보도록 합시다. flannel 버전은 v0.25.6입니다.
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.25.6/Documentation/kube-flannel.yml
설치 후 노드정보를 살펴보면 정상인 것을 확인할 수 있습니다.
별도로 지정하지 않더라도 kube-flannel이라는 네임스페이스에 생성이 됩니다.
그리고 설치되면서 설정된 설정 파일은 다음과 같습니다.
추가적으로 생성 된 클러스터 정보를 살펴보면 다음과 같습니다.
flannel 정보도 추가로 확인해보면 다음과 같습니다.
TBD; 스터디 자료와는 다른 건 내 테스트에서는 MTU사이즈가 1450으로 잡힘..!!
노드에 붙어있는 annotations도 살펴보았는데 VXLAN통신에 필요한 정보들이 붙어있는 것을 확인할 수 있습니다.
위의 vxlan 모드 그림에 보이는 cni0 인터페이스는 노드에서는 확인이 되지 않는 것을 알 수 있습니다.
그 외에도 정보를 확인해보면 다른 파드 대역에 대한 라우팅 테이블이 업데이트 되어있는 것을 확인할 수 있습니다.
arp 테이블을 확인해보면 이렇게 설정이 되어있는데 각 mac주소가 node의 맥주소인것을 확인할 수 있습니다. (노드에 붙어있는 annotations 정보확인!)
통신흐름 이해해보기
TBD
동일 노드간 파드 통신
다른 노드간 파드 통신
외부로 나가는 통신 흐름
패킷 캡처 해서 확인하기
'K8S > 🔥 network study🔥' 카테고리의 다른 글
[네떡스터디🔥kans] Calico CNI 알아보기 - IPIP 모드 (0) | 2024.09.09 |
---|---|
[네떡스터디🔥kans] Calico CNI 알아보기 (0) | 2024.09.09 |
[네떡스터디🔥kans] 파드 & pause 컨테이너 (1) | 2024.09.04 |
[네떡스터디🔥kans] cgroup v1, v2 (0) | 2024.08.31 |
[네떡스터디🔥kans] overlay filesystem (2) | 2024.08.31 |