Calico nftables 데이터 플레인
Calico를 nftables 데이터 플레인으로 설치하는 방법을 다뤄요. Kubernetes v1.31부터 베타로 도입된 nftables 기반 kube-proxy와 호환되는 네트워킹 및 네트워크 정책 구현을 제공하죠. 기본 iptables 백엔드 대신 nftables 데이터 플레인을 쓰고 싶다면 이 문서를 따라가 보세요.
출처: 문서
본문
큰 그림
nftables 데이터 플레인을 사용해 Calico를 설치해요.
활용 가치
Kubernetes v1.31에서 기본 iptables 구현보다 나은 성능을 약속하는 nftables 기반 kube-proxy Service 구현이 베타 상태로 도입됐어요. Calico를 nftables 모드로 설치하면 업스트림 nftables kube-proxy와 호환되는 네트워킹과 네트워크 정책 구현을 사용할 수 있어요.
INFO: Calico를 nftables 모드로 사용하려면 클러스터의 kube-proxy도 nftables 모드여야 해요.
KubeProxyConfiguration 리소스 예시
apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: nftables
시작하기 전에
필수 사항
-
다음 요구사항을 만족하는 Linux 호스트:
- x86-64, arm64, ppc64le, 또는 s390x 프로세서
- 2CPU
- 2GB RAM
- 10GB 여유 디스크 공간
nft>= 1.0.1이 있는 Linux 커널 5.13 이상
-
Calico가 호스트의
cali와tunl인터페이스를 관리할 수 있어야 해요호스트에 NetworkManager가 있다면 Configure NetworkManager를 참고하세요.
방법
nftables kube-proxy를 활성화한 단일 호스트 Kubernetes 클러스터 만들기
-
Kubernetes 안내에 따라 kubeadm을 설치하세요
SECONDARY: kubeadm을 설치한 후에는 호스트를 끄거나 재시작하지 마세요. 바로 다음 단계로 진행하세요.
-
sudo 권한이 있는 일반 사용자로 kubeadm을 설치한 호스트에서 터미널을 여세요.
-
nftables kube-proxy 모드를 활성화하는 kubeadm 설정 파일을 만드세요.
cat > config.yaml <<EOF apiVersion: kubeadm.k8s.io/v1beta4 kind: InitConfiguration --- kind: ClusterConfiguration apiVersion: kubeadm.k8s.io/v1beta4 kubernetesVersion: v1.31.0 proxy: {} networking: podSubnet: "192.168.0.0/16" --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: nftables EOFSECONDARY: 192.168.0.0/16이 네트워크에서 이미 사용 중이라면 다른 pod network CIDR을 골라 위 설정에서 192.168.0.0/16을 교체해야 해요.
-
다음 명령어로 컨트롤 플레인을 초기화하세요.
sudo kubeadm init --config=config.yaml -
다음 명령어를 실행해 kubectl을 설정하세요 (
kubeadm init이 반환하는 명령어이기도 해요).mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
nftables 데이터 플레인 모드로 Calico 설치하기
-
Calico 커스텀 리소스 정의(CRD)를 설치하세요.
클러스터가 Kubernetes 1.36 이상이라면:
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/v3_projectcalico_org.yaml클러스터가 Kubernetes 1.34 또는 1.35라면:
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/v3_projectcalico_org-v1beta1.yaml -
Tigera Operator를 설치하세요.
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/tigera-operator.yaml -
필요한 커스텀 리소스를 만들어 Calico를 설치하세요. 이 매니페스트에서 사용할 수 있는 설정 옵션에 대한 자세한 내용은 Tigera Operator API 레퍼런스를 참고하세요.
cat > custom-resources.yaml <<EOF apiVersion: operator.tigera.io/v1 kind: Installation metadata: name: default spec: calicoNetwork: linuxDataplane: Nftables ipPools: - name: default-ipv4-ippool blockSize: 26 cidr: 192.168.0.0/16 encapsulation: VXLANCrossSubnet natOutgoing: Enabled nodeSelector: all() --- apiVersion: operator.tigera.io/v1 kind: APIServer metadata: name: default spec: {} EOFkubectl create -f custom-resources.yamlSECONDARY: 이 매니페스트를 만들기 전에 내용을 읽어 보고, 설정이 여러분의 환경에 맞는지 확인하세요. 예를 들어 기본 IP 풀 CIDR을 pod network CIDR에 맞게 바꿔야 할 수도 있어요.
-
다음 명령어로 모든 파드가 실행 중인지 확인하세요.
watch kubectl get pods -n calico-system각 파드의
STATUS가Running이 될 때까지 기다리세요.SECONDARY: Tigera Operator는
calico-system네임스페이스에 리소스를 설치해요. 다른 설치 방식은 그 대신kube-system네임스페이스를 사용할 수도 있어요. -
컨트롤 플레인에 파드를 스케줄링할 수 있도록 taint를 제거하세요.
kubectl taint nodes --all node-role.kubernetes.io/control-plane-다음과 같이 출력되어야 해요.
node/<your-hostname> untainted -
다음 명령어로 클러스터에 노드가 생겼는지 확인하세요.
kubectl get nodes -o wide다음과 비슷하게 출력되어야 해요.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME <your-hostname> Ready master 52m v1.12.2 10.128.0.28 <none> Ubuntu 18.04.1 LTS 4.15.0-1023-gcp docker://18.6.1
축하해요! 이제 nftables 모드의 Calico가 동작하는 단일 호스트 Kubernetes 클러스터가 생겼어요.
다음 단계
필수
추천 튜토리얼
- Kubernetes NetworkPolicy API로 간단한 애플리케이션 보안 설정하기
- Kubernetes NetworkPolicy API로 ingress와 egress 트래픽 제어하기
- 차단된 연결과 허용된 연결을 실시간으로 보여주는 튜토리얼 실행하기(https://docs.tigera.io/calico/latest/network-policy/get-started/kubernetes-policy/kubernetes-demo.md)
- 실습 워크숍: Calico와 Kubernetes의 기본을 배워 보세요.
더 알아보기 (Learn more)
nftables 데이터 플레인은 iptables보다 성능이 좋을 수 있지만, kube-proxy도 nftables 모드여야 한다는 점이 핵심이에요. Linux 커널 5.13 이상과 nft >= 1.0.1 요구사항도 잊지 마세요. 설치 후 파드 상태가 모두 Running인지 꼭 확인하세요.