클라우드/AWS

[AWS] EKS Network (실습- 네트워크 기본 정보 확인) - 2주차

Cloud_Park 2023. 5. 2. 01:13

실습 환경을 구성 후 따라하는 것을 권장합니다.

2023.05.02 - [클라우드/AWS] - [AWS] EKS 실습 ( 원클릭으로 생성하기 )

 

[AWS] EKS 실습 ( 원클릭으로 생성하기 )

EKS 설치 사용 2023.04.26 - [클라우드/AWS] - [AWS] EKS 설치 / 사용 [AWS] EKS 설치 / 사용 기술향상을 위해 EKS 스터디를 참여하게 되었습니다. 좋은 기회를 얻은 것 같습니다. ------ kubernetes 명령어 / 베어메

blog.base-on.co.kr

 

 네트워크 기본 정보 확인

#bastion 인스턴스에서 실행
kubectl get pod -n kube-system -l k8s-app=kube-dns -owide
NAME                       READY   STATUS    RESTARTS   AGE   IP              NODE                                               NOMINATED NODE   READINESS GATES
coredns-6777fcd775-57k77   1/1     Running   0          70m   192.168.1.142   ip-192-168-1-251.ap-northeast-2.compute.internal   <none>           <none>
coredns-6777fcd775-cvqsb   1/1     Running   0          70m   192.168.2.75    ip-192-168-2-34.ap-northeast-2.compute.internal    <none>           <none>

# N1~3 은 설정 해놓아야 한다.
#kubectl get node -o wide
#위 명령어에서 나오는 192..168.1,2,3. 값을 저장

# 노드의 라우팅 정보 확인 >> EC2 네트워크 정보의 '보조 프라이빗 IPv4 주소'와 비교해보자
ssh ec2-user@$N1 sudo ip -c route
ssh ec2-user@$N2 sudo ip -c route
ssh ec2-user@$N3 sudo ip -c route

콘솔에 로그인하면 하기의 창과 같이 나타난다.

pod로 건색한 아이피가  웹콘솔에도 보이는 지 확인 

>> AWS VPC CNI는 클러스터 아이피가 AWS VPC의 아이피로 할당됨

위 사진 2개를 비교하여 있는지 없는 지 확인 

 

[실습] 테스트 파트 생성 - nicolaka/netshoot 이미지

# [터미널1~3] 노드 모니터링
ssh ec2-user@$N1
watch -d "ip link | egrep 'eth|eni' ;echo;echo "[ROUTE TABLE]"; route -n | grep eni"

ssh ec2-user@$N2
watch -d "ip link | egrep 'eth|eni' ;echo;echo "[ROUTE TABLE]"; route -n | grep eni"

ssh ec2-user@$N3
watch -d "ip link | egrep 'eth|eni' ;echo;echo "[ROUTE TABLE]"; route -n | grep eni"

# 테스트용 파드 netshoot-pod 생성
cat <<EOF | kubectl create -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: netshoot-pod
spec:
  replicas: 3
  selector:
    matchLabels:
      app: netshoot-pod
  template:
    metadata:
      labels:
        app: netshoot-pod
    spec:
      containers:
      - name: netshoot-pod
        image: nicolaka/netshoot
        command: ["tail"]
        args: ["-f", "/dev/null"]
      terminationGracePeriodSeconds: 0
EOF

# 파드 이름 변수 지정
PODNAME1=$(kubectl get pod -l app=netshoot-pod -o jsonpath={.items[0].metadata.name})
PODNAME2=$(kubectl get pod -l app=netshoot-pod -o jsonpath={.items[1].metadata.name})
PODNAME3=$(kubectl get pod -l app=netshoot-pod -o jsonpath={.items[2].metadata.name})

# 파드 확인
kubectl get pod -o wide
kubectl get pod -o=custom-columns=NAME:.metadata.name,IP:.status.podIP

생성 결과

사진에서 색칠된 부분 : 인스턴스가 생성되는 Network Interface가 새로 생기는 것을 확인 

 

워커노드에서 인터넷 네임스페이스의 아이피와 룰을 조회 (워커노드 1번 사진)

명령어

더보기
ssh ec2-user@$N1
----------------
ip -br -c addr show
ip -c link
ip -c addr
ip route # 혹은 route -n

# 마지막 생성된 네임스페이스 정보 출력 -t net(네트워크 타입)
sudo lsns -o PID,COMMAND -t net | awk 'NR>2 {print $1}' | tail -n 1

# 마지막 생성된 네임스페이스 net PID 정보 출력 -t net(네트워크 타입)를 변수 지정
MyPID=$(sudo lsns -o PID,COMMAND -t net | awk 'NR>2 {print $1}' | tail -n 1)

# PID 정보로 파드 정보 확인
sudo nsenter -t $MyPID -n ip -c addr
sudo nsenter -t $MyPID -n ip -c route

exit

파트에서 조회 - 비교 

명령어

kubectl exec -it $PODNAME1 -- zsh

# 아래부터는 pod-1 Shell 에서 실행 : 네트워크 정보 확인
----------------------------
ip -c addr
ip -c route
route -n
ping -c 1 <pod-2 IP>
ps
cat /etc/resolv.conf
exit
----------------------------

# 파드2 Shell 실행
kubectl exec -it $PODNAME2 -- ip -c addr

# 파드3 Shell 실행
kubectl exec -it $PODNAME3 -- ip -br -c addr


파드를 생성 후  워커노드에 생성된 NS과 파드에 접속하여 비교해 보았다.