AKS에서 Azure CNI Powered by Cilium으로 설치하기
AKS에서 Azure CNI Powered by Cilium으로 설치하기 (Installation using Azure CNI Powered by Cilium in AKS)
Azure CNI Powered by Cilium 옵션으로 AKS(Azure Kubernetes Service)에 Cilium을 설치하는 과정을 안내할게요. 옵션 선택부터 설치 검증까지 차근차근 살펴봐요.
본문
이 가이드는 Azure Container Network Interface (CNI) Powered by Cilium 옵션을 통해 AKS(Azure Kubernetes Service)에 Cilium을 설치하는 과정을 안내해요.
클러스터 생성 (Create the cluster)
network-plugin azure와 --network-dataplane cilium으로 Azure CNI Powered by Cilium AKS 클러스터를 생성해요. 클러스터는 podsubnet 모드나 overlay 모드로 생성할 수 있어요. 두 모드 모두 트래픽은 Azure Virtual Network 스택을 통해 라우팅돼요. 모드 선택은 클러스터의 특정 사용 사례와 요구 사항에 따라 달라져요. 이 두 모드에 대해 더 알고 싶다면 관련 문서를 참고하세요.
Overlay
az aks create -n <clusterName> -g <resourceGroupName> -l <location> \
--network-plugin azure \
--network-dataplane cilium \
--network-plugin-mode overlay \
--pod-cidr 192.168.0.0/16
처음부터 진행하는 상세 지침도 참고하세요.
Podsubnet
az aks create -n <clusterName> -g <resourceGroupName> -l <location> \
--network-plugin azure \
--network-dataplane cilium \
--vnet-subnet-id /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/nodesubnet \
--pod-subnet-id /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/podsubnet
처음부터 진행하는 상세 지침도 참고하세요.
설치 검증 (Validate the Installation)
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이 제대로 설치됐는지 검증하려면 다음을 실행하면 돼요.
$ 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 클러스터를 갖추셨어요. 🎉
Cilium과 필요한 모든 컴포넌트가 설치되는 과정을 모니터링할 수 있어요.
$ kubectl -n kube-system get pods --watch
NAME READY STATUS RESTARTS AGE
cilium-operator-cb4578bc5-q52qk 0/1 Pending 0 8s
cilium-s8w5m 0/1 PodInitializing 0 7s
coredns-86c58d9df4-4g7dd 0/1 ContainerCreating 0 8m57s
coredns-86c58d9df4-4l6b2 0/1 ContainerCreating 0 8m57s
모든 컴포넌트가 뜨기까지 몇 분 걸릴 수 있어요.
cilium-operator-cb4578bc5-q52qk 1/1 Running 0 4m13s
cilium-s8w5m 1/1 Running 0 4m12s
coredns-86c58d9df4-4g7dd 1/1 Running 0 13m
coredns-86c58d9df4-4l6b2 1/1 Running 0 13m
파드 간 연결성을 테스트하려면 "connectivity-check"를 배포할 수 있어요. 이를 위한 별도 네임스페이스를 만드는 것을 권장해요.
kubectl create ns cilium-test
다음으로 검사(check)를 배포하면 돼요.
kubectl apply -n cilium-test -f https://raw.githubusercontent.com/cilium/cilium/1.20.2/examples/kubernetes/connectivity-check/connectivity-check.yaml
이것은 다양한 연결성 경로로 서로 연결되는 일련의 배포(deployment)들을 배포해요. 연결성 경로에는 서비스 로드밸런싱 유무와 다양한 네트워크 정책 조합이 포함돼요. 파드 이름은 연결성 변형을 나타내며, readiness와 liveness 게이트는 테스트의 성공 또는 실패를 나타내요.
$ kubectl get pods -n cilium-test
NAME READY STATUS RESTARTS AGE
echo-a-76c5d9bd76-q8d99 1/1 Running 0 66s
echo-b-795c4b4f76-9wrrx 1/1 Running 0 66s
echo-b-host-6b7fc94b7c-xtsff 1/1 Running 0 66s
host-to-b-multi-node-clusterip-85476cd779-bpg4b 1/1 Running 0 66s
host-to-b-multi-node-headless-dc6c44cb5-8jdz8 1/1 Running 0 65s
pod-to-a-79546bc469-rl2qq 1/1 Running 0 66s
pod-to-a-allowed-cnp-58b7f7fb8f-lkq7p 1/1 Running 0 66s
pod-to-a-denied-cnp-6967cb6f7f-7h9fn 1/1 Running 0 66s
pod-to-b-intra-node-nodeport-9b487cf89-6ptrt 1/1 Running 0 65s
pod-to-b-multi-node-clusterip-7db5dfdcf7-jkjpw 1/1 Running 0 66s
pod-to-b-multi-node-headless-7d44b85d69-mtscc 1/1 Running 0 66s
pod-to-b-multi-node-nodeport-7ffc76db7c-rrw82 1/1 Running 0 65s
pod-to-external-1111-d56f47579-d79dz 1/1 Running 0 66s
pod-to-external-fqdn-allow-google-cnp-78986f4bcf-btjn7 1/1 Running 0 66s
참고: 연결성 검사를 단일 노드 클러스터에 배포하면, 멀티 노드 기능을 확인하는 파드는 Pending 상태로 남아 있어요. 이는 정상이에요. 이 파드들은 성공적으로 스케줄링되려면 최소 2개의 노드가 필요하기 때문이에요.
테스트가 끝나면 cilium-test 네임스페이스를 제거하세요.
kubectl delete ns cilium-test
위임된 Azure IPAM (Delegated Azure IPAM)
Delegated Azure IPAM(IP Address Manager)은 Azure CNI Powered by Cilium 클러스터에서 생성되는 파드의 IP 할당을 관리해요. Azure Virtual Network 스택에서 라우팅 가능한 IP를 할당해요. Delegated Azure IPAM에 대해 더 알고 싶다면 Azure Delegated IPAM을 참고하세요.