Ssoon

[3주차] Calico CNI 본문

쿠버네티스 네트워크 스터디 3기

[3주차] Calico CNI

구구달스 2024. 9. 10. 14:53
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 3기

 CNI (Container Network Interface)

  • CNI Kubernetes 같은 컨테이너 오케스트레이션 시스템에서 네트워크 연결을 설정하고 관리하는 표준 인터페이스입니다. Kubernetes에서 각 Pod가 서로 통신할 수 있도록 네트워크를 제공하는데, Calico는 CNI 중 하나로 사용됩니다.

 Calico

  • Calico는 Kubernetes 클러스터에서 네트워크 정책과 보안을 제공하는 네트워크 플러그인입니다. 특히, Calico는 다음과 같은 특징을 갖고 있습니다:
    • L3 기반의 네트워킹: 레이어 3(L3) 네트워크를 사용하여 라우팅 기반의 네트워크를 구현합니다.
    • 네트워크 정책: 클러스터 내에서 어떤 Pod가 다른 Pod와 통신할 수 있을지 세부적으로 제어할 수 있는 네트워크 정책을 설정할 수 있습니다.
    • BGP 지원: Calico는 BGP(Border Gateway Protocol)를 사용하여 네트워크를 확장하고, 클라우드 환경이나 하이브리드 네트워크에서 클러스터 간 트래픽을 효율적으로 관리합니다.

Calico Components

https://docs.tigera.io/calico/latest/reference/architecture/overview

🧿  Calico API Server

  • Calico의 설정 및 상태를 관리하는 중앙 관리 인터페이스입니다.

주요 기능:

  • API 제공: Calico의 모든 설정, 네트워크 정책, IP 주소 관리, 라우팅 정보 등을 조회하고 설정할 수 있는 REST API를 제공합니다.
  • 데이터 저장소와 상호작용: Calico의 네트워크 및 정책 데이터를 저장하고 관리하는 데이터스토어(Etcd, Kubernetes API 등)와 통신하여 설정 정보를 관리합니다.

🧿 Felix

  • calico-node의 핵심 컴포넌트로, 실제 네트워크 정책을 각 노드에 적용하고, 네트워크 트래픽을 제어합니다.

주요 기능:

  • 네트워크 정책 적용: Felix는 네트워크 정책에 따라 허용된 트래픽 차단된 트래픽을 구분합니다. 예를 들어, 특정 Pod는 외부 네트워크로 나갈 수 없도록 차단할 수 있습니다.
  • 인터페이스 설정: 각 Pod에 연결된 **가상 네트워크 인터페이스(veth)**를 설정하고, 트래픽이 올바르게 라우팅될 수 있도록 관리합니다.
  • 보안 그룹과의 연동: Felix는 네트워크 보안 규칙을 적용하여 Kubernetes 클러스터에서 Pod 간, 또는 Pod와 외부 네트워크 간의 트래픽을 보호합니다.

🧿 BIRD (BGP Daemon)

  • BIRD BGP 프로토콜을 통해 노드 간의 라우팅 정보를 교환하는 데 사용되는 데몬(프로세스)입니다. Calico는 이를 통해 각 노드가 어디로 트래픽을 보내야 하는지 경로 정보를 자동으로 결정합니다.

주요 기능:

  • 노드 간 라우팅: 각 노드에 있는 Pod가 다른 노드의 Pod와 통신할 때, BIRD가 최적의 경로를 설정합니다.
  • 동적 경로 교환: BIRD는 노드 간 동적으로 네트워크 경로 정보를 교환하여, 네트워크 경로가 변화하더라도 트래픽이 원활하게 이동할 수 있도록 합니다.

🧿 confd

  • Calico 구성 파일을 관리하고, 변경된 설정을 네트워크 시스템에 자동으로 적용하는 구성 관리 도구입니다.

주요 기능:

    • 동적 설정 업데이트: Calico의 설정이 변경되면, confd가 이를 감지하여 네트워크 설정 파일을 자동으로 업데이트하고 적용합니다.
    • BGP 설정 관리: BIRD와 같은 BGP 데몬의 설정 파일을 관리하여, 라우팅 정보가 변경되면 이를 자동으로 업데이트합니다.

🧿 CNI (Container Network Interface) Plugin

  • 컨테이너 네트워크 인터페이스를 설정하는 도구로, Kubernetes에서 Pod가 생성될 때 Pod의 네트워크를 설정합니다.

주요 기능:

  • Pod 네트워크 설정: Pod가 생성될 때 가상 네트워크 인터페이스를 생성하고, Pod에 IP 주소를 할당하며, 다른 Pod와 통신할 수 있도록 설정합니다.
  • 네트워크 삭제: Pod가 삭제되면, 해당 Pod의 네트워크 인터페이스도 함께 정리합니다.

🧿 Datastore Plugin

  • Calico가 네트워크 정책과 설정 정보를 저장하는 데이터 저장소를 관리하는 컴포넌트입니다.

주요 기능:

  • Kubernetes API 또는 Etcd와 통신: Calico는 네트워크 설정을 저장할 때 Kubernetes API Etcd를 사용할 수 있는데, 이때 datastore 플러그인이 이를 관리합니다.
  • 설정 정보 읽기/쓰기: 네트워크 정책, IP 주소 정보 등을 데이터 저장소에 저장하고, 필요할 때 이를 불러옵니다.

🧿 IPAM (IP Address Management) Plugin

  • Kubernetes 클러스터에서 각 Pod에 고유한 IP 주소를 할당하는 기능을 담당합니다.

주요 기능:

  • IP 주소 할당: Pod가 생성될 때 유일한 IP 주소를 할당하고, 해당 Pod가 어떤 서브넷에 속할지 결정합니다.
  • IP 주소 회수: Pod가 삭제되면, 할당되었던 IP 주소를 회수하여 다시 사용할 수 있도록 관리합니다.

🧿 Typha

  • Typha는 대규모 클러스터에서 성능을 최적화하기 위한 Calico의 컴포넌트입니다. 특히 노드가 많아질 때 calico-node와 calico-kube-controllers 간의 통신을 최적화해 줍니다.

주요 기능:

  • 데이터 전달 최적화: Typha는 컨트롤러에서 발생하는 네트워크 정책, 경로 변경 등의 정보를 여러 노드로 전달할 때 중앙에서 처리하여 통신 오버헤드를 줄입니다.
  • 확장성 지원: 클러스터의 노드가 많아질수록 Typha는 각 노드가 컨트롤러와 효과적으로 소통할 수 있게 하여, 성능 저하를 방지합니다.

🧿 Dikastes

  • Calico에서 네트워크 정책을 더 세밀하게 관리하는 컴포넌트로, 주로 서비스 메시와의 통합에서 사용됩니다.

주요 기능:

  • 서비스 메시 정책 적용: Kubernetes 클러스터에서 Istio 같은 서비스 메시를 사용하는 경우, 네트워크 정책을 더 세밀하게 제어할 수 있도록 도와줍니다.
  • 네트워크 정책 확인: 네트워크 정책이 올바르게 적용되었는지 확인하고, 트래픽 제어를 지원합니다.

 

Comments