일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- virt-manager
- 쿠버네티스
- k8sgpt
- IT
- 오블완
- AI
- kube-ai
- KVM
- 피카푸글램핑
- POD
- 피카푸클램핑도봉산
- api-key
- k8s
- mac터널링
- macos 터널링
- 입문용칼
- 파드
- kub-ai
- kubernetes
- 입문나이프
- 피카푸캠핑도봉산
- GPU
- kubernetes-ai
- karpor
- 글램핑
- 캠핑
- 쿠버네티스기초
- 도봉산글램핑
- 티스토리챌린지
- 쿠버네티스보안
- Today
- Total
마구잡
Kubernetes POD 통신 테스트 ( ping 명령어 없을시 ) 본문
POD 통신
POD를 배포하고 운영 혹은 테스트를 진행하다 보면 POD to POD 통신을 검증 혹은 테스트를 해보고 싶을때가 있다.
물론 Debug Pod를 배포하여 진행해도 무관하지만, 좀 더 낮은 리눅스 레벨에서 ping 테스트 curl 테스트 등을 진행하는 방법을 알아본다.
POD 네트워크 격리에 대한 글은 이전 글에서 좀 더 자세히 작성했으니 아래 글을 통해 확인할 수 있다.
( 명확하지 않은 부분은 경험을 토대로 작성하였습니다. 이는 정확한 정보가 아닐 수 있음을 알려드립니다. )
POD netns 보기
POD는 기본적으로는 독립된 리눅스 네임스페이스를 가지고있다. 간단한 nginx 이미지로 생성한 POD 해당 파드를 json 형태로 확인 하면 해당 container ID를 확인 할 수 있다. [root@hi-mn1 /]# kubectl get po ngin
mgujob.tistory.com
공식 사이트
( 광고 클릭은 큰 힘이 됩니다! )
ip-netns(8) - Linux manual page
ip-netns(8) — Linux manual page IP-NETNS(8) Linux IP-NETNS(8) NAME top ip-netns - process network namespace management SYNOPSIS top ip [ OPTIONS ] netns { COMMAND | help } ip netns [ list ] ip netns add NETNSNAME ip netns attach N
man7.org
POD의 인터페이스
테스트용 Nginx 이미지 POD 두 개를 배포한다.
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-1
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-2
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
꼭 새로 배포할 필요 없이 기존 배포된 POD를 이용해도 된다.
배포된 POD IP를 확인한다.
root@ubuntu-m1:~# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-pod-1 1/1 Running 0 11s 172.17.170.40 ubuntu-w2 <none> <none>
nginx-pod-2 1/1 Running 0 9s 172.17.167.31 ubuntu-w1 <none> <none>
exec를 통해 POD에서 ping 커맨드를 실행해본다.
root@ubuntu-m1:~# kubectl exec -it nginx-pod-1 -- ping 172.17.167.31
error: Internal error occurred: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec "99d29dbf66365fc6fd524c6f6093288759134fa738b74f0dc860fe50fbeed0f9": OCI runtime exec failed: exec failed: unable to start container process: exec: "ping": executable file not found in $PATH: unknown
ping 커맨드가 없기에 명령어 실행이 불가능하다.
이렇게 현재 배포한 파드가 ping이 없고 뭔가 테스트가 필요한 순간이 온다면 어떤 방법을 사용하는게 좋을까?
래피드 테스트 해보기
당연히 이미지에 해당 라이브러리나 바이너리를 말아서 새로운 이미지를 만들어도 괜찮지만, 빠르고 간다하게 사용을 원한다면
ip netns 명령어를 사용해보자
ip netns 명령어는 리눅스 시스템에서 네트워크 네임스페이스(Network Namespace)를 관리하기 위한 도구이다. 네트워크 네임스페이스는 커널 레벨에서 제공되는 격리 메커니즘으로, 하나의 시스템 내에서 여러 개의 독립적인 네트워크 환경을 생성하고 관리할 수 있게 해준다. 이를 통해 각 네임스페이스는 자체적인 네트워크 인터페이스, 라우팅 테이블, 방화벽 규칙 등을 가지며, 다른 네임스페이스와 분리된 상태로 동작한다.
nginx-pod-1이 구동중인 ubuntu-w2 노드로 이동한다.
root@ubuntu-w2:~# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-pod-1 1/1 Running 0 11s 172.17.170.40 ubuntu-w2 <none> <none>
nginx-pod-2 1/1 Running 0 9s 172.17.167.31 ubuntu-w1 <none> <none>
crictl ps를 통해 현재 구동중인 nginx-pod-1을 검색하자
root@ubuntu-w2:~# crictl ps |grep nginx-pod-1
9ad35aba9ad41 3b25b682ea82b 8 minutes ago Running nginx 0 de5381032846c nginx-pod-1
컨테이너의 PID 정보 조회
root@ubuntu-w2:~# crictl inspect 9ad35aba9ad41 |grep pid
"pid": 1
"pid": 3040724,
"type": "pid"
PID를 통한 container 인터페이스 추출 및 검증
POD의 IP와 해당 인터페이스로 추출한 IP가 동일한것을 확인 할 수 있다.
root@ubuntu-w2:~# ip netns identify 3040724
cni-c1d92a34-38fb-6cbd-aafe-9ab38437072e
root@ubuntu-w2:~# ip netns exec cni-c1d92a34-38fb-6cbd-aafe-9ab38437072e ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
4: eth0@if28: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc noqueue state UP group default qlen 1000 link-netnsid 0
inet 172.17.170.40/32 scope global eth0
valid_lft forever preferred_lft forever
다른 POD로 ping 테스트
root@ubuntu-w2:~# ip netns exec cni-c1d92a34-38fb-6cbd-aafe-9ab38437072e ping 172.17.167.31
PING 172.17.167.31 (172.17.167.31) 56(84) bytes of data.
64 bytes from 172.17.167.31: icmp_seq=1 ttl=62 time=0.532 ms
64 bytes from 172.17.167.31: icmp_seq=2 ttl=62 time=0.331 ms
64 bytes from 172.17.167.31: icmp_seq=3 ttl=62 time=0.362 ms
이외에도 다른 명령어 또한 사용이 가능하다.
그러나 호스트에서 진행하는 만큼 파드 내부에서 진행보다 석연치 않은 부분이 많다.
뭔가 좀 더 POD를 고립시킨 환경에서 시도해보는 방법을 찾아봐야곘다.
중요
잘못된 정보나, 문의등은 댓글로 메일과 함께 적어주시면 감사하겠습니다.
'Kubernetes > 작은팁-짧은글' 카테고리의 다른 글
Open-WebUi Ollama API Key 발급방법 (0) | 2025.03.13 |
---|---|
Podman permission denied 문제 (0) | 2025.03.04 |
Kubernetes Ephemeral Storage (1) | 2024.11.04 |
쿠버네티스 클러스터 플러그인 사용하기 (1) | 2024.10.29 |
Kubernetes 다중 클러스터 context 추가 및 에러 발생 시나리오 (1) | 2024.10.25 |