Infra & DevOps/k8s(EKS)

[EKS] VPC CNI

용감한 개복치 2024. 3. 16. 03:09

 

CNI

개념

- Container Network Interface

- CNCF(Cloud Native Computing Foundation)의 프로젝트 중 하나

- 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준

- 쿠버네티스에서는 Pod 간의 통신을 위해서 CNI 를 사용

- 쿠버네티스는 kubenet 이라는 자체적인 CNI 플러그인을 제공

- CNI 외에 다양한 플러그인 존재 : 관련 k8s 문서

 

Installing Addons

Note: This section links to third party projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for these projects, which are listed alphabetically. To add a project to this list, read the content gui

kubernetes.io

 

동작

출처 : https://captcha.tistory.com/78

- 브릿지 인터페이스 만듦

- 컨테이너 네트워크 대역대 쪼갬

- 라우팅 테이플 생성

- 각 컨테이너가 통신하도록 함

 

AWS VPC CNI

개념

Amazon VPC CNI plugin for Kubernetes는 Amazon EKS 클러스터에 있는 Pod 네트워킹용 네트워킹 플러그 인입니다. 플러그인은 Kubernetes 노드에 VPC IP 주소를 할당하고 각 노드의 Pods에 대한 필수 네트워킹을 구성하는 역할을 합니다. 

출처 : AWS docs

 

서비스 계정에 IAM 역할을 사용하도록 Amazon VPC CNI plugin for Kubernetes 구성 - Amazon EKS

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

출처 : 스터디 자료

- 하는 일 : 파드에 ip 할당 -> 파드 ip 네트워크 대역과 노드(워커)의 ip 대역이 같아서 직접 통신 가능

- 직접 통신이 중요한 이유 : k8s cni 중 하나인 calico는 대역이 달라 오버레이(VXLAN, IP-IP) 통신

- vpc 와 통합되어 기능(vpc flow log, 라우팅 정책, 보안그룹)을 사용 가능

- Secondary IP 모드가 디폴트 설정  > 이 모드는 vpc eni 에 미리 할당된(warm pool) ip를 파드에서 사용 가능

 

+)

워커 노드에 생성 가능한 최대 파드 갯수에 대하여

출처 : 스터디 자료

 

prefix 모드

노드에 더 많은 수의 Pod를 실행시킬 필요가 있다면 prefix 모드로 변경이 필요

IP 대신 /28 CIDR을 각 ENI에 할당해 더 많은 IP를 사용 가능

 

실습

플러그인 설치 시, L-IPAM(Local IP Address Manager)를 daemonset으로 설치 > 파드의 IP 할당받음

출처 : https://github.com/aws/amazon-vpc-cni-k8s/blob/master/docs/cni-proposal.md

 

kubectl get daemonset --namespace kube-system
#daemonset 확인

 

# CNI 정보 확인
kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

# kube-proxy config 확인
kubectl describe cm -n kube-system kube-proxy-config

# 노드 IP 확인
aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivateIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output table

# 파드 IP 확인
kubectl get pod -n kube-system -o=custom-columns=NAME:.metadata.name,IP:.status.podIP,STATUS:.status.phase

# 파드 이름 확인
kubectl get pod -A -o name

# 파드 갯수 확인
kubectl get pod -A -o name | wc -l

 

CNI 정보

 

노드 IP & 파드 IP > 대역 같은 것 확인

 

노드의 네트워크 로그 파일 확인

iptable 정보 확인

# CNI 정보 확인
for i in $N1 $N2 $N3; do echo ">> node $i <<"; ssh ec2-user@$i tree /var/log/aws-routed-eni; echo; done
ssh ec2-user@$N1 sudo cat /var/log/aws-routed-eni/plugin.log | jq
ssh ec2-user@$N1 sudo cat /var/log/aws-routed-eni/ipamd.log | jq
ssh ec2-user@$N1 sudo cat /var/log/aws-routed-eni/egress-v6-plugin.log | jq
ssh ec2-user@$N1 sudo cat /var/log/aws-routed-eni/ebpf-sdk.log | jq
ssh ec2-user@$N1 sudo cat /var/log/aws-routed-eni/network-policy-agent.log | jq

# 네트워크 정보 확인 : eniY는 pod network 네임스페이스와 veth pair
for i in $N1 $N2 $N3; do echo ">> node $i <<"; ssh ec2-user@$i sudo ip -br -c addr; echo; done
for i in $N1 $N2 $N3; do echo ">> node $i <<"; ssh ec2-user@$i sudo ip -c addr; echo; done
for i in $N1 $N2 $N3; do echo ">> node $i <<"; ssh ec2-user@$i sudo ip -c route; echo; done
ssh ec2-user@$N1 sudo iptables -t nat -S
ssh ec2-user@$N1 sudo iptables -t nat -L -n -v

결론

node 와 pod 가 모두 AWS VPC CIDR 범위 내에 있음

쿠버네티스용의 CNI 가 할 일을 AWS 관할 내에서 하도록 하는 것

 

 

+)

오버레이 통신?

물리적 네트워크 인프라 위에 가상 네트워크를 생성하는 방식으로 작동

호스트 간의 네트워크 연결을 가상화하고, 컨테이너들은 마치 동일한 물리적 네트워크에 연결된 것처럼 통신

가상화된 터널을 통해 데이터 전송

VXLAN 등의 추가 자료 첨부

https://white-polarbear.tistory.com/69

 

Overlay Network & Underlay Network (오버레이, 언더레이)

● Underlay Network (언더레이 네트워크) 용어의 정의 실제 장비를 이용하여 물리적인 인프라를 의미하는 용어 입니다. 물리적인 인프라를 구성하는 요소는 네트워크 장비, 보안 장비 그리고 서비스

white-polarbear.tistory.com

 

 


출처 및 참고 문헌

https://captcha.tistory.com/78

 

[#1. Kubernetes 시리즈] 3. CNI란? (Container Network Interface)

이번 글에서는 쿠버네티스를 설치하기 전에 간략하게 CNI(Container Network Interface)에 대하여 알아보겠습니다. 무작정 문서대로 설치만 하기 보다는 내가 설치하는 애가 무엇인지 알고 가는게 좋을

captcha.tistory.com

 

'Infra & DevOps > k8s(EKS)' 카테고리의 다른 글

[EKS] Observability  (0) 2024.03.31
[EKS] Storage  (0) 2024.03.22
[EKS] network  (0) 2024.03.17
[EKS] 설치 및 기본 사용  (0) 2024.03.10
[Kubernetes] http 에러 검증, 파드, pv  (0) 2022.04.26