Generic Veth 체이닝

Generic Veth 체이닝 (Generic Veth Chaining)

veth 장치 모델을 사용하는 어떤 CNI 플러그인 위에서도 CNI 체이닝을 가능하게 해주는 generic veth 플러그인을 설명할게요. 대부분의 CNI 플러그인이 이 모델을 사용해요.

출처: Generic Veth Chaining

본문

generic veth 체이닝 플러그인은 veth 장치 모델을 사용하는 어떤 CNI 플러그인 위에서도 CNI 체이닝을 가능하게 해줘요. 대부분의 CNI 플러그인이 그러한 모델을 사용해요.

참고: 다른 CNI 플러그인과 체이닝할 때는 일부 고급 Cilium 기능이 제한될 수 있어요.

현재 CNI 플러그인이 veth를 사용하는지 검증하기

  • 워커 노드 중 하나에 SSH로 로그인해요.

  • ip -d link를 실행해 노드의 모든 네트워크 장치를 나열해요. 해당 노드에서 실행 중인 파드를 나타내는 네트워크 장치를 찾을 수 있을 거예요.

  • 네트워크 장치는 다음과 같은 모습일 수 있어요.

103: lxcb3901b7f9c02@if102: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 3a:39:92:17:75:6f brd ff:ff:ff:ff:ff:ff link-netnsid 18 promiscuity 0
    veth addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
  • 3행의 veth 키워드는 네트워크 장치 유형이 가상 이더넷(virtual ethernet)임을 나타내요.

체이닝하려는 CNI 플러그인이 현재 veth를 사용하지 않는다면 generic-veth 플러그인은 적합하지 않아요. 그 경우에는 기본 플러그인의 장치 모델을 이해하는 완전한 CNI 체이닝 플러그인이 필요해요. 그러한 플러그인을 작성하는 것은 간단하며, 자세한 내용은 Cilium Slack으로 연락해 주세요.

체이닝 구성을 정의하는 CNI 구성 생성하기

원하는 CNI 체이닝 구성을 지정하려면 다음 템플릿을 기반으로 chaining.yaml 파일을 생성해요.

apiVersion: v1
kind: ConfigMap
metadata:
  name: cni-configuration
  namespace: kube-system
data:
  cni-config: |-
    {
      "name": "generic-veth",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "XXX",
          [...]
        },
        {
          "type": "cilium-cni",
          "chaining-mode": "generic-veth"
        }
      ]
    }

ConfigMap을 배포해요.

kubectl apply -f chaining.yaml

portmap 플러그인을 활성화한 채 Cilium 배포하기

Helm 저장소를 설정해요.

Helm Repository

helm repo add cilium https://helm.cilium.io/

Cilium 차트는 OCI 레지스트리(Quay.io 및 Docker Hub)에서도 사용할 수 있어요. 추가 설정 없이 oci:// URL로 직접 설치할 수 있어요. 차트 서명 검증과 digest 기반 설치를 포함한 자세한 내용은 OCI Registry 섹션을 참고하세요.

Helm으로 Cilium 릴리스를 배포해요.

Helm Repository

helm install cilium cilium/cilium --version 1.20.2 \
   --namespace kube-system \
   --set cni.chainingMode=generic-veth \
   --set cni.customConf=true \
   --set cni.configMap=cni-configuration \
   --set routingMode=native \
   --set enableIPv4Masquerade=false

OCI Registry

helm install cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
   --namespace kube-system \
   --set cni.chainingMode=generic-veth \
   --set cni.customConf=true \
   --set cni.configMap=cni-configuration \
   --set routingMode=native \
   --set enableIPv4Masquerade=false

더 알아보기 (Learn more)