Calico 4

Calico Components

이번엔 Calico를 구성하는 Component들에 대해 알아보자. 아래 그림은 Calico component와 관계를 설명하는 다이어그램이다. Felix Calico Datastore로부터 가져온 설정 정보에 맞게 Host의 인터페이스, 라우팅 테이블, iptables(kube-proxy 모드에 따라 IPVS가 될 수 있음)를 관리하여 패킷이 지정된 Pod에 정확히 전달될 수 있게 한다. 클러스터의 Network Policy를 위반한 패킷이 전송되지 않게 차단하는 ACL 기능도 제공한다. BIRD BGP Client 역할을 담당하는 Component다. Felix가 Route 정보를 Linux Kernel FIB(Forwarding Information Base)에 추가할 때, 이를 다른 Node에 공..

Calico IPAM

Kubernetes는 직접 Pod에 IP 주소를 할당하고 관리하는 대신 IPAM 플러그인을 사용하도록 설계되었다. CNI 플러그인과 마찬가지로 다양한 IPAM 플러그인이 존재하지만, 보통은 CNI 플러그인과 같이 제공하는 경우가 많다. Calico 역시 자체 IPAM 플러그인 calico-ipam을 가지고 있으며 다음과 같은 기능을 가지고 있다. Calico IPAM Calico 설치시 따로 설정을 변경하지 않는 이상, Default로 사용되는 IPAM 플러그인이다. 기본적으로 K8s의 Pod CIDR과 매칭되는 하나의 IP Pool을 사용하지만, 필요한 경우 Pod CIDR을 쪼개서 여러개의 IP Pool을 구성하여 이를 node, namespace, pod annotation에 따라 선택할 수 있는 ..

Kubernetes 2021.01.31

CNI - Spec

Container Runtime은 Pod 생성시, 다음과 같은 방법으로 CNI에게 Network 설정을 요청한다. CNI 플러그인이 지원해야하는 Operation CNI 플러그인은 실행가능한 파일로 구현하여, 각 Container Runtime Engine(Docker, rkt 등)에 의해 호출된다. 네트워크 인터페이스를 컨테이너의 Network Namespace에 추가하고, 호스트와 연결(veth pair)한다. 또한 IPAM 플러그인을 통해인터페이스에 IP를 할당하고, Routing Rule을 갱신할 수 있어야 한다. CNI Spec v0.4.0을 기준으로 다음과 같은 4개의 Operation을 지원해야 한다. ADD: 네트워크에 Container 추가 DEL: 네트워크에서 Container 제거 C..

Cluster Networking

시작하며... Kubernetes 클러스터를 직접 구축하는 경우, CNI 플러그인 설치를 요구받게 된다. 현재 시장에는 수십개 이상의 CNI 플러그인이 존재하며, 한번 설치하고나면 운영 중 다른 플러그인으로 교체는 결코 쉽지 않은 작업이 되므로 신중하게 선택해야 한다. 각 플러그인마다 수행방식이나 네트워크 모델이 제각각이며 장단점 또한 다르기 때문에 우리의 선택엔 확실한 근거와 기준이 필요하다. 이를 위해 Container와 Container, Container와 Host 사이에 어떻게 네트워크가 구성되는지 알아보도록 하자. 우선 Kubernetes의 Network Model은 아래와 같이 단순하지만 확고한 요구사항 3개를 명시해 놓았다. K8s Network Requirements Pod은 NAT을 사..