brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Aug 30. 2021

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

실습 4탄 =  4/17

본 내용을  주말  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간 통신이 잘된다.

<9> 다음편 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


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


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 사용시 담당


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  


# CNI 정보 확인   

AWS CNI 1.75 버전을 쓰는구나~

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

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


2

eksctl get cluster -n $CLUSTER_NAME

NAME   VERSION STATUS  CREATED       VPC    SUBNETS   SECURITYGROUPS          PROVIDER

first-eks       1.21    ACTIVE  2021-11-11T08:46:16Z    vpc-0d892b15a5f8a72bd   subnet-028c43,subnet-0520,subnet-0a3dcd9b      sg-01c36eae    EKS


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 대로 같다.


온프라미스 쿠버네티스에서는 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



<9> 다음편 , Pod 와 서비스 통신


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




감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari