brunch

EKS 4탄-4. Amazon EKS 네트워크-4/17

실습 4탄 = 4/17

by Master Seo

본 내용을 주말 EKS 스터디 하며 , 해당 내용을 참고하여 작성 되었습니다.


<1> EKS 클러스터 설치 예 3가지

<2> 일반 쿠버네티스와 EKS 네트워크 차이

<3> AWS VPC CNI 기본 구조 - 최대 Pod 수 계산 ?

<4> Pod의 이해

<5> VPC CNI 기본 정보 확인 - 작업용 EC2에서 확인

<6> node에서 기본 네트워크 확인

<7> 실습1 - 테스트용 Pod 생성하여 네트워크 확인

<8> 실습2 - Pod간 통신 확인 - 기본으로 Pod간 통신이 잘된다.





<1> EKS 클러스터 설치 예 3가지


1

설치 종류 3가지는 ?

Kubectl이 API-Server Endpoint Access 의 접근 범위에 따라 구분되는 것이다.



2

설치 종류 3가지 ?

1) public 설치

2) public , private 설치

3) private 설치 - Kubectl로 외부에서는 API-Server로 접근을 못하고, VPC 내부에서만 private도메인으로만 API-Server 접속 가능하다.



여기서는 Public으로 설치를 한다.




<2> 일반 쿠버네티스와 EKS 네트워크 차이


1

일반 쿠버네티스 ?

쿠버네티스 클러스터와 다른 네트워크에 Pod가 존재함 (예) 10.10.0.0/16)

Pod는 클러스터 자체 네트워크를 사용하므로, 엔드포인트가 없으면 통신이 안된다.

클러스터 외부 인스턴스에서 Pod로 접속은 안됨.

네트워크 통신을 위해 칼리코 등을 사용함



2

EKS 네트워크?

EKS 클러스터 VPC와 같은 네트워크에 Pod 존재함 (예) (192.168.0.0/16))

동일 VPC이므로 클러스터 외부 인스턴스에서 Pod로 통신이 됨. 같은 VPC내에서 통신 가능.

EKS 클러스터내 Pod는 네임스페이스로 구분은 된다.

통신은 외부로 된다.





<3> AWS VPC CNI 기본 구조 - 최대 Pod 수 계산 ?



1

EKS Pod ?

별도 네트워크 대역을 사용하지 않고, 호스트와 같은 네트워크 대역을 사용한다.



2

EC2 유형별 최대 생성 가능한 파드 수?

최대 Pods = ENI * (ENI당 지원하는 IP수 -1 ) +2



3

예)

m5.large

ENI=3

ENI당 지원하는 IP수 = 10

최대 Pods = 3 * (10-1) +2 = 29



4

https://github.com/awslabs/amazon-eks-ami/blob/master/files/eni-max-pods.txt




5

API-server 접속 ?


Public=true

Private = false

// Master node가 외부 인터넷은 통해 접속 됨.



Public=true

Private = true



Public=false

Private = true

// 보안 강화 ? 내부에서만 접속 되게 하기 , 프라이빗 도메일 주소로 접속





<4> Pod이해 ?


1

110 pod.png


2

Pod ?

Pod 안에 1개 이상의 컨테이너가 존재할수 있다.

Pod가 삭제 되면 안에 컨테이너는 모두 삭제 된다.

Pod 안에 컨테이너를 만들면 , 기본적으로 컨테이너0인 Pause 컨테이너 가 만들어진다.

Pause 컨테이너= 인프라 컨테이너라고도 불리운다.

그리고, 사용자가 만든 컨테이너가 만들어진다.

Pod 는 클러스터내에 접근 가능한 고유IP를 가지며, 다른 노드에 위치한 Pod도 NAT없이 Pod IP로 접근 가능.

Pod 안의 컨테이너는 IP를 공유한다. IP 는 Pod마다 할당 된다.

컨테이너끼리 localhost를 통해 서로 접근, 포트로 구분한다.



3

다음은 pod 1개에 container 2개 생성의 경우이다.


apiVersion: v1

kind: Pod

metadata:

name: myweb2

spec:

containers:

- name: myweb2-nginx

image: nginx

ports:

- containerPort: 80

protocol: TCP

- name: myweb2-netshoot

image: nicolaka/netshoot

command: ["/bin/bash"]

args: ["-c", "while true; do sleep 5; curl localhost; done"] # 포드가 종료되지 않도록 유지합니다



4

AWS CNI (기본값) - Calico 없음



5

Calico 사용시 담당


130 callico.png



5

Calico장점 ?

EKS : 2가지 동작 지원 , Calico Policy 플러그인 , AWS CNI대신 Calico CNI사용

AWS with Calico CNI : CNI를 Calico 사용, IP 부족 관리 불필요, 암호화 지원 (wireguard)




https://docs.aws.amazon.com/eks/latest/userguide/calico.html



https://docs.projectcalico.org/getting-started/kubernetes/managed-public-cloud/eks




<5> VPC CNI


1

기본 정보 확인 ?

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2


amazon-k8s-cni-init:v1.20.4-eksbuild.1

amazon-k8s-cni:v1.20.4-eksbuild.1

amazon





2

eksctl get cluster -n $CLUSTER_NAME


ME VERSION STATUS CREATED VPC SUBNETS SECURITYGROUPS PROVIDER

first-eks 1.33 ACTIVE 2025-10-29T23:20:33Z vpc-057738058ab727e89 subnet-0134e994a1bc5fd2b,subnet-0181cdc42a963165a,subnet-0546e8fa570592188 sg-0f73c9727bc734779 EKS

[ec2-user@eksctl-host ~]$





3

kubectl get nodes

kubectl get pods -A -owide

kubectl get pods -oname


기본 배포 되어 있는 Pod 보기 ?

모든 node의 pod가 다 보인다 -A



kubectl get pods -A


기본 6개의 Pod가 보인다.

node 2개 , coredns 2개 , kube-proxy 2개


kube-system aws-node-2cbjq 1/1 Running 0 6h33m

kube-system aws-node-jwcvs 1/1 Running 0 6h33m

kube-system coredns-76f4967988-mfxxs 1/1 Running 0 6h44m

kube-system coredns-76f4967988-vdbph 1/1 Running 0 6h44m

kube-system kube-proxy-49j2v 1/1 Running 0 6h33m

kube-system kube-proxy-xwqsx 1/1 Running 0 6h33m



3

# 노드 IP 확인

aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivateIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output table


-----------------------------------------------------------------------------------------

| DescribeInstances |

+-----------------------------------+-------------------+-------------------+-----------+

| InstanceName | PrivateIPAdd | PublicIPAdd | Status |

+---------------------- ------------+-------------------+-------------------+------------+

| myeks-host | 192.168.1.100 | 13.125.211.37 | running |

| myeks-ng-1c1d147e-Node | 192.168.1.90 | 52.78.163.30 | running |

| myeks-ng-1c1d147e-Node | 192.168.2.4 | 13.125.250.19 | running |

+----------------------------------+------------------+-------------------+-------------+


// ec2 1개, node 2개



4

EKS에서는?

node의 IP와 Proxy Pod의 IP가 같다.

node의 IP 대역과 Core DNS의 IP대역이 같다. IP는 다르다.


예)

kubectl get pods -A -owide


192.168.0.x

192.168.2.x 대로 같다.

120 pod ip.png


온프라미스 쿠버네티스에서는 Calico 사용시 node ip와 pod ip는 달랐다.



5

AWS VPC CNI는 node의 IP와 Proxy Pod의 IP가 같다.

네트워크 모드가 host 모드로 서버의 IP를 그대로 쓴다.

kube-proxy와 aws-node Pod는 => 워커 node의 IP 와 같다.

서버의 네트워크를 그대로 사용한다.



5

core dns pod는 ip를 같이 사용하지 않고, 신규 ip를 사용한다.

dns는 ip 따로 ~

IP대역은 같은 대역을 사용한다.



6

작업용 ec2 -> 워커 node로 ping test

ping 192.168.1.90

ping 안됨.



7

작업용 ec2 -> 워커 node로 ping 되도록 보안 그룹 허용


NGSGID=`aws ec2 describe-security-groups --filters Name=group-name,Values=*nodegroup* --query "SecurityGroups[*].[GroupId]" --output text`


aws ec2 authorize-security-group-ingress --group-id $NGSGID --protocol '-1' --cidr 192.168.1.100/32


(t6-admin@myeks:default) [root@myeks-host ~]# ping 192.168.2.4

PING 192.168.2.4 (192.168.2.4) 56(84) bytes of data.

64 bytes from 192.168.2.4: icmp_seq=1 ttl=255 time=1.04 ms

64 bytes from 192.168.2.4: icmp_seq=2 ttl=255 time=1.35 ms





<6> node에서 기본 네트워크 확인



1

worker node1의 EC2 서버 접속



2

유틸 설치

yum -y install htop tcpdump tree lsof tmux



3

worker node에서 컨테이너 확인

// worker = 일하는 아이

docker ps

docker ps -q

docker ps --format "table {{.Names}}\t{{.Status}}"

docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"

docker ps --format "table {{.Image}}\t{{.Status}}"

docker ps --format "table {{.Image}}\t{{.Status}}\t{{.Names}}"


work node 네트워크 정보

private ip 만 가지고 있다.



4

pod가 하나 생기면 인프라 컨테이너인 pause 컨테이너가 하나 씩 생긴다.

docker ps --format "table {{.Image}}\t{{.Status}}"


IMAGE STATUS

602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/amazon-k8s-cni Up 2 hours

602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/eks/kube-proxy Up 2 hours

602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/eks/pause:3.1-eksbuild.1 Up 2 hours

602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/eks/pause:3.1-eksbuild.1 Up 2 hours



5

worker node의 네트워크 정보 보자

ip -br -c addr

ip -c link

ip -c addr

ip route

# 혹은 route -n


ip -br -c addr

[root@ip-192-168-1-90 ~]# ip -br -c addr

lo UNKNOWN 127.0.0.1/8 ::1/128

eth0 UP 192.168.1.90/24 fe80::4c:51ff:fece:7ce4/64


ip -c link

[root@ip-192-168-1-90 ~]# ip -c link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP mode DEFAULT group default qlen 1000

link/ether 02:4c:51:ce:7c:e4 brd ff:ff:ff:ff:ff:ff


ip -c addr

[root@ip-192-168-1-90 ~]# ip -c addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000

link/ether 02:4c:51:ce:7c:e4 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.90/24 brd 192.168.1.255 scope global dynamic eth0

valid_lft 2265sec preferred_lft 2265sec

inet6 fe80::4c:51ff:fece:7ce4/64 scope link

valid_lft forever preferred_lft forever


ip route

[root@ip-192-168-1-90 ~]# ip route

default via 192.168.1.1 dev eth0

169.254.169.254 dev eth0

192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.90


pod가 없어 기본 네트워크 eth0만 있다.



4

[root@ip-192-168-1-90 ~]# docker ps



5

node2의 ec2 접속 ?

pod가 2개가 있다.

core dns 때문에 eni가 생성되어 있다.


ip -br -c addr

ip -c link

ip -c addr

ip route


ip -br -c addr

[root@ip-192-168-2-4 ~]# ip -br -c addr

lo UNKNOWN 127.0.0.1/8 ::1/128

eth0 UP 192.168.2.4/24 fe80::8a7:5bff:fe22:7400/64

enie8d936a6c45@enie8d936a6c45 UP fe80::c8e:b6ff:fef7:ed84/64

eni9bc0955a9f0@enie8d936a6c45 UP fe80::e858:9eff:feff:8149/64

eth1 UP 192.168.2.142/24 fe80::828:68ff:fe1f:c884/64


ip -c link

[root@ip-192-168-2-4 ~]# ip -c link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP mode DEFAULT group default qlen 1000

link/ether 0a:a7:5b:22:74:00 brd ff:ff:ff:ff:ff:ff

3: enie8d936a6c45@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP mode DEFAULT group default

link/ether 0e:8e:b6:f7:ed:84 brd ff:ff:ff:ff:ff:ff link-netnsid 0

4: eni9bc0955a9f0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP mode DEFAULT group default

link/ether ea:58:9e:ff:81:49 brd ff:ff:ff:ff:ff:ff link-netnsid 1

5: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP mode DEFAULT group default qlen 1000

link/ether 0a:28:68:1f:c8:84 brd ff:ff:ff:ff:ff:ff


ip -c addr

[root@ip-192-168-2-4 ~]# ip -c addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000

link/ether 0a:a7:5b:22:74:00 brd ff:ff:ff:ff:ff:ff

inet 192.168.2.4/24 brd 192.168.2.255 scope global dynamic eth0

valid_lft 2511sec preferred_lft 2511sec

inet6 fe80::8a7:5bff:fe22:7400/64 scope link

valid_lft forever preferred_lft forever

3: enie8d936a6c45@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default

link/ether 0e:8e:b6:f7:ed:84 brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet6 fe80::c8e:b6ff:fef7:ed84/64 scope link

valid_lft forever preferred_lft forever

4: eni9bc0955a9f0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default

link/ether ea:58:9e:ff:81:49 brd ff:ff:ff:ff:ff:ff link-netnsid 1

inet6 fe80::e858:9eff:feff:8149/64 scope link

valid_lft forever preferred_lft forever

5: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000

link/ether 0a:28:68:1f:c8:84 brd ff:ff:ff:ff:ff:ff

inet 192.168.2.142/24 brd 192.168.2.255 scope global eth1

valid_lft forever preferred_lft forever

inet6 fe80::828:68ff:fe1f:c884/64 scope link

valid_lft forever preferred_lft forever


ip route

[root@ip-192-168-2-4 ~]# ip route

default via 192.168.2.1 dev eth0

169.254.169.254 dev eth0

192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.4

192.168.2.74 dev eni9bc0955a9f0 scope link

192.168.2.156 dev enie8d936a6c45 scope link



6

확인법?

eni가 있는 ec2에서 네임스페이스 정보를 확인하자

lsns -o PID,COMMAND -t net


[root@ip-192-168-2-4 ~]# lsns -o PID,COMMAND -t net

PID COMMAND

1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

4356 /pause

4506 /pause

// 2개의 프로세스 IP가 보인다.

변수로 지정하자



7

MyPID1=4356

네임스페이스에 명령을 전달


// 네임스페이스 엔터 = 네임서비스에 명령을 내리는 유틸 , -t 는 타켓

nsenter -t $MyPID1 -n ip a

[root@ip-192-168-2-4 ~]# nsenter -t $MyPID1 -n ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

3: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default

link/ether fa:5c:52:4e:1d:66 brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet 192.168.2.156/32 scope global eth0

valid_lft forever preferred_lft forever



8

작업용 EC2에서 IP 확인 ?

k get pod -A -owide

192.168.2.156 은 code dns ip임을 확인 한다.



8

특이점 ?

192.168.2.156/32 에서 외부로 ping된다. 통신이 된다.

워커 노드와 같은 대역을 쓴다.

통신이 되는 이유는? proxy-arp

다음번 외부 통신 부분에서 설명이 된다.




<7> 실습1 - 테스트용 Pod 생성하여 네트워크 확인


1

woker node에서 이더넷과 라우팅 테이블 모니터링

watch -d "ip link | egrep 'eth|eni' ;echo;echo "ROUTE TABLE"; route -n | grep eni"



2

작업용 EC2 에서

터미널 2에서 pod 2개 생성

netshoot-pod 를 만든다.


cat <<EOF | kubectl create -f -

apiVersion: v1

kind: Pod

metadata:

name: pod-1

labels:

app: pod

spec:

containers:

- name: netshoot-pod

image: nicolaka/netshoot

command: ["tail"]

args: ["-f", "/dev/null"]

terminationGracePeriodSeconds: 0

---

apiVersion: v1

kind: Pod

metadata:

name: pod-2

labels:

app: pod

spec:

containers:

- name: netshoot-pod

image: nicolaka/netshoot

command: ["tail"]

args: ["-f", "/dev/null"]

terminationGracePeriodSeconds: 0

EOF



3

Pod 확인

kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

pod-1 1/1 Running 0 12m 192.168.1.11 ip-192-168-1-90.ap-northeast-2.compute.internal

pod-2 1/1 Running 0 12m 192.168.1.121 ip-192-168-1-90.ap-northeast-2.compute.internal



4

node에서 이더넷과 라우팅 테이블 모니터링 확인?


pod 2개 생성시 ?

라우팅 테이블 2개 생김

eth1 이 생김 - pod들이 생김

eth0 5개의 ip는 맨 마지막에 사용함.


순서 ?

pod 생성되면 , eth1 pod 5개 사용

eth0 ip는 pod 5개 사용함.



5

worker node에서


lsns -o PID,COMMAND -t net

PID COMMAND

1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

29814 /pause

29907 /pause



6

MyPID1=29814



7

네임스페이스에 명령을 전달

MyPID1=29814

nsenter -t $MyPID1 -n ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

3: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default

link/ether 46:2d:b6:e8:5e:f2 brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet 192.168.1.11/32 scope global eth0

valid_lft forever preferred_lft forever


Pod IP 192.168.1.11 과 같음을 확인




<8> 실습2 - Pod간 통신 확인 - 기본으로 Pod간 통신이 잘된다.


1

기본으로 Pod간 통신이 잘된다.

Pod에서 외부와 통신도 잘 된다.



2

작업용 EC2 에서~

k get pods -owide

NAME READY STATUS RESTARTS AGE IP NODE

pod-1 1/1 Running 0 51m 192.168.1.11 ip-192-168-1-90.ap-northeast-

pod-2 1/1 Running 0 51m 192.168.1.121 ip-192-168-1-90.ap-northeast-



3

작업용 EC2 에서~

pod-1 에 접속해서 Shell 실행

kubectl exec -it pod-1 -- zsh


ip a

route

ping -c 1 <pod-2 IP> # 아래 tcpdump 시 실행

ping 8.8.8.8

curl ipinfo.io/ip

exit


결과

pod-1 # ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

3: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default

link/ether 46:2d:b6:e8:5e:f2 brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet 192.168.1.11/32 scope global eth0

valid_lft forever preferred_lft forever



pod-1 # route

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

default 169.254.1.1 0.0.0.0 UG 0 0 0 eth0

169.254.1.1 * 255.255.255.255 UH 0 0 0 eth0


pod-1 # ping -c 1 192.168.1.121

PING 192.168.1.121 (192.168.1.121) 56(84) bytes of data.

64 bytes from 192.168.1.121: icmp_seq=1 ttl=254 time=0.078 ms


--- 192.168.1.121 ping statistics ---

1 packets transmitted, 1 received, 0% packet loss, time 0ms

rtt min/avg/max/mdev = 0.078/0.078/0.078/0.000 ms


pod-1 # curl ipinfo.io/ip

52.78.163.30#

pod-1 # exit



3

Pod의 IP정보 확인 법 ?


for PID in $(lsns -o PID,COMMAND -t net | awk 'NR>2 {print $1}'); do nsenter -t $PID -n ip a | grep eth0@ -A2; echo "-----------"; done


[root@ip-192-168-1-90 ~]# for PID in $(lsns -o PID,COMMAND -t net | awk 'NR>2 {print $1}'); do nsenter -t $PID -n ip a | grep eth0@ -A2; echo "-----------"; done

3: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default

link/ether 46:2d:b6:e8:5e:f2 brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet 192.168.1.11/32 scope global eth0

-----------

3: eth0@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default

link/ether 52:1c:1f:3e:9b:ad brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet 192.168.1.121/32 scope global eth0



4

work node EC2에서 통신 확인

yum -y install tcpdump

tcpdump -i any -nn icmp


work node EC2에서 모니터링

tcpdump -i any -nn icmp


명령 EC2에서

kubectl exec -it pod-1 -- zsh

ping 8.8.8.8



5

dump 확인?

tcpdump -i any -nn icmp

// -n 옵션이 모두 확인


[root@ip-192-168-1-90 ~]# tcpdump -i any -nn icmp

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

07:30:12.776707 IP 192.168.1.11 > 8.8.8.8: ICMP echo request, id 29604, seq 1, length 64

07:30:12.776743 IP 192.168.1.90 > 8.8.8.8: ICMP echo request, id 12422, seq 1, length 64

07:30:12.803232 IP 8.8.8.8 > 192.168.1.90: ICMP echo reply, id 12422, seq 1, length 64

07:30:12.803283 IP 8.8.8.8 > 192.168.1.11: ICMP echo reply, id 29604, seq 1, length 64

// IP가 nat 된다. 마스커레이딩 되어 통신이 되는 것이다.



6

192.168.1.11은 pod-1 ip 이다.


pod-1 # ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

3: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default

link/ether 46:2d:b6:e8:5e:f2 brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet 192.168.1.11/32 scope global eth0

valid_lft forever preferred_lft



7

192.168.1.90 은 node eth0 ip 이다.


[root@ip-192-168-1-90 ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000

link/ether 02:4c:51:ce:7c:e4 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.90/24 brd 192.168.1.255 scope global dynamic eth0

valid_lft 2865sec preferred_lft 2865sec

inet6 fe80::4c:51ff:fece:7ce4/64 scope link

valid_lft forever preferred_lft forever

3: eni83dbd022cd5@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default

link/ether 6a:56:cb:7a:0c:2a brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet6 fe80::6856:cbff:fe7a:c2a/64 scope link

valid_lft forever preferred_lft forever

4: enifbd243bfedd@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default

link/ether 46:72:e8:49:b2:e4 brd ff:ff:ff:ff:ff:ff link-netnsid 1

inet6 fe80::4472:e8ff:fe49:b2e4/64 scope link

valid_lft forever preferred_lft forever

5: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000

link/ether 02:a1:2e:ea:36:1a brd ff:ff:ff:ff:ff:ff

inet 192.168.1.47/24 brd 192.168.1.255 scope global eth1

valid_lft forever preferred_lft forever

inet6 fe80::a1:2eff:feea:361a/64 scope link

valid_lft forever preferred_lft forever



8

pod 삭제

kubectl delete pod pod-1 pod-2





다음


Pod 와 서비스 통신


https://brunch.co.kr/@topasvga/1867



keyword
매거진의 이전글EKS 4탄-3. 배치 서비스 구축-3/17