오버레이 네트워킹
Calico Open Source에서 VXLAN과 IP-in-IP 오버레이 모드 중 하나를 고르는 방법을 설명해요. 파드 CIDR을 기본적으로 라우팅하지 못하는 언더레이 네트워크 위에서도 파드 트래픽을 전달할 수 있게 해 줘요. 캡슐화 사용 여부와 cross-subnet 모드의 장단점도 함께 다뤄요.
출처: 문서
본문
큰 그림
워크로드 IP를 인지하지 못하는 네트워크를 사이에 두고도 워크로드 간 통신을 가능하게 해요.
가치
일반적으로 캡슐화 같은 네트워크 오버레이 없이 Calico를 실행하는 것을 권장해요. 이렇게 하면 성능이 가장 좋고 네트워크도 가장 단순해요. 워크로드에서 나간 패킷이 그대로 와이어 위로 나가는 거죠.
하지만 워크로드 IP를 쉽게 인지하도록 만들 수 없는 기반 네트워크 위에서 실행할 때는, 상황에 따라 오버레이/캡슐화를 선택적으로 쓰는 게 유용할 수 있어요. 흔한 예는 AWS에서 여러 VPC/서브넷에 걸쳐 Calico 네트워킹을 사용하는 경우예요. 이때 Calico는 VPC/서브넷 사이에서 라우팅되는 트래픽만 선택적으로 캡슐화하고, 각 VPC/서브넷 내부에서는 캡슐화 없이 동작할 수 있어요. 아예 전체 Calico 네트워크를 오버레이 네트워크로 캡슐화와 함께 실행하기로 결정할 수도 있어요. 기반 네트워크에 BGP 피어링이나 다른 라우팅 정보를 설정하지 않고 빠르게 시작하는 방법이기 때문이에요.
개념
워크로드 IP 주소 라우팅
네트워크는 스태틱 라우트나 BGP 라우트 배포 같은 레이어 3 라우팅 기법, 또는 레이어 2 주소 학습을 통해 워크로드 IP 주소를 인지해요. 그 덕분에 최종 목적지인 엔드포인트가 있는 올바른 호스트로 캡슐화되지 않은 트래픽을 라우팅할 수 있어요. 하지만 모든 네트워크가 워크로드 IP 주소를 라우팅할 수 있는 건 아니에요. 하드웨어를 소유하지 않은 퍼블릭 클라우드 환경, VPC 서브넷 경계를 넘나드는 AWS, Calico를 BGP로 언더레이와 피어링하거나 스태틱 라우트를 쉽게 구성할 수 없는 다른 시나리오들이 그렇죠. 그래서 Calico는 캡슐화를 지원해요. 기반 네트워크가 워크로드 IP 주소를 인지하지 못해도 워크로드 간 트래픽을 보낼 수 있어요.
캡슐화 유형
Calico는 VXLAN과 IP in IP 두 가지 캡슐화를 지원해요. IP in IP가 지원되지 않는 일부 환경(예: Azure)에서는 VXLAN이 지원돼요. VXLAN은 헤더가 더 크기 때문에 패킷당 오버헤드가 약간 높지만, 매우 네트워크 집중적인 워크로드를 실행하는 게 아니라면 보통 그 차이를 체감하기 어려워요.
cross-subnet
워크로드 트래픽의 캡슐화는 보통 자체적으로 워크로드 IP 주소를 라우팅하지 못하는 라우터를 트래픽이 통과할 때만 필요해요. Calico는 모든 트래픽에 캡슐화를 수행하거나, 아무 트래픽에도 수행하지 않거나, 서브넷 경계를 넘는 트래픽에만 수행할 수 있어요.
클러스터 라우트 프로그래밍
각 Calico 노드에는 다른 노드의 파드로 가는 경로가 필요하고, 이를 *클러스터 라우트(cluster routes)*라고 불러요. 기본적으로 Felix는 VXLAN IP 풀에 대해 클러스터 라우트를 프로그래밍하고, IP-in-IP 풀과 캡슐화 없는 풀의 클러스터 라우트는 BGP가 배포해요. FelixConfiguration의 programClusterRoutes를 Enabled로, BGPConfiguration의 programClusterRoutes를 Disabled로 설정하면 모든 경우에 Felix가 클러스터 라우트를 프로그래밍하도록 구성할 수 있어요. 또는 오퍼레이터를 사용한다면 기본 Installation 리소스의 calicoNetwork에서 clusterRoutingMode를 기본값 BIRD 대신 Felix로 설정해요.
Felix가 클러스터 라우트를 프로그래밍하면 클러스터 내부 라우팅에는 BGP가 필요하지 않아요. 하지만 클러스터 라우트를 외부 BGP 피어에 광고해야 한다면 BGP는 여전히 필요해요. 외부 광고가 필요 없다면 매니페스트 커스터마이징으로 BGP를 비활성화해서 클러스터의 움직이는 부품을 줄일 수 있어요.
시작하기 전에
지원하지 않음
- Calico for OpenStack (즉, Calico가 Neutron 플러그인으로 사용되는 경우)
제한 사항
- IP in IP는 IPv4 주소만 지원해요
- IPv6 VXLAN은 커널 버전 ≥ 4.19.1 또는 redhat 커널 버전 ≥ 4.18.0에서만 지원돼요
방법
- 설치 시점에 기본 IP 풀 구성하기
- cross-subnet 트래픽에만 IP in IP 캡슐화 구성하기
- 모든 워크로드 간 트래픽에 IP in IP 캡슐화 구성하기
- cross-subnet 트래픽에만 VXLAN 캡슐화 구성하기
- 모든 워크로드 간 트래픽에 VXLAN 캡슐화 구성하기
모범 사례
Calico에는 서브넷 경계를 넘는 트래픽만 선택적으로 캡슐화하는 옵션이 있어요. 캡슐화 오버헤드를 최소화하려면 IP in IP나 VXLAN과 함께 cross-subnet 옵션을 사용하는 것을 권장해요. Cross-subnet 모드는 AWS 멀티-AZ 배포, Azure VNet, 그리고 라우터로 L2 연결성 노드 풀을 연결하는 네트워크에서 더 나은 성능을 제공해요.
캡슐화 모드를 바꾸면 진행 중인 연결에 장애가 발생할 수 있다는 점을 알아 두세요. 미리 계획하세요.
설치 시점에 기본 IP 풀 구성하기
기본 IP 풀은 설치 시점에 Calico가 자동으로 구성해요. 설치 방법에 따라 이 기본 IP 풀을 구성할 수 있어요.
탭: Operator
오퍼레이터가 관리하는 클러스터에서는 기본 Installation의 IP 풀 섹션에서 캡슐화를 구성할 수 있어요. 예를 들어 다음 installation 스니펫은 서브넷 간 VXLAN을 활성화해요.
kind: Installation
apiVersion: operator.tigera.io/v1
metadata:
name: default
spec:
calicoNetwork:
ipPools:
- cidr: 192.168.0.0/16
encapsulation: VXLANCrossSubnet
탭: Manifest
Calico를 매니페스트로 설치했다면, calico-node 데몬셋 환경의 CALICO_IPV4POOL_VXLAN과 CALICO_IPV4POOL_IPIP (IPv6는 CALICO_IPV6POOL_VXLAN) 환경 변수로 기본 IP 풀 캡슐화 모드를 제어할 수 있어요.
cross-subnet 트래픽에만 IP in IP 캡슐화 구성하기
IP in IP 캡슐화는 선택적으로, 그리고 서브넷 경계를 넘는 트래픽에만 수행할 수 있어요.
이 기능을 활성화하려면 ipipMode를 CrossSubnet으로 설정해요.
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: ippool-ipip-cross-subnet-1
spec:
cidr: 192.168.0.0/16
ipipMode: CrossSubnet
natOutgoing: true
모든 워크로드 간 트래픽에 IP in IP 캡슐화 구성하기
ipipMode를 Always로 설정하면, Calico는 Calico 활성 호스트에서 시작되어 해당 IP 풀 안의 모든 Calico 네트워크 컨테이너와 VM으로 가는 모든 트래픽을 IP in IP로 라우팅해요.
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: ippool-ipip-1
spec:
cidr: 192.168.0.0/16
ipipMode: Always
natOutgoing: true
cross-subnet 트래픽에만 VXLAN 캡슐화 구성하기
VXLAN 캡슐화도 선택적으로, 그리고 서브넷 경계를 넘는 트래픽에만 수행할 수 있어요.
이 기능을 활성화하려면 vxlanMode를 CrossSubnet으로 설정해요.
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: ippool-vxlan-cross-subnet-1
spec:
cidr: 192.168.0.0/16
vxlanMode: CrossSubnet
natOutgoing: true
모든 워크로드 간 트래픽에 VXLAN 캡슐화 구성하기
vxlanMode를 Always로 설정하면, Calico는 Calico 활성 호스트에서 시작되어 해당 IP 풀 안의 모든 Calico 네트워크 컨테이너와 VM으로 가는 모든 트래픽을 VXLAN으로 라우팅해요.
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: ippool-vxlan-1
spec:
cidr: 192.168.0.0/16
vxlanMode: Always
natOutgoing: true
VXLAN 풀만 사용한다면 BGP 네트워킹이 필요하지 않아요. 매니페스트 커스터마이징으로 BGP를 비활성화해서 클러스터의 움직이는 부품을 줄일 수 있어요. calico_backend 설정을 vxlan으로 설정하고 BGP readiness check를 비활성화하세요.
추가 리소스
IP 풀 리소스 옵션에 대한 자세한 내용은 IP 풀을 참고하세요.
더 알아보기 (Learn more)
기본은 캡슐화 없이 Calico를 실행하는 것이고, 오버레이는 언더레이가 파드 IP를 라우팅하지 못할 때 선택적으로 쓰는 도구예요. IP in IP는 IPv4 전용이고, Azure 같은 환경에서는 VXLAN을 쓰세요. 캡슐화 오버헤드를 줄이려면 CrossSubnet 모드를 활용해 보세요.