Calico 네트워크 플러그인 탐색 및 실습
이 문서는 Kubernetes 클러스터 내 Calico 네트워크 플러그인의 구성과 실제 적용을 심층적으로 탐구하고, 일반적인 문제 해결 방법 및 네트워크 최적화 전략을 분석합니다.
Categories:
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
구성 수정 시 주의사항
- IPPool을 수정한 후에는 구성을 적용하기 위해 calico-node 구성 요소를 재시작해야 합니다.
- CIDR 변경은 기존 Pod 네트워크 중단을 유발할 수 있으므로 신중하게 작업해야 합니다.
- VXLAN/IPIP 모드 선택 시 네트워크 성능과 호환성을 고려해야 합니다.
상세 구성 단계
IPPool 구성 수정
- 현재 구성 가져오기:
kubectl get ippools.crd.projectcalico.org -o yaml - 구성 편집:
kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool - 주요 매개변수 설명:
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
성능 최적화 제안
- 대규모 클러스터에서는 VXLAN 대신 BGP 사용
- eBPF 데이터 플레인을 활성화하여 성능 향상
- IP 주소 블록 크기를 합리적으로 설정