Amazon EKS

kimchigood·2023년 4월 24일
1

AEWS Study

목록 보기
1/11
post-thumbnail

이번에는 EKS Study이다. 오래 전 부터 가시다님의 스터디에 참여하면서, 엄청나게 많이 배우고 있는데, 이번 스터디도 힘차게 달려나가 보겠다.

EKS?

Amazon EKS is a managed Kubernetes service to run Kubernetes in the AWS cloud and on-premises data centers.

AWS에서 제공하는 managed Kubernetes Service이다. Kubernetes가 대세이다 보니, 각 CSP마다 이렇게 관리형 Kubernetes를 제공하는데, 점유율 1위인 AWS답게 적용 가능한 기능도 많고, add-on 연계가 특징인 것 같다.

Preparation

아래와 같은 세팅을 위해 스터디에서 제공하는 cloudformation으로 설치를 해보자. ssh key는 미리 생성해놔야 한다.

# yaml 파일 다운로드
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/myeks-1week.yaml

# 배포
# aws cloudformation deploy --template-file ~/Downloads/myeks-1week.yaml --stack-name mykops --parameter-overrides KeyName=<My SSH Keyname> SgIngressSshCidr=<My Home Public IP Address>/32 --region <리전>
예시) aws cloudformation deploy --template-file ~/Downloads/myeks-1week.yaml \
     --stack-name myeks --parameter-overrides KeyName=kp-gasida SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 --region ap-northeast-2

# CloudFormation 스택 배포 완료 후 EC2 IP 출력
aws cloudformation describe-stacks --stack-name myeks --query 'Stacks[*].Outputs[*].OutputValue' --output text
예시) 3.35.137.31

# ec2 에 SSH 접속
예시) ssh -i <My SSH Keyfile> ec2-user@3.35.137.31
ssh -i ~/.ssh/kp-gasida.pem ec2-user@$(aws cloudformation describe-stacks --stack-name myeks --query 'Stacks[*].Outputs[0].OutputValue' --output text)

설치가 끝나면 ssh로 작업용 EC2에 접근해보자. 기본적으로, VPC구성, eksctl, kubectl, docker 등 실습에 필요한 플러그인들이 잘 설치되어있다.

작업용 EC2에서 실습을 위해 AWS 자격증명 세팅도 해주어야한다.

# IAM User 자격 구성 : 실습 편리를 위해 administrator 권한을 가진 IAM User 의 자격 증명 입력
aws configure
AWS Access Key ID [None]: AKIA5...
AWS Secret Access Key [None]: CVNa2...
Default region name [None]: ap-northeast-2
Default output format [None]: json

# 자격 구성 적용 확인 : 노드 IP 확인
aws ec2 describe-instances

# EKS 배포할 VPC 정보 확인
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq Vpcs[]
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq Vpcs[].VpcId
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq -r .Vpcs[].VpcId
export VPCID=$(aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq -r .Vpcs[].VpcId)
echo "export VPCID=$VPCID" >> /etc/profile
echo $VPCID

# EKS 배포할 VPC에 속한 Subnet 정보 확인
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPCID" --output json | jq
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPCID" --output yaml | yh

## 퍼블릭 서브넷 ID 확인
aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" | jq
aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" --query "Subnets[0].[SubnetId]" --output text
export PubSubnet1=$(aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" --query "Subnets[0].[SubnetId]" --output text)
export PubSubnet2=$(aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet2" --query "Subnets[0].[SubnetId]" --output text)
echo "export PubSubnet1=$PubSubnet1" >> /etc/profile
echo "export PubSubnet2=$PubSubnet2" >> /etc/profile
echo $PubSubnet1
echo $PubSubnet2

1. EKS 설치

eksctl을 통해 EKS를 설치해보자. 변수는 위에서 세팅을 해줬으니 참고하자.

# 변수 확인
echo $AWS_DEFAULT_REGION
echo $CLUSTER_NAME
echo $VPCID
echo $PubSubnet1,$PubSubnet2

# 옵션 [터미널1] EC2 생성 모니터링
#while true; do 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 text ; echo "------------------------------" ; sleep 1; done
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

# eks 클러스터 & 관리형노드그룹 배포 전 정보 확인
eksctl create cluster --name $CLUSTER_NAME --region=$AWS_DEFAULT_REGION --nodegroup-name=$CLUSTER_NAME-nodegroup --node-type=t3.medium \
--node-volume-size=30 --vpc-public-subnets "$PubSubnet1,$PubSubnet2" --version 1.24 --ssh-access --external-dns-access --dry-run | yh
...
vpc:
  autoAllocateIPv6: false
  cidr: 192.168.0.0/16
  clusterEndpoints:
    privateAccess: false
    publicAccess: true
  id: vpc-0505d154771a3dfdf
  manageSharedNodeSecurityGroupRules: true
  nat:
    gateway: Disable
  subnets:
    public:
      ap-northeast-2a:
        az: ap-northeast-2a
        cidr: 192.168.1.0/24
        id: subnet-0d98bee5a7c0dfcc6
      ap-northeast-2c:
        az: ap-northeast-2c
        cidr: 192.168.2.0/24
        id: subnet-09dc49de8d899aeb7

# eks 클러스터 & 관리형노드그룹 배포: 총 16분(13분+3분) 소요 
eksctl create cluster --name $CLUSTER_NAME --region=$AWS_DEFAULT_REGION --nodegroup-name=$CLUSTER_NAME-nodegroup --node-type=t3.medium \
--node-volume-size=30 --vpc-public-subnets "$PubSubnet1,$PubSubnet2" --version 1.24 --ssh-access --external-dns-access --verbose 4

eksctl을 통해 배포를하면 16분정도 걸리는데, 결국은 cloudformation을 만들어서 EKS를 만드는 과정을 거치게된다.


2. Architecture

그림출처는 여기입니다.
control plane

기본적으로 3개의 AZ에 API서버, 컨트롤러, 스케줄러, ETCD 등의 Control Plane이 나눠져서 배치가된다. control plane은 AWS에서 관리가 되는 모듈이다.


data plane

data plane에는 kubelet, pod, kube-proxy가 배포되어 있다. API 서버에서 data plane으로 호출은 그림과 같이 EKS owned ENI를 통해서 이뤄지고, 반대로의 호출은 EKS세팅에 따라 API 서버의 퍼블릭 주소 또는 프라이빗 주소를 호출하게된다.

3. 설치확인

아래 커맨드들을 통해 eksctl을 통해 설치된 클러스터 정보를 확인해보자.

# eks 클러스터 정보 확인
kubectl cluster-info
Kubernetes control plane is running at https://50E14FE698DE0E5CA2055F72AB086163.gr7.ap-northeast-2.eks.amazonaws.com
...

eksctl get cluster
aws eks describe-cluster --name $CLUSTER_NAME | jq
aws eks describe-cluster --name $CLUSTER_NAME | jq -r .cluster.endpoint
https://50E14FE698DE0E5CA2055F72AB086163.gr7.ap-northeast-2.eks.amazonaws.com

## dig 조회 : 해당 IP 소유 리소스는 어떤것일까요?
dig +short 50E14FE698DE0E5CA2055F72AB086163.gr7.ap-northeast-2.eks.amazonaws.com

# eks API 접속 시도
curl -k -s $(aws eks describe-cluster --name $CLUSTER_NAME | jq -r .cluster.endpoint)
curl -k -s $(aws eks describe-cluster --name $CLUSTER_NAME | jq -r .cluster.endpoint)/version | jq

# eks 노드 그룹 정보 확인
eksctl get nodegroup --cluster $CLUSTER_NAME --name $CLUSTER_NAME-nodegroup
aws eks describe-nodegroup --cluster-name $CLUSTER_NAME --nodegroup-name $CLUSTER_NAME-nodegroup | jq

# 노드 정보 확인 : OS와 컨테이너런타임 확인
kubectl describe nodes | grep "node.kubernetes.io/instance-type"
kubectl get node
kubectl get node -owide
kubectl get node -v=6
I0423 02:00:38.691443    5535 loader.go:374] Config loaded from file:  /root/.kube/config
I0423 02:00:39.519097    5535 round_trippers.go:553] GET https://C813D20E6263FBDC356E60D2971FCBA7.gr7.ap-northeast-2.eks.amazonaws.com/api/v1/nodes?limit=500 200 OK in 818 milliseconds
...

# 인증 정보 확인 : 자세한 정보는 6주차(보안)에서 다룸
cat /root/.kube/config | yh
aws eks get-token --cluster-name $CLUSTER_NAME --region $AWS_DEFAULT_REGION

# 파드 정보 확인 : 온프레미스 쿠버네티스의 파드 배치와 다른점은? , 파드의 IP의 특징이 어떤가요? 자세한 네트워크는 2주차에서 다룸
kubectl get pod -n kube-system
kubectl get pod -n kube-system -o wide

kubectl get pod -A
NAMESPACE     NAME                      READY   STATUS    RESTARTS   AGE
kube-system   aws-node-m2dgw            1/1     Running   0          7m50s
kube-system   aws-node-pcghp            1/1     Running   0          7m51s
kube-system   coredns-dc4979556-87wk2   1/1     Running   0          14m
kube-system   coredns-dc4979556-l99f9   1/1     Running   0          14m
kube-system   kube-proxy-hzcvz          1/1     Running   0          7m50s
kube-system   kube-proxy-m629f          1/1     Running   0          7m51s

# kube-system 네임스페이스에 모든 리소스 확인
kubectl get-all -n kube-system

# 모든 파드의 컨테이너 이미지 정보 확인
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n' | sort | uniq -c
      2 602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/amazon-k8s-cni:v1.11.4-eksbuild.1
      2 602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/eks/coredns:v1.8.7-eksbuild.3
      2 602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/eks/kube-proxy:v1.24.7-minimal-eksbuild.2

# AWS ECR에서 컨테이너 이미지 가져오기 시도
docker pull 602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/eks/coredns:v1.8.7-eksbuild.3

**설치 완료된 화면 **

kube-system 네임스페이스에 kube-proxt파드가 있는데, mode를 알아보자.

(pkos-admin@myeks:kube-system) [root@myeks-host ~]# k describe cm kube-proxy-config
Name:         kube-proxy-config
Namespace:    kube-system
Labels:       eks.amazonaws.com/component=kube-proxy
              k8s-app=kube-proxy
Annotations:  <none>

Data
====
config:
----
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
clientConnection:
  acceptContentTypes: ""
  burst: 10
  contentType: application/vnd.kubernetes.protobuf
  kubeconfig: /var/lib/kube-proxy/kubeconfig
  qps: 5
clusterCIDR: ""
configSyncPeriod: 15m0s
conntrack:
  maxPerCore: 32768
  min: 131072
  tcpCloseWaitTimeout: 1h0m0s
  tcpEstablishedTimeout: 24h0m0s
enableProfiling: false
healthzBindAddress: 0.0.0.0:10256
hostnameOverride: ""
iptables:
  masqueradeAll: false
  masqueradeBit: 14
  minSyncPeriod: 0s
  syncPeriod: 30s
ipvs:
  excludeCIDRs: null
  minSyncPeriod: 0s
  scheduler: ""
  syncPeriod: 30s
kind: KubeProxyConfiguration
metricsBindAddress: 0.0.0.0:10249
mode: "iptables"
nodePortAddresses: null
oomScoreAdj: -998
portRange: ""
udpIdleTimeout: 250ms

kube-proxy는 iptables 또는 ipvs 모드를 쓰는데, EKS는 잘 살펴보면, mode에 "iptables" 라고 되어있다. configmap으로 세팅이 되는데, AKS는 이런 configmap이 세팅되어있지 않고, kube-proxy 파드 자체에 세팅이 되어있어 볼 수 가 없어 조금 답답했었다.

4. Node SSH

작업용 EC2에서 Node 접근을 위해 Security Group 세팅을 해준다.

# 노드 IP 확인 및 PrivateIP 변수 지정
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
N1=192.168.1.83
N2=192.168.2.10

# eksctl-host 에서 노드의IP나 coredns 파드IP로 ping 테스트
ping <IP>
ping -c 2 $N1
ping -c 2 $N2

# 노드 보안그룹 ID 확인
aws ec2 describe-security-groups --filters Name=group-name,Values=*nodegroup* --query "SecurityGroups[*].[GroupId]" --output text
NGSGID=$(aws ec2 describe-security-groups --filters Name=group-name,Values=*nodegroup* --query "SecurityGroups[*].[GroupId]" --output text)
echo $NGSGID

# 노드 보안그룹에 eksctl-host 에서 노드(파드)에 접속 가능하게 룰(Rule) 추가 설정
aws ec2 authorize-security-group-ingress --group-id $NGSGID --protocol '-1' --cidr 192.168.1.100/32

# eksctl-host 에서 노드의IP나 coredns 파드IP로 ping 테스트
ping -c 2 $N1
ping -c 2 $N2

# 워커 노드 SSH 접속
ssh -i ~/.ssh/id_rsa ec2-user@$N1 hostname
ssh -i ~/.ssh/id_rsa ec2-user@$N2 hostname
ssh -i ~/.ssh/id_rsa ec2-user@$N1 
exit
ssh -i ~/.ssh/id_rsa ec2-user@$N2
exit


# AWS VPC CNI 사용 확인
kubectl -n kube-system get ds aws-node
kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

# 파드 IP 확인
kubectl get pod -n kube-system -o wide
kubectl get pod -n kube-system -l k8s-app=kube-dns -owide

**ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo ip -c addr
ssh -i ~/.ssh/id_rsa ec2-user@$N2 sudo ip -c addr
ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo ip -c route
ssh -i ~/.ssh/id_rsa ec2-user@$N2 sudo ip -c route**
ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo iptables -t nat -S
ssh -i ~/.ssh/id_rsa ec2-user@$N2 sudo iptables -t nat -S

5. Node Network 확인

kube-system 네임스페이스의 파드 정보를 확인해보자.

(pkos-admin@myeks:kube-system) [root@myeks-host ~]# k get po -owide
NAME                      READY   STATUS    RESTARTS   AGE   IP              NODE                                               NOMINATED NODE   READINESS GATES
aws-node-9m7ls            1/1     Running   0          32m   192.168.2.114   ip-192-168-2-114.ap-northeast-2.compute.internal   <none>           <none>
aws-node-b52g5            1/1     Running   0          32m   192.168.1.48    ip-192-168-1-48.ap-northeast-2.compute.internal    <none>           <none>
coredns-dc4979556-mqkmj   1/1     Running   0          39m   192.168.2.12    ip-192-168-2-114.ap-northeast-2.compute.internal   <none>           <none>
coredns-dc4979556-vlsgm   1/1     Running   0          39m   192.168.2.169   ip-192-168-2-114.ap-northeast-2.compute.internal   <none>           <none>
kube-proxy-4q9nn          1/1     Running   0          32m   192.168.1.48    ip-192-168-1-48.ap-northeast-2.compute.internal    <none>           <none>
kube-proxy-wqnmx          1/1     Running   0          32m   192.168.2.114   ip-192-168-2-114.ap-northeast-2.compute.internal   <none>           <none>

coredns 파드의 IP정보와 Node Network를 비교해보자.

(pkos-admin@myeks:kube-system) [root@myeks-host ~]# ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo 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:5d:a5:96:5d:ba brd ff:ff:ff:ff:ff:ff
   inet 192.168.2.114/24 brd 192.168.2.255 scope global dynamic eth0
      valid_lft 3282sec preferred_lft 3282sec
   inet6 fe80::85d:a5ff:fe96:5dba/64 scope link
      valid_lft forever preferred_lft forever
3: eni5aca9a78465@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default
   link/ether c2:88:f2:a1:a0:74 brd ff:ff:ff:ff:ff:ff link-netns cni-3000c965-2900-fb2f-01b0-0919d6b6422a
   inet6 fe80::c088:f2ff:fea1:a074/64 scope link
      valid_lft forever preferred_lft forever
4: eniff552feb360@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default
   link/ether 8a:e3:02:57:da:ec brd ff:ff:ff:ff:ff:ff link-netns cni-ad19e28a-b8c4-4aba-0be6-433fd808386e
   inet6 fe80::88e3:2ff:fe57:daec/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:58:63:f6:17:04 brd ff:ff:ff:ff:ff:ff
   inet 192.168.2.244/24 brd 192.168.2.255 scope global eth1
      valid_lft forever preferred_lft forever
   inet6 fe80::858:63ff:fef6:1704/64 scope link
      valid_lft forever preferred_lft forever
      
(pkos-admin@myeks:kube-system) [root@myeks-host ~]# ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo ip -c 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.114
192.168.2.12 dev eni5aca9a78465 scope link
192.168.2.169 dev eniff552feb360 scope link

192.168.2.12 --> eni5aca9a78465 --> eni5aca9a78465@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default 이렇게 Network가 구성되어 있다. 결국 pod가 배포된 Node의 네트워크에 세팅이 되는 것이다.

6. EKS owned ENI 확인

조금 복잡한 네트워크 구성을 알아보자. 아래 그림은 이해하기 쉬운데, 실제로 어떻게 연결이 되는 지 찾아보면 생각보다 조금 어렵다.

# kubelet, kube-proxy 통신 Peer Address는 어딘인가요?
ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo ss -tnp
ssh -i ~/.ssh/id_rsa ec2-user@$N2 sudo ss -tnp

# [터미널] aws-node 데몬셋 파드 1곳에 bash 실행해두기 
kubectl exec daemonsets/aws-node -it -n kube-system -c aws-node -- bash

# exec 실행으로 추가된 연결 정보의 Peer Address는 어딘인가요? >> AWS 네트워크 인터페이스 ENI에서 해당 IP 정보 확인
ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo ss -tnp
ssh -i ~/.ssh/id_rsa ec2-user@$N2 sudo ss -tnp

먼저, Node1에서 tcp 연결 소켓정보를 보자.

(pkos-admin@myeks:kube-system) [root@myeks-host ~]# ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo ss -tnp
State Recv-Q Send-Q Local Address:Port   Peer Address:Port Process
ESTAB 0      56     192.168.2.114:22    192.168.1.100:56702 users:(("sshd",pid=25066,fd=3),("sshd",pid=25034,fd=3))
ESTAB 0      0      192.168.2.114:37786    10.100.0.1:443   users:(("aws-k8s-agent",pid=3345,fd=7))
ESTAB 0      0      192.168.2.114:50408  52.95.194.65:443   users:(("ssm-agent-worke",pid=2440,fd=10))
ESTAB 0      0      192.168.2.114:54818  52.95.195.99:443   users:(("ssm-agent-worke",pid=2440,fd=16))
ESTAB 0      0      192.168.2.114:46438   3.39.131.70:443   users:(("kube-proxy",pid=3090,fd=11))
ESTAB 0      0      192.168.2.114:46522  3.37.255.209:443   users:(("kubelet",pid=2841,fd=16))

kube-proxy와 kubelet이 호출하는 "3.39.131.70, 3.37.255.209" 이 IP는 무엇일까?

(pkos-admin@myeks:kube-system) [root@myeks-host ~]# aws eks describe-cluster --name $CLUSTER_NAME | jq -r .cluster.endpoint
https://4C77A71F46454BE30ED29E2D34397A5B.yl4.ap-northeast-2.eks.amazonaws.com
(pkos-admin@myeks:kube-system) [root@myeks-host ~]# dig +short  4C77A71F46454BE30ED29E2D34397A5B.yl4.ap-northeast-2.eks.amazonaws.com
3.39.131.70
3.37.255.209

바로 EKS 클러스터의 endpoint IP이다.

그럼 다시 반대로, API서버가 호출하는 곳을 찾아보자.

# kubelet --> API서버 --> EKS owned ENI 호출
$ kubectl exec daemonsets/aws-node -it -n kube-system -c aws-node -- bash

# tcp 소켓 확인
(pkos-admin@myeks:kube-system) [root@myeks-host ~]# ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo ss -tnp
State Recv-Q Send-Q          Local Address:Port           Peer Address:Port Process
ESTAB 0      0               192.168.2.114:59874          52.95.194.65:443   users:(("ssm-agent-worke",pid=2440,fd=10))
ESTAB 0      0               192.168.2.114:37786            10.100.0.1:443   users:(("aws-k8s-agent",pid=3345,fd=7))
ESTAB 0      0               192.168.2.114:54818          52.95.195.99:443   users:(("ssm-agent-worke",pid=2440,fd=16))
ESTAB 0      0               192.168.2.114:46438           3.39.131.70:443   users:(("kube-proxy",pid=3090,fd=11))
ESTAB 0      56              192.168.2.114:22            192.168.1.100:46852 users:(("sshd",pid=25534,fd=3),("sshd",pid=25502,fd=3))
ESTAB 0      0                   127.0.0.1:58026             127.0.0.1:42247 users:(("kubelet",pid=2841,fd=23))
ESTAB 0      0               192.168.2.114:46522          3.37.255.209:443   users:(("kubelet",pid=2841,fd=16))
ESTAB 0      0                   127.0.0.1:42247             127.0.0.1:58026 users:(("containerd",pid=2728,fd=44))
ESTAB 0      0      [::ffff:192.168.2.114]:10250 [::ffff:192.168.2.53]:46880 users:(("kubelet",pid=2841,fd=7))

192.168.2.53 이것은 무엇일까?

VPC는 내것인데, eni의 소유자는 다른놈이다. 바로, API서버! 이제 위에 그림이 설명이된다.

Wrap up

이번 포스팅에서는 EKS설치와 기초적인 스펙에 대해 알아보았다. managed k8s는 controle plane은 CSP에서, data plane은 고객이 관리하는 형태이다. AKS에 비해 뭔가 노출되는 정보도 많고, 구조가 더 복잡한 것 같다. 사용자 관점에서 더 깊게 알 수 있는 건 좋은 것 같긴한데, 그만큼 신경써야할 부분도 많아지는 느낌이기도 하다.
무튼, 스터디를 통해서 네트워크쪽을 더 공부하다 보면, 배워가는게 정말 많을 것 같다! 이번 스터디도 엄청나게 기대 된다!

profile
Shout out to Kubernetes⎈

0개의 댓글