EKS AWS CNI - Pod 간 통신
목적
AWS에서 제공되는 kubernetes인 EKS에서 사용되는 CNI인 AWS CNI의
Network Routing 과정을 분석해봄
글을 읽는데 필요한 기초 개념
AWS VPC
Virtual Private Cloud
사용자의 AWS 계정 전용 가상 네트워크.
VPC별로 네트워크를 구성할 수 있고
각각의 VPC에따라 다르게 네트워크 설정을 줄 수 있음.
또한 각각의 VPC는 완전히 독립된 네트워크처럼 작동함.
VPC는 하나의 리전에 종속됨.
AWS Subnet
VPC 안에 더 많은 네트워크망을 만들기 위해
VPC를 더 작은단위로 나눠놓은 것.
서브넷은 가용영역안에 존재하며
서브넷안에 RDS, EC2와같은 리소스들을 위치시킬 수 있음.
AWS Routing Table
VPC 내부의 Routing을 설정하는 것.
IGA : Internet Gateway AWS
인터넷게이트웨이는 VPC와 인터넷을 연결해주는 관문.
Public Subnet : 인터넷과 연결되어있는 Subnet
Private Subnet : 인터넷과 연결되어있지 않은 Subnet
NAT Gateway
Private Subnet이 인터넷과 통신 하기위한 아웃바운드 인스턴스
Test 환경 구축
[ m5.large 인스턴스 Worker Node ]
Worker Node 3개 배포되어 있음.
EC2 인스턴스 정보는 아래와 같음.
3개의 Worker Node 중 2개의 Worker Node에 Pod가 배포되어있음.
편의상 각 Worker Node 1, 2로 표현하겠음.
[Worker Node 1]
[Worker Node 2]
[ Tomcat Deployment 배포 ]
Worker Node 1 : ip-192-168-34-143.ap-northeast-2.compute.internal
Pod Network 인터페이스 : enia6653479892
apiVersion: apps/v1 kind: Deployment metadata: name: iksoon-deployment-tomcat labels: app: iksoon-tomcat-test spec: replicas: 1 selector: matchLabels: app: iksoon-pod-tomcat template: metadata: labels: app: iksoon-pod-tomcat spec: containers: - name: iksoon-tomcat image: peksoon/iksoon_tomcat:1.0.5 ports: - containerPort: 8080 |
[ Mysql Deployment 배포 ]
Worker Node 2 : ip-192-168-29-46.ap-northeast-2.compute.internal
Pod Network 인터페이스 : eni0b8b3d003d6
apiVersion: apps/v1 kind: Deployment metadata: name: iksoon-deployment-mysql labels: app: iksoon-mysql-test spec: replicas: 1 selector: matchLabels: app: iksoon-pod-mysql template: metadata: labels: app: iksoon-pod-mysql spec: containers: - name: iksoon-mysql image: peksoon/iksoon_mysql:1.0.2 ports: - containerPort: 3306 |
[Pod 배포 상태 정보]
AWS CNI Routing 분석.
서로 다른 Worker Node에 있는 Pod icmp 통신
1. Tomcat Container eth0 interface
sudo tcpdump -i eth0 -ne icmp -vv -c 10
[ ICMP Pack의 정보 ]
[MAC 정보]
[IP주소 정보] 출발지 : 192.168.53.154 (tomcat container의 eth0 IP) 도착지 : 192.168.25.72 (mysql container의 eth0 IP) |
2. Worker Node 1: 보조 네트워크 인터페이스
Worker Node 1 : enia6653479892 ( tomcat pod Network interface )
sudo tcpdump -i enia6653479892 -ne icmp -vv -c 10
[ ICMP Pack의 정보 ]
[MAC 정보]
[IP주소 정보] 출발지 : 192.168.53.154 (tomcat container의 eth0 IP) 도착지 : 192.168.25.72 (mysql container의 eth0 IP) |
상위 정보와 동일함.
3. Worker Node 1 : 기본 네트워크 인터페이스
Worker Node 1 : eth0
상위의 보조 네트워크 인터페이스인 enia6653479892 와 매칭되는
기본 네트워크 인터페이스를 찾아야함.
test환경에서는 enia6653479892과 eth0이 매칭되어있었음.
sudo tcpdump -i eth0 -ne icmp -vv -c 10
[ ICMP Pack의 정보 ]
[MAC 정보]
[IP주소 정보] 출발지 : 192.168.53.154 (tomcat container의 eth0 IP) 도착지 : 192.168.25.72 (mysql container의 eth0 IP) |
[Worker Node 1의 ARP Tables]
4. Worker Node 2 : 기본 네트워크 인터페이스
Worker Node 2 : eth1
sudo tcpdump -i eth1 -ne icmp -vv -c 10
[ ICMP Pack의 정보 ]
[MAC 정보]
[IP주소 정보] 출발지 : 192.168.53.154 (tomcat container의 eth0 IP) 도착지 : 192.168.25.72 (mysql container의 eth0 IP) |
[Worker Node 2의 ARP Tables]
5. Worker Node 2 : 보조 네트워크 인터페이스
Worker Node 2 : mysql pod Network interface
sudo tcpdump -i eni0b8b3d003d6 -ne icmp -vv -c 10
[ ICMP Pack의 정보 ]
[MAC 정보]
[IP주소 정보] 출발지 : 192.168.53.154 (tomcat container의 eth0 IP) 도착지 : 192.168.25.72 (mysql container의 eth0 IP) |
6. MySQL Container eth0 interface
sudo tcpdump -i eth0 -ne icmp -vv -c 10
[ ICMP Pack의 정보 ]
[MAC 정보]
[IP주소 정보] 출발지 : 192.168.53.154 (tomcat container의 eth0 IP) 도착지 : 192.168.25.72 (mysql container의 eth0 IP) |
AWS CNI Routing 분석.
external 에서 Service LoadBalancer Type으로 접속
LoadBalancer External IP : 15.165.139.93
external에서 접속한 주소 : http://15.165.139.93:8080/iksoon_test/iksoon_home.jsp
1. Worker Node 1 : 기본 네트워크 인터페이스
sudo tcpdump -i eth0 -ne tcp port 8080 -vv -c 10
[MAC 정보]
[IP주소 정보] 출발지 : 192.168.73.157 (????) 도착지 : 192.168.53.154 (tomcat container의 eth0 IP)
[Port] 출발지 : 8482 (랜덤) 도착지 : webcache (LoadBalancer Service Object에 설정된 Port 8080) |
2. Worker Node 1 : 보조 네트워크 인터페이스
sudo tcpdump -i enia6653479892 -ne tcp port 8080 -vv -c 10
[MAC 정보]
[IP주소 정보] 출발지 : 192.168.29.46 (Worker Node2의 eth0 MAC) 도착지 : 192.168.53.154 (tomcat container의 eth0 IP)
[Port] 출발지 : 8482 (랜덤) 도착지 : webcache (LoadBalancer Service Object에 설정된 Port 8080) |
출발지 IP가 Worker Node2의 IP인것을 봐서
LoadBalancer를 통해 패킷이 Worker Node 2로 갔다가
다시 목적지 pod가 있는 Woker Node 1으로 왔음을 알 수 있음.
'클라우드 > AWS' 카테고리의 다른 글
EKS AWS CNI를 Flannel로 교체 (2) | 2021.05.06 |
---|---|
EKS Network Policy 분석 (0) | 2021.05.06 |
EKS AWS CNI 분석 (2) | 2021.05.03 |
AWS Kubernetes (EKS) (0) | 2021.02.23 |
AWS API 사용 (Python) (0) | 2020.08.12 |