Kube-Proxy & CNI

Dongmin Lee·2024년 6월 30일
0

Kubernetes

목록 보기
10/10

1. Kube-Proxy

  • 쿠버네티스 클러스터의 각 노드에서 실행되는 네트워크 프록시

1.1 역할

  • 쿠버네티스 서비스(e.g., ClusterIP, NodePort, LoadBalancer)의 IP 관리
  • 서비스로 들어온 트래픽을 파드의 엔드포인트로 라우팅
  • 서비스에 속한 여러 파드 간에 트래픽을 분산시켜 로드 밸런싱을 제공

1.2 특징

  • Watch 메커니즘을 통해 쿠버네티스 API 서버로부터 클러스터 내 모든 서비스와 엔드포인트 정보를 실시간으로 업데이트한다.
  • 업데이트된 정보를 기반으로 해당 노드의 iptables 또는 IPVS 규칙을 업데이트한다.

2. CNI (Container Network Interface)

  • 네트워크 구성을 관리하기 위한 표준 인터페이스

2.1 역할

  • 파드의 네트워크 인터페이스 설정
  • 파드의 IP 주소 할당
  • 파드 간의 네트워크 연결
  • Network Policy 적용

2.2 특징

  • 네트워크 인터페이스는 Veth pair(가상 이더넷 인터페이스 쌍) 형태로 설정된다.
  • IP 주소 할당은 IPAM(IP Address Management)을 통해 관리된다.
  • 노드 간의 네트워크 트래픽은 BGP, IP-in-IP 터널링, VXLAN 등을 사용하여 전달한다.

2.3 CNI 플러그인

  • Flannel: 간단하고 빠르게 설정 가능
  • Calico: BGP를 통한 고성능 네트워킹 처리
  • Weave Net: 네트워크 트래픽 암호화를 이용한 높은 보안성
  • Cilium: eBPF를 이용한 고성능 네트워크 및 보안 정책 제공

내가 경험해본 CNI 플러그인은 Calico이다. Calico에 대해 더 자세히 정리해보자.

3. Calico

  • 네트워크 보안 정책과 고성능 네트워킹을 제공하는 CNI 플러그인

3.1 특징

  • BGP 피어링 설정을 통해 각 노드 간의 네트워크 정보를 교환한다.
  • 각 노드는 커널 라우팅 테이블을 구성하고 유지한다.
  • 각 노드는 다른 노드로부터 BGP 업데이트를 수신하여 라우팅 테이블에 클러스터 내 모든 파드의 위치 정보를 업데이트한다.
  • 라우팅 테이블을 통해 직접적인 파드 간의 통신을 가능하게 한다.

3.2 BGP (Border Gateway Protocol)

  • 네트워크 간의 라우팅 정보를 교환하는 프로토콜
  • 여기서 Border란 국경, 경계이라는 의미이다.
  • 서로 다른 AS를 연결해주는 경계 게이트웨이 프로토콜
  • 여기서 AS는 Autonomous System의 약자로 하나의 네트워크 관리자에 의해 관리되는 라우터 집단(그룹, 도메인)을 의미한다.
  • AWS에서는 대표적으로 AWS Transit Gateway와 AWS Direct Connect가 BGP로 지원된다.

3.3 BGP를 사용한 파드 간의 트래픽 라우팅

  1. 패킷 생성 (A 파드): 패킷의 source IP는 10.0.0.1이고, destination IP는 10.0.1.1이라고 가정해보자.
  2. 라우팅 테이블 조회 (A 노드): 이미 BGP를 통해 수신한 라우팅 테이블을 기반으로 destination IP 10.0.1.1이 B 노드에 있다는 것을 알고있다.
  3. 패킷 전송 (A 노드 -> B 노드): A 노드에서 B 노드로 패킷을 전송한다.
  4. 패킷 수신 및 전달 (B 노드): B 노드는 패킷을 수신하고, B 노드의 라우팅 테이블을 조회하여 패킷을 B 파드로 전달한다.
  5. 패킷 도착: B 파드는 A 파드로부터 전송된 패킷을 수신한다.

3.4 설치 방법

0개의 댓글