본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

파드가 추가 소스 IP 프리픽스를 쓰도록 허용하기

원문 보기 위키 갱신

기본적으로 Calico는 파드의 소스 IP가 파드 자신의 IP와 일치하지 않는 이그레스(egress) 트래픽을 막아요. 이는 IP 스푸핑을 막기 위해서예요. 하지만 투명 프록시 역할을 하면서 원래 클라이언트의 소스 IP를 그대로 유지하는 파드처럼, 다른 소스 주소로 트래픽을 보내야 하는 워크로드도 있어요. allowedSourcePrefixes 애노테이션은 특정 파드에 나열한 프리픽스에 한해 이 스푸핑 검사를 풀어줘요.

출처: Allow pods to use additional source IP prefixes

본문

큰 그림

허용할 소스 프리픽스를 지정해서, 파드가 자신의 파드 IP가 아닌 소스 IP 주소로 이그레스 트래픽을 보내도록 허용해요.

이 기능의 가치

기본적으로 Calico는 파드의 소스 IP가 파드 IP와 일치하지 않으면 이그레스 트래픽을 차단해요. 이게 IP 스푸핑 방지 장치예요. 그런데 원래 클라이언트 소스 IP를 유지하는 투명 프록시 역할의 파드처럼, 다른 소스 주소로 트래픽을 보내야 하는 워크로드도 있어요. allowedSourcePrefixes 애노테이션은 특정 파드에 나열된 프리픽스에 한해서만 스푸핑 검사를 완화해 줘요.

개념

소스 IP 스푸핑 방지

Calico는 파드의 소스 IP가 파드 자신의 IP와 일치하지 않는 이그레스 패킷을 드롭하도록 데이터플레인 규칙을 프로그래밍해요. allowedSourcePrefixes 애노테이션은 이 제한을 파드 단위로, 지정한 IP 프리픽스에 한해서 풀어줘요. iptables/nftables 데이터플레인과 eBPF 데이터플레인 양쪽에서 동작해요.

FelixConfiguration 사전 준비

파드가 아닌 소스 IP를 허용하는 건 보안에 민감한 변경이라서, Felix는 기본적으로 이 애노테이션을 거부해요. FelixConfiguration 리소스에서 workloadSourceSpoofing을 Any로 설정해서 직접 옵트인해야 해요. 이 설정 전에는 소스 프리픽스를 요청한 파드가 데이터플레인에 프로그래밍되지 않아요.

시작하기 전에

  • 이 기능을 쓰려면 클러스터가 Calico CNI를 사용해야 해요. Configuring the Calico CNI Plugins를 참고하세요.

  • FelixConfiguration 리소스에서 workloadSourceSpoofing을 활성화하세요:

    apiVersion: projectcalico.org/v3
    kind: FelixConfiguration
    metadata:
      name: default
    spec:
      workloadSourceSpoofing: Any
    

WARNING: workloadSourceSpoofing을 Any로 설정하면 이 애노테이션을 단 어떤 파드든 임의의 소스 IP로 트래픽을 보낼 수 있어요. 어드미션 컨트롤로 어떤 파드가 애노테이션을 설정할 수 있는지 제한하세요.

방법

파드에 cni.projectcalico.org/allowedSourcePrefixes 애노테이션을 CIDR의 JSON 리스트로 지정해요. 예를 들면:

  cni.projectcalico.org/allowedSourcePrefixes: '["192.168.10.0/24"]'

이 애노테이션은 파드 생성 시점에 존재해야 해요. 나중에 추가해도 효과가 없어요.

더 알아보기 (Learn more)

이 애노테이션은 파드 단위로만 스푸핑 검사를 완화하고, FelixConfiguration의 옵트인이 없으면 동작하지 않아요. 임의의 소스 IP를 허용하는 만큼 어드미션 컨트롤과 함께 쓰는 게 좋아요. iptables/nftables와 eBPF 데이터플레인 모두 지원한다는 점도 기억해 두세요.