프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

개발/Kubernetes

Kubernetes Calico CNI 란?

EVEerNew 2024. 3. 20. 10:19
반응형

 

 

 

참조:https://captcha.tistory.com/78

 

[#1. Kubernetes 시리즈] 3. CNI란? (Container Network Interface)

이번 글에서는 쿠버네티스를 설치하기 전에 간략하게 CNI(Container Network Interface)에 대하여 알아보겠습니다. 무작정 문서대로 설치만 하기 보다는 내가 설치하는 애가 무엇인지 알고 가는게 좋을

captcha.tistory.com

 

 

참조:

https://coffeewhale.com/packet-network2

 

[번역]쿠버네티스 패킷의 삶 - #2

쿠버네티스 패킷의 삶 #1에서 살펴 봤듯이, CNI plugin은 쿠버네티스 네트워킹에서 중요한 역할을 차지합니다. 현재 많은 CNI plugin 구현체들이 존재합니다. 그 중 Calico를 소개합니다. 많은 엔지니어

coffeewhale.com

 

 

 

 

Calico CNI(Container Network Interface)

 

Kubernetes를 세팅할 때 설치한 네트워크 CNI 플러그인이다.

이를 미리 살펴보아서 네트워크가 어떻게 구성되는지 이해해 보자.

 

 

 

 

 

CNI (Container Network Interface)

CNI는 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인이 지켜야 하는 표준이다.

쿠버네티스가 기본적으로 제공하는 CNI인 kubenet은 기능이 매우 제한적이다.

이를 보안하기 위해 다른 3rd-party에서 개발한 CNI 플러그인을 사용한다.

 

CNI가 필요한 이유는 아래와 같다.

 

 

 

 

 

다른 worker node에 동일한 주소를 가진 파드들이 생성되었을 때 서로에게 통신을 하게 되면, 자기 자신에게 보내는 것을 로 인식해 버린다.

따라서 CNI가 브릿지 인터페이스의 네트워크 대역을 다르게 나누어고 라우팅 테이블 정보를 세팅해 준다. 이러면 컨테이너들이 서로 같은 IP를 가지지 않게 된다.

 

 

 

 

 

 

 

 

Calico

 

K8s의 CNI 중에 하나인 Calico는 네트워크 구성을 간편하게 만들어 주기 때문에 많이 사용된다.

https://coffeewhale.com/packet-network2

 

설치된 Calico는 클러스터의 모든 노드에 Calico-node 파드가 실행되어 동작하면서 라우팅 테이블 정보를 세팅한다.

 

 

 

 

 

BGP

Calico는 각 노드마다 존재하는 BGP 데몬인 Bird를 사용해서 다른 Bird들과 라우팅 정보를 교환한다.

일반적으로 작인 규모의 클러스터에서 Bird는 다른 Bird와 Full mash 형태로 Peer 설정이 된다.

 

 

 

 

 

Felix

Calico-node 컨테이너 안에서 동작하여, 라우팅 테이블을 조작한다.

Kube-proxy가 iptables모드인 경우 iptable을 조작하고, ipvs 모드인 경우 ipvs를 조작한다.

 

 

 

 

proxy-arp

kubernetes처럼 가상의 네트워크 장비를 사용하는 경우, 실제 Mac 주소를 사용하지 않기 때문에 ARP에 대해서 누군가가 응답을 해주어야 한다. 이처럼 대리로 ARP 응답을 주는 기술을 Proxy-arp라고 한다.

이 역할을 하는 것이 Tunnel 인터페이스로, 파드들의 ARP 요청자에게 자신의 Mac Address를 넘겨서 자신에게 패킷이 도달하도록 만든다.

 

 

 

 

 

라우팅 모드

 

1. IP-in-IP (기본 모드)

IP 패킷 내에 외부의 IP 정보와 내부의 IP 정보를 넣는다. (enpcapsulated)

따라서 파드의 IP가 내부에 들어가고  호스트 서버의 IP가  외부에 들어가게 된다.

프로젝트에서의 Calico는 IP-in-IP 모드이기 때문에 패킷을 확인해 보면, 파드에서 외부로 패킷이 나갈 때 192.168.56.202 라는 worker2 노드의 IP를 가지고 나가는 것이 확인된다.

 

 

(워커 노드인 192.168.46.202의 파드가 192.168.56.100으로 나갈 때 노드의 IP로 나가진다.)

 

 

2. Direct

Pod의 패킷 정보를 숨기지 않기 때문에 Encapsulation에 의한 오버헤드가 발생하지 않는다.

 

 

3. VXLAN(Virtual Extensible LAN) 모드모드

 

VLAN의 단점을 개선하기 위해 나온 L2의 

VLAN 기술은 Loop를 방지하기 위해  STP로 특정 링크를 차단시킨다.

VLAN은 생성/관리가 힘들고 최대 4000개를 사용할 수 있는 반면에 VXLAN은 최대 1600만 개를 생성 수 있다.

 

VXLAN은 데이터 센터 전차를 하나의 Layer2 Switch로 묶을 수 있다.

VXLAN은 IP-In-IP와 다르게 Layer2에서 외부의 헤더를 VXLAN으로 감싸게 된다.

 

VXLAN 모드는 calico 3.7 버전 이상부터 지원이 된다.

특정 클라우드 벤더사의 쿠버네티스는 IP-in-IP 모드를 지원하지 않기 때문에 이럴 때 사용한다.

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함