Pod 어노테이션
Pod 어노테이션 (Pod Annotations)
Cilium은 네트워크 동작을 커스터마이즈하기 위한 여러 파드 수준 어노테이션을 지원해요. 파드에 특정 MAC 주소를 지정하거나, 특정 워크로드에서 소스 IP 검증을 비활성화하는 방법을 설명해요.
출처: Pod Annotations
본문
Cilium은 네트워크 동작을 커스터마이즈하기 위한 여러 파드 수준 어노테이션을 지원해요.
파드에 특정 MAC 주소 사용 (Use a Specific MAC Address for a Pod)
일부 애플리케이션은 소프트웨어 라이선스를 네트워크 인터페이스 MAC 주소에 바인딩해요. Cilium은 운영 체제가 할당하게 두는 대신, 배포 시점에 파드에 대한 특정 MAC 주소를 지정할 수 있는 기능을 제공해요.
주소 구성 (Configuring the address)
파드를 배포하기 전에 cni.cilium.io/mac-address 어노테이션에 MAC 주소를 지정하면 Cilium이 파드 내부의 기본 인터페이스에 그 MAC 주소를 구성해요. 이 MAC 주소는 컨테이너에 격리되므로 같은 노드의 다른 파드에 할당된 다른 MAC 주소와 충돌하지 않아요. MAC 주소는 파드를 배포하기 전에 지정해야 해요.
파드에 cni.cilium.io/mac-address를 원하는 MAC 주소로 설정해 어노테이션하세요. 예를 들어:
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.cilium.io/mac-address: e2:9c:30:38:52:61
labels:
app: busybox
name: busybox
namespace: default
파드를 배포하세요. Cilium이 파드의 첫 번째 인터페이스에 MAC 주소를 자동으로 구성해요. 그 MAC 주소가 지정한 MAC 주소인지 확인하세요.
$ kubectl exec -it busybox -- ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue qlen 1000
link/ether e2:9c:30:38:52:61 brd ff:ff:ff:ff:ff:ff
inet 10.244.2.195/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::e46d:f4ff:fe4d:ebca/64 scope link
valid_lft forever preferred_lft forever
파드에 대한 소스 IP 검증 비활성화 (Disable Source IP Verification for a Pod)
기본적으로 Cilium은 파드에서 보내진 패킷이 파드의 할당된 IP 주소를 소스로 사용하는지 검증해요. 이는 IP 스푸핑을 방지해요. 그러나 NAT 게이트웨이, 프록시, 로드 밸런서, VPN 엔드포인트 같은 일부 워크로드는 자신의 것과 다른 소스 IP 주소로 패킷을 보내야 해요.
Cilium은 어노테이션을 사용해 파드별로 소스 IP 검증을 비활성화할 수 있게 해요. 이는 보안에 민감한 작업이므로 2계층 어노테이션 메커니즘이 사용돼요: 네임스페이스 어노테이션이 먼저 이 동작을 허용해야 파드 어노테이션이 활성화할 수 있어요.
어노테이션 (Annotations)
네임스페이스 어노테이션 (관리자 제어):
config.cilium.io/delegate-source-ip-verification
이 네임스페이스의 파드에 대한 소스 IP 검증 제어를 네임스페이스 소유자에게 위임해요. 파드 어노테이션이 적용되기 전에 클러스터 관리자가 truthy 값("true", "1", "t")으로 설정해야 해요.
파드 어노테이션:
config.cilium.io/disable-source-ip-verification
어노테이션이 지정된 파드에 대한 소스 IP 검증을 비활성화해요. 위 네임스페이스 어노테이션이 truthy 값으로 설정된 경우에만 적용돼요. 네임스페이스 어노테이션과 같은 truthy 값을 허용해요.
어느 어노테이션도 설정되지 않았거나 네임스페이스 어노테이션이 falsy이면, 파드는 전역 데몬 구성을 상속해요.
Warning 소스 IP 검증을 비활성화하면 파드에서 IP 스푸핑이 허용돼요. 즉 파드가 클러스터 내 네트워크 정책 집행을 우회할 수 있게 돼요. 신뢰할 수 있는 워크로드에 대해서만 활성화하세요. 네임스페이스 어노테이션을 누가 수정할 수 있는지 제한하려면 Kubernetes RBAC를 사용하세요.
구성 (Configuration)
먼저 소스 IP 검증 제어를 위임하도록 네임스페이스를 어노테이션하세요:
$ kubectl annotate namespace my-namespace config.cilium.io/delegate-source-ip-verification=true
그런 다음 어노테이션과 함께 파드를 배포하세요:
apiVersion: v1
kind: Pod
metadata:
annotations:
config.cilium.io/disable-source-ip-verification: "true"
labels:
app: nat-gateway
name: nat-gateway
namespace: my-namespace
두 어노테이션은 모두 필요해요. 네임스페이스 어노테이션이 없거나 falsy 값으로 설정되면, 파드 어노테이션은 무시돼요.