2주차 - EKS Networking(2)(노드 간 파드 통신/파드 외부 통신)

728x90

EKS 내 노드 간 Pod 통신 확인

  • AWS CNI 특징으로 Node IP 대역과 Pod IP이 동일하여 직접 통신이 가능
    • 일반적인 K8S CNI의 경우 오버레이 통신

  • 파드간 통신 테스트 및 확인 : 별도의 NAT 동작 없이 통신
# 파드 IP 변수 지정
PODIP1=$(kubectl get pod -l app=netshoot-pod -o jsonpath='{.items[0].status.podIP}')
PODIP2=$(kubectl get pod -l app=netshoot-pod -o jsonpath='{.items[1].status.podIP}')
PODIP3=$(kubectl get pod -l app=netshoot-pod -o jsonpath='{.items[2].status.podIP}')

# 파드1 Shell 에서 파드2로 ping 테스트
kubectl exec -it $PODNAME1 -- ping -c 2 $PODIP2

# 파드2 Shell 에서 파드3로 ping 테스트
kubectl exec -it $PODNAME2 -- ping -c 2 $PODIP3

# 파드3 Shell 에서 파드1로 ping 테스트
kubectl exec -it $PODNAME3 -- ping -c 2 $PODIP1

 

# 워커 노드 EC2 : TCPDUMP 확인
sudo tcpdump -i any -nn icmp

  • pod1 IP: 192.168.1.249
  • pod2 IP: 192.168.2.165
  • pod3 IP: 192.168.3.227

  • tcpdump를 통해 ping 통신 확인 결과, 노드 간 Pod 통신에서 Pod IP로 직접 통신하는 것을 확인

 

EKS Pod에서 외부 통신 확인

파드에서 외부 통신 흐름 : iptable 에 SNAT 을 통하여 노드의 eth0 IP로 변경되어서 외부와 통신됨

  • 파드에서 외부 통신 테스트 및 확인
    • pod에서 외부 통신을 하는경우, 노드의 IP로 SNAT

  • 통신이 Node의 IP로 통신
    • Node2 IP: 192.168.2.85

  •  각 노드의 공인IP 확인

  •  각 Pod의 공인IP 확인
    • Pod에서 인터넷 통신을 하는 경우, 서버의 공인IP로 NAT되어 통신

  • 파드가 외부와 통신시에는 아래 처럼 'AWS-SNAT-CHAIN-0' 룰(rule)에 의해서 SNAT 되어서 외부와 통신
# 노드 iptabels rule 확인
ip rule
ip route show table main
sudo iptables -L -n -v -t nat
sudo iptables -t nat -S

sudo iptables -t nat -S | grep 'A AWS-SNAT-CHAIN'

→ 192.168.0.0/16과 통신은 SNAT Jump( SNAT 수행 X)

→ 매치가 되지 않는 IP는 SNAT을 수행 ( 서버의 IP )

728x90