Kubernetes 시스템 요구 사항
Kubernetes에 Calico Open Source를 설치하기 전에 충족해야 하는 클러스터, 커널, 플랫폼 요구 사항을 정리한 문서예요. 노드 아키텍처와 Linux 커널 버전, 방화벽 포트, Kubernetes 버전 등 설치 전에 확인할 항목을 한눈에 볼 수 있어요. 권장 배포판을 쓴다면 대부분 이미 충족하고 있을 거예요.
출처: 문서
본문
노드 요구 사항
- x86-64, arm64, ppc64le 또는 s390x 프로세서
- Calico가 호스트의
cali*인터페이스를 관리할 수 있어야 해요. IPIP가 활성화된 경우(기본값) Calico는tunl*인터페이스도 관리할 수 있어야 해요. VXLAN이 활성화된 경우vxlan.calico인터페이스도 관리할 수 있어야 해요.
-
필수 의존성을 갖춘 Linux 커널 5.10 이상. 다음 배포판들은 필요한 커널과 의존성을 갖추고 있고, Calico와 잘 동작하는 것으로 알려져 있어요.
- Ubuntu 20.04 이상
- RHEL 8 이상
- Debian 10 이상
- BottleRocket 1.47 이상
- Talos 1.6 이상
SECONDARY: 위 목록 대부분을 포함해 많은 Linux 배포판에는 NetworkManager가 들어 있어요. 기본적으로 NetworkManager는 Calico가 인터페이스를 관리하는 것을 허용하지 않아요. 노드에 NetworkManager가 있다면 Calico를 설치하기 전에 NetworkManager가 Calico 인터페이스를 제어하지 못하게 하기 단계를 완료하세요.
- 사용 중인 Linux 배포판에 Firewalld나 다른 iptables 관리 도구가 기본 설치되어 있다면 비활성화해야 해요. 이런 도구들은 Calico가 추가한 규칙을 방해해서 예상치 못한 동작을 일으킬 수 있어요.
SECONDARY: 호스트 방화벽이 필요하다면 Calico HostEndpoint와 GlobalNetworkPolicy로 구성할 수 있어요. 구성에 대한 자세한 내용은 호스트와 VM을 위한 정책을 참고하세요.
키/값 저장소
Calico에는 모든 Calico 컴포넌트가 접근할 수 있는 키/값 저장소가 필요해요. Kubernetes에서는 Calico가 etcdv3 클러스터에 직접 접근하도록 설정하거나, Kubernetes API 데이터스토어를 사용하도록 설정할 수 있어요.
네트워크 요구 사항
구성에 따라 필요한 트래픽을 호스트와 방화벽이 허용하도록 확인해요.
| 구성 | 호스트 | 연결 유형 | 포트/프로토콜 |
|---|---|---|---|
| Calico 네트워킹 (BGP) | 전체 | 양방향 | TCP 179 |
| IP-in-IP 활성화된 Calico 네트워킹 (기본값) | 전체 | 양방향 | IP-in-IP, 흔히 프로토콜 번호 4로 표기 |
| VXLAN 활성화된 Calico 네트워킹 | 전체 | 양방향 | UDP 4789 |
| Typha 활성화된 Calico 네트워킹 | Typha 에이전트 호스트 | 수신 | TCP 5473 (기본값) |
| IPv4 WireGuard 활성화된 Calico 네트워킹 | 전체 | 양방향 | UDP 51820 (기본값) |
| IPv6 WireGuard 활성화된 Calico 네트워킹 | 전체 | 양방향 | UDP 51821 (기본값) |
| flannel 네트워킹 (VXLAN) | 전체 | 양방향 | UDP 4789 |
| 전체 | kube-apiserver 호스트 | 수신 | 보통 TCP 443 또는 6443* |
| etcd 데이터스토어 | etcd 호스트 | 수신 | 공식TCP 2379이지만 다를 수 있음 |
* --secure-port 플래그로 kube-apiserver에 전달한 값이에요. 찾기 어렵다면 kubectl get svc kubernetes -o yaml이 반환하는 targetPort 값을 확인해 보세요.
권한
Calico에 CAP_SYS_ADMIN 권한이 있도록 확인해요.
필요한 권한을 제공하는 가장 간단한 방법은 Calico를 root로 실행하거나 privileged 컨테이너로 실행하는 거예요.
Kubernetes 데몬셋으로 설치하면 Calico는 privileged 컨테이너로 실행되어 이 요구 사항을 충족해요. 이를 위해서는 kubelet이 privileged 컨테이너 실행을 허용해야 해요. 두 가지 방법이 있어요.
- kubelet에
--allow-privileged지정 (deprecated) - 파드 보안 정책 사용
Kubernetes 요구 사항
지원 버전
Calico v3.33을 다음 Kubernetes 버전에서 테스트해요. 다른 버전에서도 동작할 수 있지만, 적극적으로 테스트하지는 않아요.
- 1.35
- 1.36
- 1.37
더 새로운 버전에서도 동작할 수 있지만, 새 Kubernetes 버전에 맞춰 테스트된 Calico 버전으로 업그레이드하는 것을 권장해요.
CNI 플러그인 활성화
Calico는 컨테이너 런타임에 CNI 플러그인으로 설치되어야 해요.
이 설치는 Kubernetes 기본 CNI 구성 디렉터리(/etc/cni/net.d)와 바이너리 디렉터리(/opt/cni/bin)를 사용해야 해요.
다른 네트워크 제공자
일반적으로 Calico를 다른 네트워크 제공자와 함께 사용할 수는 없어요.
주목할 만한 예외는 다음과 같아요:
- flannel
- AWS VPC CNI, Azure VNet CNI 플러그인 같은 플랫폼 전용 CNI
이미 다른 CNI를 사용하는 클러스터에서는 Calico로 마이그레이션할 수 없어요.
지원되는 kube-proxy 모드
Calico는 다음 kube-proxy 모드를 지원해요:
iptables(기본값)ipvs: Kubernetes ≥ v1.9.3 필요. 자세한 내용은 IPVS kube-proxy 사용을 참고하세요.nftables: Kubernetes ≥ v1.31.0 필요. 자세한 내용은 Calico nftables 데이터 플레인을 참고하세요.
IP 풀 구성
파드 IP 주소용으로 선택한 IP 범위는 네트워크의 다른 IP 범위와 겹치면 안 돼요. 여기에는 다음이 포함돼요:
- Kubernetes 서비스 클러스터 IP 범위
- 호스트 IP가 할당되는 범위
커널 의존성
SUCCESS: 권장 배포판 중 하나를 사용 중이라면 이미 이 요구 사항들을 충족하고 있어요.
배포판과 커널 버전이 매우 다양하기 때문에, Calico를 실행하는 데 필요한 커널 모듈의 정확한 이름을 특정하기는 어려워요. 하지만 일반적으로 다음이 필요해요:
-
iptables모듈("legacy"와 "nft" 변형 모두 지원). 이 모듈들은 보통 매칭 조건마다 하나씩, 그리고 동작마다 하나씩 수많은 작은 모듈로 나뉘어 있어요. Calico에는 다음이 필요해요:- "base" 모듈(클러스터에서 IPv6를 활성화했다면 IPv6 버전 포함)
- 최소한 다음 매칭 조건:
set,rpfilter,addrtype,comment,conntrack,icmp,tcp,udp,ipvs,icmpv6(커널에서 IPv6를 활성화한 경우),mark,multiport,rpfilter,sctp,ipvs(kube-proxy를 IPVS 모드로 사용하는 경우) - 최소한 다음 동작:
REJECT,ACCEPT,DROP,LOG
-
IP sets 지원.
-
Netfilter Conntrack 지원이 컴파일되어 있어야 해요(SCTP를 사용한다면 SCTP 지원 포함).
-
IPVS 모드의
kube-proxy를 사용한다면 IPVS 지원. -
Calico 네트워킹을 해당 모드로 사용한다면 IPIP, VXLAN, WireGuard 지원.
-
eBPF(
tc훅 지원 포함)와 XDP (eBPF 데이터 플레인을 사용하려는 경우).
더 알아보기 (Learn more)
설치 전에 아키텍처, 커널 버전, 방화벽 포트, Kubernetes 버전 요구 사항을 미리 확인하면 시행착오를 크게 줄일 수 있어요. NetworkManager나 Firewalld가 Calico의 인터페이스 관리와 iptables 규칙을 방해하지 않도록 꼭 점검하세요. 권장 배포판이라면 커널 의존성은 이미 갖춰져 있을 가능성이 높아요.