Cilium 소개

Cilium 소개 (Introduction)

Kubernetes 클러스터에서 Cilium이 제공하는 기능을 설명하는 개요 문서예요. identity 기반 NetworkPolicy, 파드-파드 연결성, 서비스 로드 밸런싱의 원리를 다뤄요.

출처: Introduction

본문

Cilium이 Kubernetes 클러스터에서 제공하는 것 (What does Cilium provide in your Kubernetes Cluster?)

Kubernetes 클러스터에서 Cilium을 실행하면 다음 기능이 제공돼요:

  • Layer 3과 4에서 파드 간 연결성을 격리하는 NetworkPolicy 리소스의 identity 기반 구현.
  • 정책 제어를 확장하는 CustomResourceDefinition 형태의 NetworkPolicy 확장으로 다음을 추가해요:
    • 다음 애플리케이션 프로토콜에 대한 인그레스·이그레스의 Layer 7 정책 집행:
      • HTTP
    • 외부 서비스 접근을 보호하는 CIDR에 대한 egress 지원
    • 외부 headless 서비스에 대한 집행으로, 서비스에 구성된 Kubernetes 엔드포인트 집합으로 자동 제한
  • 파드 간 트래픽에 분산 로드 밸런싱을 제공하는 ClusterIP 구현.
  • 기존 kube-proxy 모델과 완전히 호환됨.

Video Kubernetes 네트워킹과 Cilium에 대해 더 알고 싶다면 eCHO episode 99: Explain Kubernetes Networking and Cilium to Network Engineers를 확인하세요.

파드-파드 연결성 (Pod-to-Pod Connectivity)

Kubernetes에서 컨테이너는 Pod라고 하는 단위로 배포돼요. Pod는 단일 IP 주소로 접근 가능한 하나 이상의 컨테이너를 포함해요. Cilium을 사용하면 각 Pod는 그 Pod를 실행하는 Linux 노드의 노드 프리픽스에서 IP 주소를 받아요. 자세한 내용은 IP Address Management (IPAM)를 참고하세요. 네트워크 보안 정책이 없으면 모든 Pod는 서로 도달할 수 있어요.

Pod IP 주소는 일반적으로 Kubernetes 클러스터에 국한돼요. 파드가 클라이언트로서 클러스터 외부의 서비스에 도달해야 한다면, 네트워크 트래픽은 노드를 떠날 때 자동으로 마스커레이드돼요.

서비스 로드 밸런싱 (Service Load-balancing)

Kubernetes는 네트워크 트래픽을 서로 다른 파드로 로드 밸런싱하는 기능을 사용자에게 제공하는 Services 추상화를 개발했어요. 이 추상화를 사용하면 파드들이 특정 서비스를 실행 중인 모든 파드를 알지 않아도 단일 IP 주소(가상 IP 주소)로 다른 파드에 도달할 수 있어요.

Cilium이 없으면 kube-proxy가 모든 노드에 설치되어, kube-master에서 엔드포인트와 서비스의 추가·제거를 관찰해 iptables에 필요한 집행을 적용해요. 따라서 파드에서/로 받고 보내는 트래픽이 해당 서비스를 제공하는 노드와 포트로 적절히 라우팅돼요. 자세한 내용은 kubernetes 사용자 가이드의 Services를 참고할 수 있어요.

ClusterIP를 구현할 때 Cilium은 kube-proxy와 같은 원리로 동작해요. 서비스의 추가·제거를 관찰하지만 iptables에 집행하는 대신 각 노드의 eBPF 맵 항목을 갱신해요. 자세한 내용은 Pull Request를 참고하세요.

추가 자료 (Further Reading)

Kubernetes 문서에는 Kubernetes Networking Model과 Kubernetes Network Plugins에 대한 더 많은 배경지식이 있어요.

더 알아보기 (Learn more)