본문 바로가기

OS,Network,Container

[Kubernetes] Calico CNI 개념 알아보기

반응형

- 가시다님 주관 Kubernetes network 스터디를 진행하고 있었지만, 개인 사유로 인해 스터디를 진행하지 못하게 되어 이번이 마지막 쿠버네티스 네트워크 글이 될 것 같습니다.

 

(물론 스터디 수행하면서 관련 내용 정리 얘기이며, 다른 글은 꾸준히 올릴 예정입니다.)

 

- 이번 글은 실습 내용이 없으며, Caclico CNI 개념만 정리할 예정입니다.


1. 개요

Calico가 무엇이며 어떤 역할을 하고 어떻게 동작하는지 확인해본다.

 

Calico CNI가 파드 to 파드 통신, 외부 통신, 다른 노드 간 파드 to 파드 통신에서 어떻게 동작하는지 확인해본다.

 

Calico의 네트워크 모드로는 IPIP 모드, Direct 모드, BGP 모드, VXLAN 모드가 있는데 각각 어떻게 설정이 되어 있으며 어떻게 통신 되는지 확인해본다.

 

Pod 간 통신할 떄 Pod 패킷을 암호화할 수 있는 방법을 확인해본다. (네트워크 레벨)

 

Calico의 네트워크 접근 통제하는 방법을 확인해본다. (Network Policy)


2. 선수 지식 및 키워드 간단히 알아보기

Calico 가상머신이나 컨테이너를 위한 네트워킹, IP 관리, 접근 제어, 모니터링 등 다양한 네트워크 관련 기능을 제공하는 오픈소스 프로젝트이다.
(k8s에서 각 Node에 설치되어 각 Pod 간 네트워크 통신이 가능하도록 도와주는 역할을 한다.)

Bird : 오픈소스 소프트웨어 BGP 관련 컴포넌트

Felix : 인터페이스 관리, 라우팅 정보 관리, ACL 관리, 상태 체크 등 다양한 역할을 담당

IPAM(IP Adress Management) : IP 주소 및 도메인 네임 관리, 네트워크 관리 등을 관리하기 위해 컴퓨터 소프트웨어에서 구현된 방법이다.

BGP(Border Gateway Protocol) : AS 끼리 서로 라우팅 경로를 주고 받으며 통신을 가능하게 하는 라우팅 프로토콜 (Inter-Domain Routing Protocol)

proxy ARP : ARP를 대신 해준다는 뜻
=> 라우터 자신이 가지고 있는 ARP 테이블을 이용하여 호스트가 ARP를 요구할 시 대신 라우터 자신의 MAC 주소를 알려주는 기술


3. Calico란?

- Calico 컴포넌트 아키텍처 : https://projectcalico.docs.tigera.io/reference/architecture/overview

 

[1] Felix : 인터페이스 관리, 라우팅 정보 관리, ACL 관리, 상태 검사

 

[2] Bird : BGP 프로토콜로 Peer에 라우팅 정보 전파 및 수신 역할

 

[3] Confd : Calico Global 설정과 BGP 설정 변경 시 Bird에 적용해주는 역할

 

[4] Datastore Plugin : Calico 설정 정보를 저장하는 곳 (K8S API Datastore 혹은 ETCD 중 선택)

 

[5] Calico IPAM Plugin : 클러스터 내에서 Pod에 할당할 IP 대역 사용

 

[6] Calicoctl : Calico 오브젝트를 관리하는 명령어 (Datastore에 접근하여 CRUD 수행)

 

 

 


4. Calico CNI를 사용한 Pod 통신

 

[1] 동일 노드 간 Pod 통신

동일 노드 간 Pod < - > Pod 통신 ⇒ 내부에서 직접 통신 된다.

[요약]
- iptables에 FORWARD RuleAllow 정책이 설정되어 있다.
- calice# 인터페이스에 proxy arp 설정으로 파드에서 바라보는 GW의 MAC 정보를 파드가 전달 받음
- 동일 노드 내에 Pod 간 통신에서는 Tunnel 인터페이스는 관여하지 않는다.

 

[2] Pod → 외부(인터넷) 통신

Pod에서 외부(인터넷)으로 통신하기 위해서는 해당 노드의 NIC IP 주소로 마스커레이딩이 되어서 외부에 연결이 된다.

[요약]
- calico 기본 설정은 natOutgoing: true
⇒ iptables을 조작하여 MASQUERADE 규칙을 설정
- calice# 인터페이스에 proxy arp 설정
- 파드와 외부간 직접 통신에서는 tunnel 인터페이스는 관여하지 않는다.

 

[3] 다른 노드끼리 파드 간 통신

다른 노드끼리 Pod 간 통신에서는 기본값인 IPIP 모드를 통해서 이루어진다.

[요약]
- 각 노드에 Pod 네트워크 대역은 Bird에 의해 BGP로 광고 및 전파가 된다.
- Bird에 의해 광고 및 전파가 되면 Felix에 의해 호스트의 라우팅 테이블에 자동으로 추가, 삭제된다.


- 다른 노드 간의 파드 통신을 tunl0 인터페이스를 통해 IP 헤더에 감싸진다.
- IP 헤더에 감싸진 뒤 상대 노드 tunl0 인터페이스에 도달하면 Outer 헤더를 제거하고 내부 파드와 통신하게 된다.

 

참고 문서 : https://en.wikipedia.org/wiki/IP_in_IP

 

 

5. Calico 네트워크 모드

Calico는 다양한 네트워크 모드를 제공한다.

모드로는 IPIP 모드(기본값), Direct 모드, VXLAN 모드 등이 있다.

Pod 패킷 암호화를 하기 위해서는 Wireg를 사용할 수 있다.

 

[1] IPIP 모드

노드와 노드 구간에서는 IPIP Encapsulation을 통해 이루어진다.


다른 노드 간의 파드 통신은 tunl0 인터페이스를 통해 IP 헤더에 감싸져서 상대측 노드로 도달 후 tunl0 인터페이스에서 Outer 헤더를 제거하고 내부의 파드와 통신
⇒ 다른 노드의 파드 대역은 BGP로 전달 받아 호스트의 라우팅 테이블에 업데이트 된다. (Felix)

 

[2] Direct 모드

파드 통신 패킷이 출발지 노드의 라우팅 정보를 보고 목적지 노드로 원본 패킷을 그대로 전달

 

[2 - 1] CrossSubnet 모드

: 노드 간 같은 네트워크 대역은 Direct 모드로, 노드 간 다른 네트워크 대역은 IPIP 모드로 동작한다.

 

 

[3] VXLAN 모드

파드 간 통신이 노드 구간에서 VXLAN Encapsulation을 통해서 이루어진다.
⇒ 다른 노드 간 파드 통신이 VXLAN Interface를 통해 L2 Frame이 UDP - VXLAN에 감싸져서 상대측 노드로 도달 후 VXLAN 인터페이스에서 Outer 헤더를 제거하고 내부의 파드와 통신
⇒ BGP 미사용 (VXLAN L3 라우팅을 통해서 동작)

 

 

 

반응형