본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

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 클러스터 만들기

  1. Kubernetes 안내에 따라 kubeadm을 설치하세요

    SECONDARY: kubeadm을 설치한 후에는 호스트를 끄거나 재시작하지 마세요. 바로 다음 단계로 진행하세요.

  2. sudo 권한이 있는 일반 사용자로 kubeadm을 설치한 호스트에서 터미널을 여세요.

  3. 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
    EOF
    

    SECONDARY: 192.168.0.0/16이 네트워크에서 이미 사용 중이라면 다른 pod network CIDR을 골라 위 설정에서 192.168.0.0/16을 교체해야 해요.

  4. 다음 명령어로 컨트롤 플레인을 초기화하세요.

    sudo kubeadm init --config=config.yaml
    
  5. 다음 명령어를 실행해 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 설치하기

  1. 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
    
  2. Tigera Operator를 설치하세요.

    kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/tigera-operator.yaml
    
  3. 필요한 커스텀 리소스를 만들어 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: {}
    EOF
    
    kubectl create -f custom-resources.yaml
    

    SECONDARY: 이 매니페스트를 만들기 전에 내용을 읽어 보고, 설정이 여러분의 환경에 맞는지 확인하세요. 예를 들어 기본 IP 풀 CIDR을 pod network CIDR에 맞게 바꿔야 할 수도 있어요.

  4. 다음 명령어로 모든 파드가 실행 중인지 확인하세요.

    watch kubectl get pods -n calico-system
    

    각 파드의 STATUS가 Running이 될 때까지 기다리세요.

    SECONDARY: Tigera Operator는 calico-system 네임스페이스에 리소스를 설치해요. 다른 설치 방식은 그 대신 kube-system 네임스페이스를 사용할 수도 있어요.

  5. 컨트롤 플레인에 파드를 스케줄링할 수 있도록 taint를 제거하세요.

    kubectl taint nodes --all node-role.kubernetes.io/control-plane-
    

    다음과 같이 출력되어야 해요.

    node/<your-hostname> untainted
    
  6. 다음 명령어로 클러스터에 노드가 생겼는지 확인하세요.

    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 클러스터가 생겼어요.

다음 단계

필수

추천 튜토리얼

더 알아보기 (Learn more)

nftables 데이터 플레인은 iptables보다 성능이 좋을 수 있지만, kube-proxy도 nftables 모드여야 한다는 점이 핵심이에요. Linux 커널 5.13 이상과 nft >= 1.0.1 요구사항도 잊지 마세요. 설치 후 파드 상태가 모두 Running인지 꼭 확인하세요.