Cilium은 Linux 커널의 eBPF(extended Berkeley Packet Filter) 기술을 기반으로 하는 오픈 소스 소프트웨어로, 컨테이너화된 워크로드(특히 Kubernetes)의 네트워킹, 보안 및 관측성을 제공하는 솔루션입니다.
전통적인 네트워크 정책은 IP 주소나 포트 번호에 의존하지만, Cilium은 이러한 Layer 3/4 정보뿐만 아니라 컨테이너의 레이블, 애플리케이션 식별자(예: HTTP/gRPC 경로, Kafka 토픽) 등 Layer 7 정보까지 활용하여 훨씬 더 세밀하고 동적인 네트워크 정책을 구현할 수 있습니다.
Cilium의 핵심 기능:
- 네트워크 정책: 컨테이너 간의 통신을 허용하거나 차단하는 정책을 정의합니다.
- 로드 밸런싱: 클러스터 내부 및 외부 트래픽에 대한 효율적인 로드 밸런싱을 제공합니다.
- 관측성: 네트워크 흐름을 실시간으로 추적하고 시각화하여 문제 해결을 돕습니다.
- 보안: 강력한 암호화(IPsec)와 상호 인증(mTLS)을 지원하여 통신을 보호합니다.
대표적인 Cilium 정책 구문에 대한 상세 설명
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: mutual-auth-echo
namespace: default
spec:
endpointSelector:
matchLabels:
app: echo
ingress:
- authentication:
mode: required
fromEndpoints:
- matchLabels:
app: pod-worker
- fromEntities:
- "host"
1. endpointSelector
- matchLabels: {app: echo}
- 설명: 이 정책의 대상을 지정합니다. 이 규칙은 오직 app: echo 레이블을 가진 파드로 들어오는 모든 통신에만 적용됩니다. 이는 정책이 클러스터 내의 특정 워크로드(예: 에코 서버)를 보호하고 제어하는 데 사용됨을 의미합니다.
2. ingress
- 설명: endpointSelector에 의해 지정된 파드로 들어오는 트래픽에 대한 규칙들의 목록입니다. Cilium은 이 목록에 있는 모든 규칙을 순서에 상관없이 검토하며, 하나의 규칙이라도 일치하면 트래픽을 허용합니다. 즉, 이 규칙들은 논리적인 OR 관계로 묶여 있습니다.
3. 첫 번째 ingress 규칙
이 규칙은 app: pod-worker와 app: echo 간의 통신에 대한 보안을 강화합니다.
- authentication: mode: required:
- 설명: 이 필드는 Cilium이 제공하는 상호 TLS(mTLS) 인증을 사용하도록 요구합니다. required 모드는 통신을 시작하는 쪽(pod-worker)과 받는 쪽(echo) 모두 자신의 ID를 증명하는 인증서를 제시해야만 통신이 허용된다는 뜻입니다. 이 과정은 Cilium의 내부 CA(Certificate Authority)를 통해 자동으로 관리되며, 두 파드 간의 트래픽을 암호화하여 중간자 공격을 방지하고 신뢰를 보장합니다.
- fromEndpoints: - matchLabels: {app: pod-worker}:
- 설명: 이 규칙은 오직 app: pod-worker 레이블을 가진 파드에서 시작된 트래픽에만 적용됩니다. 즉, 이 규칙은 echo 파드로 접속하려는 다른 모든 파드에 대해서는 적용되지 않습니다.
4. 두 번째 ingress 규칙
이 규칙은 노드 자체에서 시작된 트래픽에 대한 접근을 허용합니다.
- fromEntities: - "host":
- 설명: fromEntities는 Cilium이 미리 정의해 둔 특별한 "엔티티"로부터의 트래픽을 허용할 때 사용됩니다. 여기서 **host**는 해당 파드가 실행 중인 Kubernetes 노드 자체를 의미합니다. 예를 들어, kubelet과 같은 시스템 데몬이 echo 파드로 상태 점검(liveness/readiness probe)을 보내는 경우 이 규칙에 의해 허용될 수 있습니다.
최종 결론
이 정책은 app: echo 파드를 두 가지 유형의 트래픽으로부터 보호합니다.
- app: pod-worker 파드로부터 오는 트래픽은 반드시 mTLS를 통한 상호 인증이 이루어져야만 허용됩니다. 이는 서비스 간의 통신에 대한 강력한 신원 확인과 암호화를 보장합니다.
- **노드 자체(host)**에서 오는 트래픽은 인증 없이도 허용됩니다. 이는 클러스터 내부 시스템 관리와 관련된 통신을 허용하기 위한 것입니다.
'k8s > CKS' 카테고리의 다른 글
[CKS] BOM 툴 trivy -1 (0) | 2025.09.09 |
---|---|
[CKS] Pod Security Standards - restricted (0) | 2025.09.08 |
[CKS] k8s Cluster & node version upgrade (0) | 2025.09.08 |
[CKS] Pod Security Standards (1) | 2025.09.07 |
[CKS] falco 사용방법 및 샘플 - 2 (0) | 2025.09.07 |