3주차 [1] - Calico CNI

  • Calico CNI 동작과 통신흐름이해한다.

1. Calico 기본 통신 이해

  • Calico는 k8s의CNI입니다.

    • 네트워크 보안기능 지원

    • k8s가 아닌 플랫폼간 통신 지원

  • 실습을 위한 환경 생성합니다.

실습을 진행하게될 환경

  1. 스택을 먼저 생성해줍니다.

  1. 기본 k8s 정보를 확인합니다.

  1. Calico CNI를설치합니다.

calico 설치 확인

1.1 Calico CNI 알아보기

  • Calico는 k8s의 Node간 통신을 연결하는 CNI Plugin 입니다.

  • calicoctl은 파드를 생성하거나, calico 설정이 변경될때, datastore에 정보가 변경됩니다.

  • calico datastore(A) 는 k8s API 저장소를 사용하며, calico 동작을 위해 데이터를 저장합니다.

  • bird(B) 는 오픈 소스 소프트웨어 라우팅 데몬 프로그램으로, pod의 CIDR을 광고합니다. 이를 통해서 각 노드는 다른 노드들의 pod들과 통신 할 수 있습니다.

  • felix(C)는 버드로 알아낸 pod 대역을 라우팅 테이블에 업데이트 하는 역할을 하고 IP Tables 규칙을 설정 합니다.

  • confd는 가벼운 오픈소스 설정 변경 관리 툴입니다. calico datastore 에 변경이 발생하면 bird의 변경된 설정 파일을 만들고 반영하게 합니다.

  • calico는 자체 IPAM 플러그인 을 제공합니다. (pod 에 할당할 IP 대역)

  • 파드 생성할때, CNI 플러그인과 CNI IPAM 플러그인을 통해서 파드의 네트워크 설정을 하고, 통신의 경우 노드 felix의 iptables과 라우팅 테이블 통해서 이루어지게됩니다.

  • ipam show를 보면 각각 노드가 가지고 있는 대역을 확인할 수 있습니다.

ip table들에 대한 규칙 확인

1.2 파드 <-> 파드 간 통신

1.2.1 [실습] - 기본 상태 확인

namespace 확인
  • 여기서 블랙홀 라우팅은 라우팅 루핑 문제를 해결하기 위함

1.2.2 [실습] - 파드 배포 후 상태 확인

  • 파드간 통신 실행 및 확인

    • arp 프록시를 사용하게 됩니다.

    • arp 테이블은 mac address를 ip로 변환해주는 프로토콜입니다.

    • 호스트간 통신시에 각각의 arp 테이블에 대해서 ip를 resolving하지 않고, 프록시 arp 테이블에 대해서 resolving 하는 메커니즘입니다.

1.3 파드 -> 외부(인터넷) 통신

1.3.1 최종 통신 흐름

1.3.2 파드 배포 전 기본상태 확인

1.3.3 파드 배포 및 외부 통신 확인인

1.4 다른 노드에서 파드 <-> 파트 간 통신

1.4.1 최종 통신 흐름

  • 각 노드에 파드 네트워크는 BIRD를 통해서 전파되고, FELIX에 의해 라우팅 테이블이 업데이트됩니다.

  • 다른 노드 간 파드 통신시에는 IPIP 모드를 통해서 이루어지게 됩니다.

  • 이렇게 protocol이 IPIP로 잡혀서 헤더값을 패킷에서 관찰 할 수 있습니다.

1.4.2 파드 배포 전 기본 상태 확인

1.4.3 파드 배포

1.4.4 파드간 통신 실행 확인

패킷을 확인해보면, IPIP로 통신한것을 확인할 수 있습니다.

Last updated