Home (K8S) CNI Weave의 기초 개념
Post
Cancel

(K8S) CNI Weave의 기초 개념

이 글은 Mumshad Mannambeth가 강의한 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 커리큘럼을 토대로 공부한 내용을 정리하였음을 밝힙니다.


CNI 솔루션 중에서 Weave에 대한 간단한 컨셉을 다룬다.

CNI 솔루션을 쓰지 않는 경우의 한계

fig01

CNI 솔루션을 사용하지 않는다면, 파드 간 통신을 가능하게 하기 위해서는 위와 같이 네트워크 주소와 게이트웨이 주소 간의 매핑 관계를 routing table로 일일이 정의해야 한다. 위 예시에서는 노드와 파드가 몇 개 되지 않아서 수동으로 설정하는 것이 가능하겠지만, 실제 운영 환경에서는 노드와 파드가 매우 많아서 일일이 설정하는 것이 불가능할 수 있다.


WeaveNet의 간단한 개념

fig02 출처 : https://ykarma1996.tistory.com/179

Weaveworks의 WeaveNet은 도커 호스트 간에 오버레이 네트워크를 제공한다. 여기서 오버레이란 “덮어 씌우다”라는 뜻이다. 즉, 오버레이 네트워크의 기본 개념은 실제로 복잡할 수 있는 엔드 포인트 간의 네트워크 구조를 추상화하여 네트워크 통신 경로를 단순화 하는 것이다.

fig03

오버레이 네트워크가 구현된 WeaveNet의 작동 방식을 살펴보자면, 각 도커 호스트(노드)에 WeaveNet의 peer라고 불리우는 에이전트를 배포한다. 각 노드에 배포된 peer 에이전트들은 클러스터 내의 파드 및 IP 정보 등 네트워크 토폴로지를 알고 있기 때문에, 이들을 활용하면 사용자가 직접 routing table을 통해 네트워크 주소와 게이트웨이 주소의 매핑 관계를 정의하지 않고서도 컨테이너 간의 통신이 가능해진다.

또한 WeaveNet은 각 노드에 Weave Bridge를 구축하고 IP 주소를 할당한다. (참고로, 하나의 파드는 여러 bridge에 연결될 수 있다. 예를 들어, 도커 bridge에도 연결되면서 동시에 Weave Bridge에도 연결될 수 있다.) 특정 파드로부터 발생한 패킷이 다른 노드에 있는 파드로 전송된다면, WeaveNet은 해당 패킷을 가로채서(intercept) 캡슐화 한 후, WeaveNet의 오버레이 네트워크를 이용해 해당 패킷을 전송한다. 오버레이 네트워크를 통해 전송된 패킷이 목적지 노드에 도착하면, 해당 노드에 있는 peer 에이전트가 캡슐화된 정보를 복원하여 목적지 파드로 정보를 전송한다.


Deploy Weave

Weave의 peer 에이전트는 각 노드마다 하나씩 배포되어야 하기 때문에 데몬셋으로 배포된다. 쿠버네티스 시스템이 잘 설치되어 있고, 노드 간 네트워크 설정들이 알맞게 설정되었으며, 컨트롤 플레인의 기본적인 컴포넌트들이 배포되어 있는 상태라면, kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" 명령으로 WeaveNet을 간단하게 설치할 수 있다.


Weave의 IPAM(IP Address Management)

파드에 IP 주소를 할당하는 CNI 플러그인

fig04

virtual bridge network와 파드에는 어떻게 IP가 할당되는 것일까? 이 IP 주소 정보는 어디에 저장되는 것이며, 무엇이 관리하는 것일까? 우선, 파드에 IP주소를 할당하는 주체는 CNI 플러그인이다.

fig05

직접 수동으로 네트워크를 구축한다고 했을 때 사용하는 스크립트를 살펴보면, 플러그인 내에서 컨테이너 네트워크 네임스페이스에 IP 주소를 할당하는 섹션이 있다. 즉, CNI 플러그인이 IP 할당을 담당한다.

fig06

IP가 중복되지 않도록 관리하는 host-local 플러그인, 그리고 한계점

그렇다면, 어떠한 메커니즘으로 IP들이 중복되지 않게 할당될 수 있도록 관리되는 것일까? 가장 쉬운 방식으로, 위와 같이 각 호스트마다 IP가 어떤 파드에 할당되어 있는지를 파일로써 관리할 수 있겠다. 위 예제에서는 직접 스크립트를 코딩하여 구현하는 모습을 보였지만, 사실 이 과정이 이미 구현된 CNI 플러그인이 있다.

fig07

위와 같이 각각의 호스트 로컬에서 IP 주소를 관리하는 방식이 구현된 플러그인을 host-local 플러그인이라고 한다. 하지만 이 방식 또한 여전히 스크립트 내부에서 플러그인을 적용해야 하는 문제가 있다.

CNI 설정 파일에서 ipam 설정 활용하기

fig08

/etc/cni/net.d/net-script.conf 경로에 있는 CNI 설정 파일에는 ipam을 설정할 수 있는 섹션이 있다. 이곳에 플러그인의 타입과 더불어 사용될 subnet 및 route 정보를 기입할 수 있다. 이러한 설정 파일을 활용하면, 스크립트에 직접 하드코딩을 하지 않고서도 적절한 플러그인을 적용할 수 있다.

Weave의 예시

fig09

위의 과정들은 네트워크 솔루션 제공자들에 따라 조금씩 차이가 있으므로, Weave를 예로 들어 살펴보자. Weave는 기본적으로 전체 네트워크에 10.32.0.0/12 대역의 IP 주소를 사용하는데, 이는 10.32.0.1 ~ 10.47.255.254에 해당되며, 총 1,048,574개다. 각 노드에 데몬셋으로 배포되어 있는 WeaveNet의 peer 에이전트는 이 구간 내의 IP를 쪼개어 구간 별로 나누어가지며, 자신의 노드에 있는 파드들에 IP를 순차적으로 할당한다. 참고로 각 구간 또한 사용자가 직접 설정할 수 있다.


참고 문헌

[1] Mumshad Mannambeth의 강의 : Certified Kubernetes Administrator (CKA) with Practice Tests
[2] 시작하세요! 도커/쿠버네티스 (용찬호 지음) : 시작하세요! 도커/쿠버네티스
[3] 모두의 근삼이 님의 블로그 : Calico?Weave? CNI에 관하여
[4] WeaveWroks 공식 documentation : Fast Datapath & Weave Net

This post is licensed under CC BY 4.0 by the author.