K3s에 Cilium 설치하기

K3s에 Cilium 설치하기 (Installation Using K3s)

무인·리소스 제약 환경, 원격지 또는 IoT 기기 내부의 프로덕션 워크로드를 위해 설계된 고가용성·인증 Kubernetes 배포판인 K3s에 Cilium을 설치하는 과정을 안내할게요.

출처: Installation Using K3s

본문

이 가이드는 K3s에 Cilium을 설치하는 과정을 안내해요. K3s는 무인·리소스 제약 환경, 원격지 또는 IoT 기기 내부의 프로덕션 워크로드를 위해 설계된 고가용성·인증(certified) Kubernetes 배포판이에요.

Cilium은 현재 amd64와 arm64 아키텍처를 지원해요.

마스터 노드 설치 (Install a Master Node)

첫 단계는 K3s 마스터 노드를 설치하되, 기본 CNI 플러그인과 내장 네트워크 정책 강제 지원을 비활성화하는 거예요.

참고: kube-proxy 없이 Kubernetes에서 Cilium을 실행한다면 --disable-kube-proxy 옵션을 추가하세요.

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='--flannel-backend=none --disable-network-policy' sh -

에이전트 노드 설치 (선택 사항)

K3s는 단독 모드나 클러스터로 실행될 수 있어서, 멀티 노드 데이터 경로를 이용한 로컬 테스트에 좋은 선택이에요. 에이전트 노드는 마스터 노드의 /var/lib/rancher/k3s/server/node-token에서 찾을 수 있는 node-token을 사용해 마스터 노드에 조인돼요.

에이전트 노드에 K3s를 설치하고 마스터 노드에 조인하되, 변수는 여러분 환경의 값으로 바꿔주세요.

curl -sfL https://get.k3s.io | K3S_URL='https://${MASTER_IP}:6443' K3S_TOKEN=${NODE_TOKEN} sh -

설치 중 문제가 발생하면 Troubleshooting 섹션을 참고하거나 Cilium Slack에서 도움을 구하세요.

Cilium과 함께 동작하도록 Kubernetes 클러스터를 어떻게 구성해야 하는지는 Kubernetes Requirements를 참고하세요.

클러스터 접근 구성 (Configure Cluster Access)

이후 단계에서 Cilium CLI가 클러스터에 접근하려면 /etc/rancher/k3s/k3s.yaml에 저장된 kubeconfig 파일을 KUBECONFIG 환경 변수로 지정해야 해요.

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

Cilium 설치 (Install Cilium)

Cilium CLI의 최신 버전을 설치해요. Cilium CLI는 Cilium 설치, Cilium 설치 상태 검사, 그리고 다양한 기능(예: clustermesh, Hubble)의 활성화/비활성화에 사용할 수 있어요.

Linux

CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}

macOS

CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "arm64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-darwin-${CLI_ARCH}.tar.gz{,.sha256sum}
shasum -a 256 -c cilium-darwin-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-darwin-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-darwin-${CLI_ARCH}.tar.gz{,.sha256sum}

전체 릴리스 목록은 releases 페이지에서 확인할 수 있어요.

참고: Cilium을 --set=ipam.operator.clusterPoolIPv4PodCIDRList="10.42.0.0/16"로 설치해 k3s 기본 podCIDR인 10.42.0.0/16과 일치시키세요.

참고: Rancher Desktop을 사용한다면 --set 'cni.binPath=/usr/libexec/cni' 추가 플래그로 cni 경로를 덮어써야 할 수 있어요.

다음을 실행해 Cilium을 설치해요.

cilium install 1.20.2 --set=ipam.operator.clusterPoolIPv4PodCIDRList="10.42.0.0/16"

설치 검증 (Validate the Installation)

Cilium이 제대로 설치됐는지 검증하려면 다음을 실행하면 돼요.

$ cilium status --wait
   /¯\
/¯\__/¯\    Cilium:         OK
\__/¯\__/    Operator:       OK
/¯\__/¯\    Hubble:         disabled
\__/¯\__/    ClusterMesh:    disabled
   \__/

DaemonSet         cilium             Desired: 2, Ready: 2/2, Available: 2/2
Deployment        cilium-operator    Desired: 2, Ready: 2/2, Available: 2/2
Containers:       cilium-operator    Running: 2
                  cilium             Running: 2
Image versions    cilium             quay.io/cilium/cilium:v1.9.5: 2
                  cilium-operator    quay.io/cilium/operator-generic:v1.9.5: 2

다음 명령을 실행해 클러스터가 올바른 네트워크 연결성을 갖췄는지 검증해요.

$ cilium connectivity test
ℹ️  Monitor aggregation detected, will skip some flow validation steps
✨ [k8s-cluster] Creating namespace for connectivity check...
(...)
---------------------------------------------------------------------------------------------------------------------
📋 Test Report
---------------------------------------------------------------------------------------------------------------------
✅ 69/69 tests successful (0 warnings)

참고: 연결성 테스트는 일부 파드에서 열려 있는 파일이 너무 많아 배포에 실패할 수도 있어요. 이런 오류가 보이면 호스트 머신의 inotify 리소스 한도를 늘려 보세요 (즉, "too many open files"로 인한 파드 오류 참고).

축하해요! 이제 Cilium이 완전히 동작하는 Kubernetes 클러스터를 갖추셨어요. 🎉

다음 단계 (Next Steps)

  • Hubble Observability 설정

  • CLI로 네트워크 플로우 검사

  • Service Map과 Hubble UI

  • Identity-Aware 및 HTTP-Aware 정책 강제

  • Cluster Mesh 설정

더 알아보기 (Learn more)