Calico 네트워크 플러그인 탐색 및 실습

이 문서는 Kubernetes 클러스터 내 Calico 네트워크 플러그인의 구성과 실제 적용을 심층적으로 탐구하고, 일반적인 문제 해결 방법 및 네트워크 최적화 전략을 분석합니다.

Calico 네트워크 플러그인 탐색 및 실습

개요

Calico는 Kubernetes 생태계에서 널리 사용되는 컨테이너 네트워크 인터페이스(CNI) 플러그인으로, 고성능 네트워크 연결과 유연한 네트워크 정책 관리를 제공합니다. 이 문서는 실제 프로덕션 환경 경험을 바탕으로 Calico의 핵심 기능과 구성 요점을 심층적으로 분석합니다.

핵심 기능 아키텍처

Calico는 3계층(Layer 3) 라우팅 모델을 사용하여 컨테이너 간 통신을 구현하며, 주요 구성 요소는 다음과 같습니다.

  • Felix: 각 노드에서 실행되는 데몬으로, 라우팅 구성 및 ACL 규칙을 담당합니다.
  • BIRD: 라우팅 배포 구성 요소로, 노드 간 라우팅 정보 교환을 구현합니다.
  • confd: 동적 구성 생성 도구입니다.
  • CNI 플러그인: Kubernetes 네트워크 모델과 연결됩니다.

구성 관리 및 실습

IP 주소 풀 구성

네트워크 아키텍처 원리

graph TD
    subgraph Kubernetes 클러스터
        node1[Node1] -->|BGP 라우팅| node2[Node2]
        node1 -->|VXLAN 터널| node3[Node3]
        node2 -->|IPIP 터널| node3
    end
    node1 --> pod1[Pod]
    node2 --> pod2[Pod]
    node3 --> pod3[Pod]
[root@k8s-03:~/.kube 20:41 $]k get ippools.crd.projectcalico.org -o yaml
apiVersion: v1
items:
- apiVersion: crd.projectcalico.org/v1
  kind: IPPool
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"crd.projectcalico.org/v1","kind":"IPPool","metadata":{"annotations":{},"generation":1,"name":"default-ipv4-ippool"},"spec":{"allowedUses":["Workload","Tunnel"],"blockSize":26,"cidr":"192.168.0.0/16","ipipMode":"Never","natOutgoing":true,"nodeSelector":"all()","vxlanMode":"Always"}}
      projectcalico.org/metadata: '{"uid":"0891de51-013e-4a44-9cb6-0c142f480567","creationTimestamp":"2023-05-26T07:36:30Z"}'
    creationTimestamp: "2023-05-26T07:36:30Z"
    generation: 3
    name: default-ipv4-ippool
    resourceVersion: "37479"
    uid: de7868c1-ad93-4441-aa22-9198d07822f5
  spec:
    allowedUses:
    - Workload
    - Tunnel
    blockSize: 26
    cidr: 192.168.0.0/16
    ipipMode: Never
    natOutgoing: true
    nodeSelector: all()
    vxlanMode: Always
kind: List
metadata:
  resourceVersion: ""

[root@k8s-03:~/.kube 20:41 $]k edit ippools.crd.projectcalico.org default-ipv4-ippool

구성 수정 시 주의사항

  1. IPPool을 수정한 후에는 구성을 적용하기 위해 calico-node 구성 요소를 재시작해야 합니다.
  2. CIDR 변경은 기존 Pod 네트워크 중단을 유발할 수 있으므로 신중하게 작업해야 합니다.
  3. VXLAN/IPIP 모드 선택 시 네트워크 성능과 호환성을 고려해야 합니다.

상세 구성 단계

IPPool 구성 수정

  1. 현재 구성 가져오기:
    kubectl get ippools.crd.projectcalico.org -o yaml
    
  2. 구성 편집:
    kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool
    
  3. 주요 매개변수 설명:
    • cidr: Pod 네트워크 CIDR 범위
    • vxlanMode: Always로 설정 시 VXLAN 활성화
    • ipipMode: Never로 설정 시 IPIP 비활성화
    • natOutgoing: true로 설정 시 아웃바운드 NAT 활성화

일반적인 문제 해결

노드 간 통신 실패

flowchart TD
    A[노드 간 네트워크 불통] --> B{모드 확인}
    B -->|VXLAN| C[UDP 4789 포트 확인]
    B -->|IPIP| D[프로토콜 번호 4 확인]
    C --> E[방화벽 구성]
    D --> E
    E --> F[문제 해결]

구성 확인 명령어

# Calico 노드 상태 확인
calicoctl node status

# 라우팅 테이블 보기
ip route show

성능 최적화 제안

  1. 대규모 클러스터에서는 VXLAN 대신 BGP 사용
  2. eBPF 데이터 플레인을 활성화하여 성능 향상
  3. IP 주소 블록 크기를 합리적으로 설정

참고 문서