실습 4탄 = 4/17
본 내용을 주말 EKS 스터디 하며 , 해당 내용을 참고하여 작성 되었습니다.
1
설치 종류 3가지는 ?
Kubectl이 API-Server Endpoint Access 의 접근 범위에 따라 구분되는 것이다.
2
설치 종류 3가지 ?
1) public 설치
2) public , private 설치
3) private 설치 - Kubectl로 외부에서는 API-Server로 접근을 못하고, VPC 내부에서만 private도메인으로만 API-Server 접속 가능하다.
여기서는 Public으로 설치를 한다.
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
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
감사합니다.