Cilium Kubernetes 개념
Cilium Kubernetes 개념 (Concepts)
표준 Cilium Kubernetes 배포는 여러 Kubernetes 리소스로 구성돼요. 이 문서는 DaemonSet, ConfigMap, RBAC 리소스 등 배포 구성 요소와 기존 파드의 네트워킹 전환 방법을 설명해요.
출처: Concepts
본문
배포 (Deployment)
표준 Cilium Kubernetes 배포의 구성은 여러 Kubernetes 리소스로 이루어져 있어요:
DaemonSet리소스: 각 Kubernetes 노드에 배포되는 Cilium 파드를 설명해요. 이 파드는 cilium-agent와 관련 데몬을 실행해요. 이 DaemonSet의 구성에는 Cilium docker 컨테이너의 정확한 버전을 나타내는 이미지 태그(예: v1.0.0)와 cilium-agent에 전달되는 명령줄 옵션이 포함돼요.ConfigMap리소스: cilium-agent에 전달되는 공통 구성 값을 설명해요. 예를 들어 kvstore 엔드포인트와 자격 증명, debug 모드 활성화/비활성화 등이 있어요.ServiceAccount,ClusterRole,ClusterRoleBindings리소스: Kubernetes RBAC가 활성화되어 있을 때 cilium-agent가 Kubernetes API server에 접근하는 데 사용하는 identity와 권한이에요.Secret리소스: 필요하다면 etcd kvstore에 접근하는 데 사용되는 자격 증명을 설명해요.
기존 파드에 대한 네트워킹 (Networking For Existing Pods)
Cilium DaemonSet이 배포되기 전에 이미 파드가 실행 중이었다면, 그 파드들은 여전히 CNI 구성에 따라 이전 네트워킹 플러그인을 사용해 연결돼요. 대표적인 예가 기본적으로 kube-system 네임스페이스에서 실행되는 kube-dns 서비스예요.
이런 기존 파드의 네트워킹을 바꾸는 간단한 방법은, Kubernetes가 Deployment의 파드가 삭제되면 자동으로 재시작한다는 점을 활용하는 것이에요. 즉 원래 kube-dns 파드를 삭제하면 바로 뒤에 시작된 교체 파드는 Cilium이 네트워킹을 관리하게 돼요. 프로덕션 배포에서는 DNS 서비스의 다운타임을 피하기 위해 이 단계를 kube-dns 파드의 롤링 업데이트로 수행할 수 있어요.
$ kubectl --namespace kube-system delete pods -l k8s-app=kube-dns
pod "kube-dns-268032401-t57r2" deleted
kubectl get pods를 실행하면 Kubernetes가 이전 파드를 종료하면서 동시에 새 kube-dns 파드 집합을 시작한 것을 볼 수 있어요:
$ kubectl --namespace kube-system get pods
NAME READY STATUS RESTARTS AGE
cilium-5074s 1/1 Running 0 58m
kube-addon-manager-minikube 1/1 Running 0 59m
kube-dns-268032401-j0vml 3/3 Running 0 9s
kube-dns-268032401-t57r2 3/3 Terminating 0 57m
로컬 호스트로부터의 기본 인그레스 허용 (Default Ingress Allow from Local Host)
Kubernetes에는 Liveness Probes와 Readiness Probes를 통해 사용자에게 애플리케이션의 현재 상태를 알려주는 기능이 있어요. kubelet이 각 파드에 대해 이 상태 확인을 실행할 수 있도록, 기본적으로 Cilium은 로컬 호스트에서 각 파드로 가는 모든 인그레스 트래픽을 항상 허용해요.