새소식

Kubernetes

[Study 3주차] 쿠버네티스 Calico 네트워크 모드

  • -

CloudNet@ 팀의 가시다님께서 리딩하시는 KANS Study (Kubernetes Advanced Networking Study) 3주차 스터디 내용 정리

 

 

이번에는 칼리코가 제공하는 다양한 네트워크 통신 방법에 대해서 알아보겠습니다.

 

 

 

1. Calico 네트워크 모드

 

칼리코는 대표적으로 아래와 같은 4가지 네트워크 모드를 지원합니다.

 

 

 

1. IPIP 모드

이전글에서 다루었던 다른 노드의 파드 간 통신에서 활용된 네트워크 모드이며,
파드 IP 위에 노드의 IP 가 한 번 감싸져서 전송되는 방식입니다. (IPIP 인캡슐레이션)

 

다른 노드의 파드 대역은 BGP 로 전달 받아 호스트 라우팅 테이블에 업데이트 됩니다.
Azure 에서는 IPIP 통신을 지원하지 않기 때문에 불가능하며 대신 VXLAN 모드를 사용합니다.

 

2. Direct 모드

파드 통신 패킷이 목적지 노드로 원본 패킷 그대로 전달됩니다.
인캡슐레이션이 불필요하기 때문에, IPIP 모드에 비해 성능이 좋습니다.

 

3. VXLAN 모드

IPIP 모드와 비슷하나 IP 로 인캡슐레이션 하지 않고 UDP 로 인캡슐레이션을 하는 차이가 있습니다.

 

4. Pod 패킷 암호화

wireguard vpn 을 통한 네트워크 암호화 기능을 사용합니다.

 

 

2. Direct 모드

 

칼리코 네트워크 모드 중 Direct 모드를 구현해보겠습니다.

 

AWS 상에서 Direct 모드를 구현하기 위해서는

EC2 인스턴스의 네트워킹 소스대상확인 변경 (Source/Destination Check) 기능을 비활성화 해야합니다.

 

 

 

2.1. IPIP 모드 비활성화

 

# 칼리코 IP pool 을 yaml 로 추출
calicoctl get ippool default-ipv4-ippool -o yaml

# IPIP 모드 변경 Always -> Never
calicoctl get ippool default-ipv4-ippool -o yaml | sed -e "s/ipipMode: Always/ipipMode: Never/" | calicoctl apply -f -

 

 

 

2.2. 파드 배포 및 테스트

 

실습을 위한 파드 배포
curl -s -O https://raw.githubusercontent.com/gasida/NDKS/main/5/node3-pod3.yaml
kubectl apply -f node3-pod3.yaml

 

# Pod 접속
kubectl exec -it pod1 -- zsh

# Pod2 핑 테스트 (동일 네트워크 대역)
ping -c 2 172.16.184.4

# Pod3 핑 테스트 (다른 네트워크 대역)
ping -c 2 172.16.34.4

 



3. CrossSubnet 모드

 

CrossSubnet 모드는 같은 네트워크 대역 간 통신은 Direct 모드로 동작하고,

다른 네트워크 대역간 통신은 IPIP 모드로 동작하도록 하는 하이브리드 모드입니다.

 

 

3.1. CrossSubnet 모드 활성화

 

# Calico IP Pool 에서 CrossSubnet 모드 활성화
calicoctl patch ippool default-ipv4-ippool -p '{"spec":{"ipipMode":"CrossSubnet"}}'

 

 

# Pod 접속
kubectl exec -it pod1 -- zsh

# Pod3 핑 테스트 (다른 네트워크 대역)
ping -c 2 172.16.34.4

 

IPIP 모드에서는 tunl0 인터페이스를 통해서 다른 노드와 통신합니다.

 

 

Contents

포스팅 주소를 복사했습니다