아웃바운드 NAT 구성
파드에서 클러스터 밖으로 나가는 연결에 대해 Calico가 아웃바운드 NAT를 수행하도록 구성하는 방법을 다뤄요. Calico는 옵션에 따라 파드 IP를 노드 IP로 소스 NAT할 수 있어요. NAT를 켜거나 끄는 대표적인 사용 사례도 함께 소개해요.
출처: 문서
본문
큰 그림
파드에서 클러스터 밖으로 가는 연결에 대해 아웃바운드 NAT를 수행하도록 Calico 네트워킹을 구성해요. Calico는 선택적으로 파드 IP를 노드 IP로 소스 NAT해요.
이런 점이 좋아요
Calico의 NAT outbound 연결 옵션은 유연해요; 공용 IP, 사설 IP, 또는 특정 범위의 IP 주소를 가진 Calico IP 풀에 대해 켜거나 끄고 적용할 수 있어요. 이 문서는 아웃바운드 NAT를 켜고 끄는 몇 가지 사용 사례를 설명해요.
개념
Calico IP 풀과 NAT
풀 안의 IP 주소를 가진 파드가 Calico IP 풀 밖의 IP 주소로 네트워크 연결을 시작하면, 나가는 패킷은 SNAT(Source Network Address Translation)를 통해 소스 IP 주소가 파드 IP 주소에서 노드 IP 주소로 바뀌어요. 그 연결의 되돌아오는 패킷은 파드로 전달되기 전에 자동으로 이 변경이 되돌려져요.
NAT 켜기: 클러스터 밖으로 라우팅되지 않는 IP 주소를 가진 파드
NAT outgoing을 켜는 흔한 사용 사례는, 오버레이 네트워크의 파드가 오버레이 밖의 IP 주소에 연결하게 하거나, 사설 IP 주소를 가진 파드가 클러스터 밖/인터넷의 공용 IP 주소에 연결하게 하는 것이에요 (물론 네트워크 정책이 그 연결을 허용하는 경우에 한해요). NAT가 켜져 있으면, 그 풀 안의 파드에서 다른 모든 Calico IP 풀 바깥의 어떤 목적지로 가는 트래픽이 NAT돼요.
NAT 끄기: 물리 인프라를 사용하는 온프레미스 배포
물리 네트워크 인프라와 BGP 피어링된 Calico 네트워킹을 구현하기로 했다면, 자체 인프라를 사용해 파드에서 인터넷으로 가는 트래픽을 NAT할 수 있어요. 이 경우에는 Calico natOutgoing 옵션을 꺼야 해요. 예를 들어 파드가 공용 인터넷 IP를 갖게 하고 싶다면:
- 물리 네트워크 인프라와 피어링하도록 Calico를 구성해요
- NAT가 꺼진 상태(
natOutgoing: false)로 여러분 네트워크로 라우트되는, 그 파드들을 위한 공용 IP 주소의 IP 풀을 만들어요 - 다른 네트워크 장비가 파드 트래픽을 NAT하지 않는지 확인해요
방법
NAT outgoing이 켜진 IP 풀 만들기
다음 예시에서는 natOutgoing이 켜진 Calico IPPool을 만들어요. 아웃바운드 NAT는 그 풀의 각 워크로드가 호스팅되는 노드에서 로컬로 수행돼요.
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: default-ipv4-ippool
spec:
cidr: 192.168.0.0/16
natOutgoing: true
추가 IP 풀로 NAT 없이 도달 가능한 주소 지정하기
Calico는 Calico IPPool에 없는 IP 주소로 연결할 때만 아웃바운드 NAT를 수행하기 때문에, 파드 IP 주소로는 사용하지 않지만 특정 CIDR 블록으로의 NAT를 막아 주는 추가 IPPool을 만들 수 있어요. 노드가 인터넷으로 가는 트래픽은 NAT하지만 특정 내부 범위의 IP로는 NAT하지 않기를 원할 때 유용해요. 예를 들어 파드에서 10.0.0.0/8로 가는 트래픽을 NAT하고 싶지 않다면 다음 풀을 만들 수 있어요. 클러스터와 10.0.0.0/8 사이 네트워크가 파드 IP를 라우팅할 수 있는지 반드시 확인해야 해요.
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: no-nat-10.0.0.0-8
spec:
cidr: 10.0.0.0/8
disabled: true
더 알아보기 (Learn more)
natOutgoing은 풀 단위로 켜고 끌 수 있는 유연한 옵션이에요. disabled: true인 더미 풀을 만들어 특정 내부 CIDR을 NAT 대상에서 빼는 패턴도 기억해 두면 좋아요. BGP로 물리 인프라와 피어링할 때는 natOutgoing을 끄는 쪽이 맞아요.