본문 바로가기

kubernetes

kubernetes 의 runtime이 containerd 일 때 nsenter로 container 접속 (tcpdump)

k8s 환경에서 container에 tcpdump 등 명령어 입력을 위해 nsenter(namespace enter)가 필요할 때가 있다.
예를 들어,

  1. pod에 tcpdump 명령어가 없는 경우
  2. pod에 tcpdump명령어가 있지만 sudo 권한이 필요한 경우
  3. 그 외 ..;

아무튼 아래 과정을 통해 해당 컨테이너로 접속하는 과정을 공유한다.

1. Pod 조회 및 container ID 확인

### get pod
$ kubectl get pod -o wide
NAME                                                              READY   STATUS    RESTARTS      AGE     IP             NODE              NOMINATED NODE   READINESS GATES
sample-pod-679899669d-pfdp5                            1/1     Running   0             3d23h   172.172.172.172   node1   <none>           <none>

### describe pod
$ kubectl describe po sample-pod-679899669d-pfdp5 | grep -i id
    Container ID:   containerd://e5ba24560fed3f8d031b137075d549fe6fdb7f2ad7c3478e23be3118badb4e30

위 과정으로 Container ID를 확인한다.

2. node1 접속 및 pid 확인

접속하기 원하는 node로 이동하여 pid를 확인한다.

### node1 접속
$ ssh node1

### pid 확인
$ sudo crictl inspect e5ba24560fed3f8d031b137075d549fe6fdb7f2ad7c3478e23be3118badb4e30 | grep pid
    "pid": 140522,

crictl 명령으로 container가 해당 노드(node1)에서 어떤 pid로 돌고있는지 확인한다.

3. nsenter command

위 과정을 통해 얻은 pid는 nsenter 명령에 활용된다.

### ip 확인
$ nsenter -t 140522 -n ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.172.172.172  netmask 255.255.255.255  broadcast 0.0.0.0
...

### tcpdump
$ nsenter -t 140522 -n tcpdump -nni any
...

ifconfig를 통해 pod에서 확인한 ip와 같은 ip를 갖는것을 확인할 수 있고 원하는대로 tcpdump 명령을 수행할 수 있다.

반응형