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은 로컬 호스트에서 각 파드로 가는 모든 인그레스 트래픽을 항상 허용해요.

더 알아보기 (Learn more)