CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 KANS 3기 내용을 정리한 글입니다.
마지막으로 오버레이 네트워크를 사용하지 않는 Direct 모드에 대해서 알아보고자 합니다.
Direct 모드란
calico에서는 파드에서 만들어진 패킷을 별도의 캡슐화 없이 목적지 노드로 전달하는 모드입니다.
Direct모드 설치하기
Instance의 출발지 목적지 확인하는 기능 비활성화
# AWS CLI 로 특정 인스턴스의 Source/Destination Check 기능을 Disable 하기
aws ec2 modify-instance-attribute --instance-id <INSTANCE_ID> --source-dest-check "{\"Value\": false}"
인스턴스가 테스트에 사용할 kubernetes 인스턴스밖에 없는 경우 아래의 명령어를 쓰면 쉽게 비활성화 가능하다.
for instance_id in $(aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query "Reservations[*].Instances[*].InstanceId" --region ap-northeast-2 --output text); do
aws ec2 modify-instance-attribute --instance-id $instance_id --source-dest-check "{\"Value\": false}" --region ap-northeast-2
done
calico 설치 파일 다운받기
최신 버전 확인하기
CALICO_LATEST=$( curl --silent "https://api.github.com/repos/projectcalico/calico/releases/latest" | jq '.tag_name' -r )
오퍼레이터가 없는 구조의 설치 방식으로 calico에서 제공하는 기본설치 파일입니다.
curl https://raw.githubusercontent.com/projectcalico/calico/$CALICO_LATEST/manifests/calico.yaml -O
이 파일은 IPIP 모드를 활성화 해두기 때문에 IPIP모드를 끄면 됩니다. CALICO_IPV4POOL_IPIP이 환경변수 설정이 Always로 되어있는 것을 Never로 변경하면 됩니다.
- name: CALICO_IPV4POOL_IPIP
value: "Never" # Always에서 변경하기
calico 설치 전 crd만 먼저 설치 하고 싶다면 다음의 명령어를 수행하면 됩니다.
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/refs/tags/$CALICO_LATEST/manifests/crds.yaml
현재 최신 버전은 v3.28.1 입니다.
기존 설정에서 변경하기
이미 calico를 설치했더라면 다음과 같은 방식으로 direct 모드로 변경이 가능하다. 이 명령어는 기본 ippool외에 설정 하지 않았을 때 적용가능하다.
✔︎ IPIP에서 Direct 모드로 변경하기
calicoctl get ippool default-ipv4-ippool -o yaml | sed -e "s/ipipMode: Always/ipipMode: Never/" | calicoctl apply -f -
✔︎ VxLAN모드에서 Direct 모드로 변경하기
calicoctl get ippool default-ipv4-ippool -o yaml | sed -e "s/vxlanMode: Always/ipipMode: Never/" | calicoctl apply -f -
CrossSubnet 설정하기
노드 간 같은 네트워크 대역(Direct 모드로 동작) , 노드 간 다른 네트워크 대역(IPIP 모드로 동작)
calicoctl patch ippool default-ipv4-ippool -p '{"spec":{"ipipMode":"CrossSubnet"}}'
테스트 시 사용한 버전
calico.yaml 파일에 damonset의 calico-node에 환경변수로 CALICO_IPV4POOL_BLOCK_SIZE를 24로 설정해서 사용했습니다.
# Block size to use for the IPv4 POOL created at startup. Block size for IPv4 should be in the range 20-32. default 24
- name: CALICO_IPV4POOL_BLOCK_SIZE
value: "24"
Direct모드 뜯어보기
같은 노드 내 파드 간 통신 흐름
다른 노드 간 파드 통신 흐름
파드와 외부 인터넷 간 통신 흐름
서비스 객체를 통한 통신 흐름
'K8S > 🔥 network study🔥' 카테고리의 다른 글
[네떡스터디🔥kans] 쿠버네티스 서비스 이해하기 - ClusterIP (0) | 2024.09.22 |
---|---|
[네떡스터디🔥kans] Calico CNI 알아보기 - BGP (1) | 2024.09.17 |
[네떡스터디🔥kans] Calico CNI 알아보기 - VxLAN 모드 (0) | 2024.09.09 |
[네떡스터디🔥kans] Calico CNI 알아보기 - IPIP 모드 (0) | 2024.09.09 |
[네떡스터디🔥kans] Calico CNI 알아보기 (0) | 2024.09.09 |