Talos Linux에 Cilium 설치하기
Talos Linux에 Cilium 설치하기
이 가이드는 Talos Linux에 Cilium을 설치하는 가장 권장되는 배포 옵션을 다뤄요. 공식 Cilium Helm 차트와 Kube-Proxy replacement를 사용해요.
본문
전제조건 / 제한사항
- Cilium의 Talos Linux 지원은 Talos 버전
>=1.5.0에서만 테스트했어요. - Talos는 Kubernetes 워크로드가 커널 모듈 로딩을 허용하지 않기 때문에, Cilium 기본 capability 목록에서
SYS_MODULE을 제거해야 해요. - Talos Linux의 Forwarding kube-dns to Host DNS(Talos 1.8 이후 기본 활성화)는 Cilium의 eBPF Host-Routing과 함께 동작하지 않아요. 동작시키려면
bpf.hostLegacyRouting을true로 설정해야 해요. 그렇지 않으면 DNS가 동작하지 않아요.
참고
공식 Talos Linux 문서는 이미 Deploying Cilium CNI guide 안에서 다양한 Cilium 배포 옵션을 다루고 있어요. 그래서 이 가이드는 Cilium 관점에서 가장 권장되는 배포 옵션에만 집중할게요.
- 공식 Cilium Helm chart를 통한 배포
- Cilium Kube-Proxy replacement 활성화
- Talos가 이미 제공하는
cgroupv2마운트 재사용- Talos가 기본적으로
v1.Node리소스에PodCIDR을 할당하므로 Kubernetes Host Scope IPAM 모드 사용
Talos Linux 구성하기
Cilium을 설치하기 전에 조정해야 할 Talos Linux Kubernetes 구성이 두 가지 있어요.
cluster.network.cni.name: none으로 다른 CNI가 배포되지 않도록 보장cluster.proxy.disabled: true로 Kube-Proxy 배포 비활성화
patch.yaml 파일을 준비해요.
cluster:
network:
cni:
name: none
proxy:
disabled: true
다음으로 talosctl gen config 명령으로 Talos 클러스터의 구성 파일을 생성해요.
talosctl gen config \
my-cluster https://mycluster.local:6443 \
--config-patch @patch.yaml
Cilium 설치
Kube-Proxy replacement를 활성화하고 Cilium을 실행하려면 k8sServiceHost와 k8sServicePort를 설정해 Kubernetes API를 가리키게 해야 해요. 다행히 Talos Linux는 외부 로드밸런서 없이 호스트 네트워킹만으로 Kubernetes API에 편리하게 접근할 수 있는 KubePrism을 제공해요. 이 KubePrism 엔드포인트는 모든 Talos Linux 노드에서 localhost:7445로 접근할 수 있어요.
helm install cilium cilium/cilium --version 1.20.2 \
--namespace $CILIUM_NAMESPACE \
--set ipam.mode=kubernetes \
--set kubeProxyReplacement=true \
--set securityContext.capabilities.ciliumAgent="{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}" \
--set securityContext.capabilities.cleanCiliumState="{NET_ADMIN,SYS_ADMIN,SYS_RESOURCE}" \
--set cgroup.autoMount.enabled=false \
--set cgroup.hostRoot=/sys/fs/cgroup \
--set k8sServiceHost=localhost \
--set k8sServicePort=7445
helm install cilium oci://quay.io/cilium/charts/cilium 1.20.2 \
--namespace $CILIUM_NAMESPACE \
--set ipam.mode=kubernetes \
--set kubeProxyReplacement=true \
--set securityContext.capabilities.ciliumAgent="{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}" \
--set securityContext.capabilities.cleanCiliumState="{NET_ADMIN,SYS_ADMIN,SYS_RESOURCE}" \
--set cgroup.autoMount.enabled=false \
--set cgroup.hostRoot=/sys/fs/cgroup \
--set k8sServiceHost=localhost \
--set k8sServicePort=7445