Ssoon
[3주차] 다른 Node 에서 Pod ↔ Pod 간 통신 본문
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 3기
✅Pod 배포 전 기본 상태 확인
🧿 Node 간 BGP 로 Pod 대역 정보 전파 확인
[ k8s-m ]
- route | head -2: IP 라우팅 테이블의 헤더를 보여줍니다.
- route -n | grep tunl0: tunl0 인터페이스를 사용하는 네트워크의 라우팅 정보를 보여줍니다.
- tunl0 인터페이스를 통해 172.16.34.0, 172.16.158.0, 172.16.184.0 네트워크로의 패킷이 전달됩니다.
(⎈|SsoonLab:N/A) root@k8s-m:~# route | head -2 ; route -n | grep tunl0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.34.0 192.168.20.100 255.255.255.0 UG 0 0 0 tunl0
172.16.158.0 192.168.10.101 255.255.255.0 UG 0 0 0 tunl0
172.16.184.0 192.168.10.102 255.255.255.0 UG 0 0 0 tunl0
[ k8s-w1 ]
- route -n | grep tunl0: tunl0 인터페이스를 사용하는 네트워크의 라우팅 정보를 보여줍니다.
- 이 인터페이스를 통해 172.16.34.0, 172.16.116.0, 172.16.184.0 네트워크로의 패킷이 각각 192.168.20.100, 192.168.10.10, 192.168.10.102 를 통해 전달됩니다
root@k8s-w1:~# route | head -2 ; route -n | grep tunl0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.34.0 192.168.20.100 255.255.255.0 UG 0 0 0 tunl0
172.16.116.0 192.168.10.10 255.255.255.0 UG 0 0 0 tunl0
172.16.184.0 192.168.10.102 255.255.255.0 UG 0 0 0 tunl0
- k8s-w1 , k8s-w2 의 tunl0 정보 확인
root@k8s-w1:~# ifconfig tunl0
tunl0: flags=193<UP,RUNNING,NOARP> mtu 8981
inet 172.16.158.0 netmask 255.255.255.255
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@k8s-w2:~# ifconfig tunl0
tunl0: flags=193<UP,RUNNING,NOARP> mtu 8981
inet 172.16.184.0 netmask 255.255.255.255
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
🧿 k8s-w1 과 k8s-w2 에 각각 Pod 1개씩 생성
(⎈|SsoonLab:N/A) root@k8s-m:~# cat node2-pod2.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
nodeName: k8s-w1
containers:
- name: pod1
image: nicolaka/netshoot
command: ["tail"]
args: ["-f", "/dev/null"]
terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Pod
metadata:
name: pod2
spec:
nodeName: k8s-w2
containers:
- name: pod2
image: nicolaka/netshoot
command: ["tail"]
args: ["-f", "/dev/null"]
terminationGracePeriodSeconds: 0
(⎈|SsoonLab:N/A) root@k8s-m:~# kubectl apply -f node2-pod2.yaml
pod/pod1 created
pod/pod2 created
(⎈|SsoonLab:N/A) root@k8s-m:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 34s
pod2 1/1 Running 0 34s
- pod1은 k8s-w1 노드에서 172.16.158.7 IP 주소와 calice0906292e2 인터페이스를 사용하며,
- pod2는 k8s-w2 노드에서 172.16.184.1 IP 주소와 calibd2348b4f67 인터페이스를 사용합니다
(⎈|SsoonLab:N/A) root@k8s-m:~# calicoctl get workloadendpoints
WORKLOAD NODE NETWORKS INTERFACE
pod1 k8s-w1 172.16.158.7/32 calice0906292e2
pod2 k8s-w2 172.16.184.1/32 calibd2348b4f67
[ k8s-w1 ]
🧿 pod2(172.16.184.0/24) 로 가는 패킷은 k8s-w2(192.168.10.102) 게이트웨이를 통해 tunl0 인터페이스를 사용합니다.
root@k8s-w1:~# route -n | head -2 ; route -n | grep 172.16.
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
...
172.16.184.0 192.168.10.102 255.255.255.0 UG 0 0 0 tunl0
[ k8s-w2]
🧿 pod1(172.16.158.0/24) 로 가는 패킷은 k8s-w1(192.168.10.101) 게이트웨이를 통해 tunl0 인터페이스를 사용합니다.
root@k8s-w2:~# route -n | head -2 ; route -n | grep 172.16.
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
...
172.16.158.0 192.168.10.101 255.255.255.0 UG 0 0 0 tunl0
[ k8s-w1 ]
- tunl0 인터페이스 TX/RX 패킷 카운트 확인합니다.
- tunl0 인터페이스는 현재 활성화되어 있고 작동 중이지만, 데이터를 송수신하지 않고 있는 상태입니다.
root@k8s-w1:~# ifconfig tunl0 | head -2 ; ifconfig tunl0 | grep bytes
tunl0: flags=193<UP,RUNNING,NOARP> mtu 8981
inet 172.16.158.0 netmask 255.255.255.255
RX packets 0 bytes 0 (0.0 B)
TX packets 0 bytes 0 (0.0 B)
[ pod1 ]
- pod1 Shell 접속하고 pod1 에서 pod2 로 핑 통신을 확인합니다.
(⎈|SsoonLab:N/A) root@k8s-m:~# kubectl exec pod1 -it -- zsh
dP dP dP
88 88 88
88d888b. .d8888b. d8888P .d8888b. 88d888b. .d8888b. .d8888b. d8888P
88' `88 88ooood8 88 Y8ooooo. 88' `88 88' `88 88' `88 88
88 88 88. ... 88 88 88 88 88. .88 88. .88 88
dP dP `88888P' dP `88888P' dP dP `88888P' `88888P' dP
Welcome to Netshoot! (github.com/nicolaka/netshoot)
Version: 0.13
pod1 ~ ping -c 1 172.16.184.1
PING 172.16.184.1 (172.16.184.1) 56(84) bytes of data.
64 bytes from 172.16.184.1: icmp_seq=1 ttl=62 time=9.33 ms
--- 172.16.184.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 9.331/9.331/9.331/0.000 ms
[ k8s-w1 ]
🧿 tcpdump를 사용하여 tunl0 인터페이스에서 전송되는 네트워크 패킷을 캡처합니다.
- pod1 (172.16.158.7) 에서 pod2 (172.16.184.1) 로 ICMP 요청 패킷 전송됩니다.
- pod2 (172.16.184.1) 에서 pod1 pod1 (172.16.158.7) 로 ICMP 응답 패킷 전송됩니다
root@k8s-w1:~# tcpdump -i tunl0 -nn
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tunl0, link-type RAW (Raw IP), snapshot length 262144 bytes
16:17:33.272831 IP 172.16.158.7 > 172.16.184.1: ICMP echo request, id 79, seq 1, length 64
16:17:33.282009 IP 172.16.184.1 > 172.16.158.7: ICMP echo reply, id 79, seq 1, length 64
🧿 tunl0 인터페이스 TX/RX 패킷 카운트 확인합니다.
- tunl0 인터페이스는 수신과 전송 각각 1개의 패킷과 84 바이트의 데이터를 처리했습니다.
root@k8s-w1:~# ifconfig tunl0 | head -2 ; ifconfig tunl0 | grep bytes
tunl0: flags=193<UP,RUNNING,NOARP> mtu 8981
inet 172.16.158.0 netmask 255.255.255.255
RX packets 1 bytes 84 (84.0 B)
TX packets 1 bytes 84 (84.0 B)
[ k8s-w2 ]
🧿 네트워크 인터페이스 ens5 에서 IPv4 패킷을 확인합니다.
- 패킷 전송: 192.168.10.101에서 192.168.10.102로 전송됨.
- 내부 데이터 전송: 172.16.158.7에서 172.16.184.1로 이동.
- 192.168.10.101에서 192.168.10.102로 가는 패킷 내부의 데이터가 172.16.158.7과 172.16.184.1 사이에서 이동하고 있다는 것을 의미합니다.
root@k8s-w2:~# tcpdump -i ens5 -nn proto 4
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on ens5, link-type EN10MB (Ethernet), snapshot length 262144 bytes
16:29:49.218181 IP 192.168.10.101 > 192.168.10.102: IP 172.16.158.7 > 172.16.184.1: ICMP echo request, id 87, seq 1, length 64
16:29:49.218292 IP 192.168.10.102 > 192.168.10.101: IP 172.16.184.1 > 172.16.158.7: ICMP echo reply, id 87, seq 1, length 64
- 패킷 정보 확인
'쿠버네티스 네트워크 스터디 3기' 카테고리의 다른 글
[4주차] 기본 구성 정보 (0) | 2024.09.23 |
---|---|
[3주차] Calico Mode : Direct 모드 / CrossSubnet 모드 (0) | 2024.09.13 |
[3주차] Pod ↔ 외부(인터넷) 통신 (0) | 2024.09.13 |
[3주차] Pod ↔ Pod 통신 (0) | 2024.09.13 |
[3주차] Calico CNI 설치 (0) | 2024.09.13 |
Comments