CLOUD/Docker&Kubernetes

[Kubernetes] K8S 구조 - K8S 네트워크

alsruds 2023. 5. 3. 23:39

▷ 하나의 파드 안에 여러 개의 컨테이너 생성

파드 간 통신

 


 

 

[ 네트워크 확인하기 ]

● 마스터 노드

kubectl get pod -o wide -n kube-system
netstat -anlp | grep 6443 | grep LISTEN

kube-apiserver : 6443 포트로 실행

 

워커 노드

systemctl status kubelet
netstat -anlp | grep kubelet

》 워커 노드의 kubelet (프로그램) 이 마스터 노드 6443 포트와 연결되어 있음

 

 

[ 다른 컨테이너의 파드 간 통신하기 ]

파드 생성하기

apiVersion: v1
kind: Pod
metadata:
  name: hello-pod
  labels:
    app: hello
spec:
  containers:
  - name: hello-container1
    image: nuy0307/hello:9000
    ports:
    - containerPort: 9000
  - name: hello-container2
    image: nuy0307/hello:8000
    ports:
    - containerPort: 8000

 

 

생성된 워커 노드에서 확인하기

docker ps | grep hello-pod

》 하나의 파드 생성 시 pause 라 하는 컨테이너 자동 생성

 

pause 컨테이너

# pause 컨테이너 자세한 정보 출력
docker inspect [pause container id]
# "NetworkSettings" - SandboxKey (특정 디렉토리: 생성된 네임스페이스) -> 복사

# namespace 생성 확인
ip netns list

# symbolic link 생성 : 도커의 격리된 네임스페이스 정보를 본체 컴퓨터에서도 확인할 수 있도록 설정
ln -s /var/run/docker/netns /var/run/netns

# pause 컨테이너의 네임스페이스에 설정된 IP 주소 확인
ip netns exec [네임스페이스ID] ip addr
# 위에서 복사했던 SandboxKey

# 본체 컴퓨터의 라우팅 테이블 확인
route -n

 

hello-container1 에서 pause 컨테이너 확인

 

 

다른 워커 노드에 파드 생성하기

apiVersion: v1
kind: Pod
metadata:
  name: hello-pod2
  labels:
    app: hello
spec:
  nodeSelector:
    kubernetes.io/hostname: node2
  containers:
  - name: hello-container1
    image: nuy0307/hello:9000
    ports:
    - containerPort: 9000
  - name: hello-container2
    image: nuy0307/hello:8000
    ports:
    - containerPort: 8000

 

 

● 다른 컨테이너의 파드와 통신하기

》 node2 의 파드 접속

# curl 명령어 설치
apt update
apt install curl

# node1 의 파드와 통신 확인
curl 150.150.150.169:8000

 

 

패킷으로 확인하기

# 패킷 캡쳐 프로그램 설치
yum install -y tcpdump

# 라우팅 테이블 확인
route -n
# 해당 노드 IP 의 Iface 확인

# 패킷 캡쳐 확인
tcpdump -i [위에서 확인한 Iface]

# 본체 컴퓨터에서 확인
tcpdump -i ens160 | grep -v ssh | grep ipip
# 파드 접속 후 curl 명령어 실행해보기