ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [eks 스터디 1주차] Introduction - EKS 실습 환경 배포
    AWS 2023. 4. 23. 22:46

     

    이번 포스팅에서는 AWS의 EKS(Elastic Kubernetes Service)를 구축해보려고 한다. 잘 봐주셨음 좋겠습니다 

     

    Amazon EKS 소개  링크

    • Amazon Elastic Kubernetes Service는 자체 Kubernetes 컨트롤 플레인 또는 노드를 설치, 운영 및 유지 관리할 필요 없이 Kubernetes 실행에 사용할 수 있는 관리형 서비스
    • 여러 AWS 가용 영역에 걸쳐 Kubernetes 컨트롤 플레인을 실행하고 크기를 조정하여 높은 가용성을 보장
    • 컨트롤 플레인은 제어 영역 인스턴스의 크기를 자동으로 조정하고, 비정상 제어 영역 인스턴스를 감지하고 교체하며, 자동화된 버전 업데이트 및 패치를 제공
    • 여러 AWS 서비스와 통합 : 컨테이너 이미지 저장소 Amazon ECR, 로드 분산을 위한 ELB, 인증 IAM, 격리를 위한 Amazon VPC
    • 오픈 소스 Kubernetes 소프트웨어의 최신 버전을 실행하므로 Kubernetes 커뮤니티에서 모든 기존 플러그 인과 도구를 사용할 수 있습니다. 필요한 코드를 수정하지 않고 표준 Kubernetes 애플리케이션을 Amazon EKS로 쉽게 마이그레이션할 수 있습니다.
    • 지원 버전 : 보통 4개의 마이너 버전 지원(현재 1.22~1.26), 평균 3개월마다 새 버전 제공, 각 버전은 12개월 정도 지원 - 링크
      • v1.24.2 → Major.Minor.Patch ⇒ Major(Breaking Changes) . Minor(New Features) . Patch(Bug fixes Security)

     

    직접 처음부터 EKS 배포해보기

    기본 인프라 배포

    구성 할 인프라 아키텍쳐(그림 참조)

    방법1. 링크 ← AWS CloudFormation 페이지로 연결되며, 콘솔로 파라미터 입력 후 스택 실행 

    파라미터 : 아래 빨간색 부분은 설정해주는어야 할 것, 그외 부분은 기본값 사용을 권장

    1. <<<<< EKSCTL MY EC2 >>>>>
      1. ClusterBaseName: EKS 클러스터의 기본 이름 (생성되는 리소스들의 주석에 접두어로 활용), EKS 클러스터 이름에 '_(밑줄)' 사용 불가!
      2. KeyName: EC2 접속에 사용하는 SSH 키페어 지정
      3. SgIngressSshCidr: eksctl 작업을 수행할 EC2 인스턴스를 접속할 수 있는 IP 주소 입력 (집 공인IP/32 입력)
      4. MyInstanceType: eksctl 작업을 수행할 EC2 인스턴스의 타입 (기본 t3.medium)
    2. <<<<< Region AZ >>>>> : 리전과 가용영역을 지정
    3. <<<<< VPC Subnet >>>>> : VPC, 서브넷 정보 지정

     

    방법2. aws 명령어로 배포하기 (한줄씩 복사해서 명령어 실행하자, 한번에 복사 하면 들여쓰기가 문자로 인식되어 안됨)

    # yaml 파일 다운로드
    curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/myeks-1week.yaml
    
    
    
    # 배포
    # aws cloudformation deploy --template-file ~/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 ~/myeks-1week.yaml \
         --stack-name myeks --parameter-overrides KeyName=sungro 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' --region ap-northeast-2 --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' --region ap-northeast-2 --output text)

    위에 내용을 배포하기 전에 먼저 사전에 aws 설치및 액세스키로 인증을 해야한다 해당 내용을 먼저 설명하겠다 아래에 작업을 완료 한 후에 위에 내용을 실행하자 

    - aws-cli 설치

    내 PC는 MAC이였고 명령어로 설치하려면 MAC에 awscli를 설치해야 됬다. 아래는 MAC에서 awscli설치하는 방법이다. 

    $ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
    
    $ unzip awscli-bundle.zip
    
    $ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
    
    $ sudo /usr/local/bin/python3.7 awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
    
    $ aws --version

     

    - aws IAM User 자격 증명 설정(ec2에서도해도되고 내 MAC에서 해도됨)

    # 자격 구성 설정 없이 확인
    aws ec2 describe-instances --region ap-northeast-2
    
    
    # IAM User 자격 구성 : 실습 편리를 위해 administrator 권한을 가진 IAM User 의 자격 증명 입력
    aws configure
    AWS Access Key ID [None]: sung...
    AWS Secret Access Key [None]: dfgbn...
    Default region name [None]: ap-northeast-2
    Default output format [None]: json
    
    
    # 자격 구성 적용 확인 : 노드 IP 확인
    aws ec2 describe-instances --region ap-northeast-2
    
    # IAM User 자격 구성이 잘되었는지 체크
    aws configure list

    - VPC확인 및 환경변수 지정

    # 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

     

     

     

    AWS EKS 배포 실습

    지금까지 위에 기본 인프라, 환경설정을 만들었고 이제 본격적으로 eks를 배포해보자

    - 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
    
    ...
    023-04-23 01:32:22 [▶]  setting current-context to admin@myeks.ap-northeast-2.eksctl.io
    2023-04-23 01:32:22 [✔]  saved kubeconfig as "/root/.kube/config"
    ...

     

    해당 작업이 완료되면 아래 순으로 확인해보자 

    아래 순서대로 AWS CloudFormation 확인해보기 → AWS EKS 확인해보기 → AWS EC2 확인해보기 → AWS EC2 ASG 확인해보기

     

     

     

     

    - eks 정보확인

    더보기
    # krew 플러그인 확인
    kubectl krew list
    kubectl ctx
    kubectl ns
    kubectl ns default
    
    # 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

    위에서 안되는 명령어는 아래와 같은데 왜 안되는 지 확인해보자. 

    - # eks API 접속 시도 curl -k -s $(aws eks describe-cluster --name $CLUSTER_NAME | jq -r .cluster.endpoint) --> 포비든뜸

    - # AWS ECR에서 컨테이너 이미지 가져오기 시도 --> 실패함,원인확인해보기

     

    **여기 eks 노드정보를 확인하면서 봐야될 포인트는 아래와 같다. 

    AWS eks의 태생적인 컨트롤 플레인 구조는 아래와 같다.

     

    그리고 현재 우리가 만든 eks 클러스터 컨트롤 플레인  접근 플로우는 아래와 같다.

    위에 구성을 아래 구성인 프라이빗으로 인입이 되게 변경해보자 

     

     

    노드 정보 상세  확인

    - 노드 SSH 접속

    더보기
    # 노드 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
    
    kubectl get node --label-columns=topology.kubernetes.io/zone
    
    kubectl get node --label-columns=topology.kubernetes.io/zone --selector=topology.kubernetes.io/zone=ap-northeast-2a
    
    kubectl get node --label-columns=topology.kubernetes.io/zone --selector=topology.kubernetes.io/zone=ap-northeast-2c
    
    N1=$(kubectl get node --label-columns=topology.kubernetes.io/zone --selector=topology.kubernetes.io/zone=ap-northeast-2a -o jsonpath={.items[0].status.addresses[0].address})
    
    N2=$(kubectl get node --label-columns=topology.kubernetes.io/zone --selector=topology.kubernetes.io/zone=ap-northeast-2c -o jsonpath={.items[0].status.addresses[0].address})
    
    echo $N1, $N2
    
    # 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

     

     

     

    - 노드 프로세스 정보 확인 

    더보기
    ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo systemctl status kubelet
    ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo pstree
    ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo ps afxuwww
    ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo ps axf |grep /usr/bin/containerd
    ssh -i ~/.ssh/id_rsa ec2-user@$N1 sudo ls /etc/kubernetes/manifests/
    
    ssh -i ~/.ssh/id_rsa ec2-user@$N2 sudo systemctl status kubelet
    ssh -i ~/.ssh/id_rsa ec2-user@$N2 sudo pstree
    ssh -i ~/.ssh/id_rsa ec2-user@$N2 sudo ps afxuwww
    ssh -i ~/.ssh/id_rsa ec2-user@$N2 sudo ps axf |grep /usr/bin/containerd
    ssh -i ~/.ssh/id_rsa ec2-user@$N2 sudo ls /etc/kubernetes/manifests/

     

     

    - 노드 스토리지 정보 확인

    더보기
    ssh -i ~/.ssh/id_rsa ec2-user@$N1 lsblk
    ssh -i ~/.ssh/id_rsa ec2-user@$N1 df -hT --type xfs
    
    ssh -i ~/.ssh/id_rsa ec2-user@$N2 lsblk
    ssh -i ~/.ssh/id_rsa ec2-user@$N2 df -hT --type xfs

     

     

    - 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

     

    **EKS owned ENI : 관리형 노드 그룹의 워커 노드는 내 소유지만, 연결된 ENI(NIC)의 인스턴스(관리형 노드)는 AWS 소유이다**

     

    보안  상세내용은 보안챕터에서 다룸

    EKS 보안 그룹 : 각 보안 그룹이 어떻게 적용되는지 생각해보자! ⇒ 크롬에서 규칙 확인이 잘 안될 경우, 사파리에서 확인 하자

    # 보안그룹 ID와 보안그룹 이름(Name아님을 주의!) 확인
    aws ec2 describe-security-groups --query 'SecurityGroups[*].[GroupId, GroupName]' --output text
    
    sg-08fb7735ecb810e51	eksctl-myeks-cluster-ControlPlaneSecurityGroup-1SDT1PGKXDVKG # 컨트롤플레인 접속 사용 시, Communication between the control plane and worker nodegroups
    
    sg-081a71090edaf3ca0	eksctl-myeks-cluster-ClusterSharedNodeSecurityGroup-146FE70CAM0TG # 관리노드 + 셀프노드 간에 서로 통신 시 허용 정책, Communication between all nodes in the cluster
    
    sg-0efe39249c676d721	eks-cluster-sg-myeks-104368993 # 컨트롤플레인 + 관리노드 + 셀프노드 모두 간에 서로 통신 시 허용 정책, , EKS created security group applied to ENI that is attached to EKS Control Plane master nodes, as well as any managed workloads.
    
    sg-03cf625dccddaf53f	eksctl-myeks-nodegroup-myeks-nodegroup-remoteAccess # 노드그룹에 SSH 접속 허용 정책
    
    sg-03d74ab2fe08e1c7d	myeks-EKSEC2SG-1SVMDAAJO9FFC # 작업용EC2 : eksctl-host Security Group
    
    
    # 보안그룹 확인
    aws ec2 describe-security-groups --group-ids sg-08fb7735ecb810e51 --output yaml | yh
    aws ec2 describe-security-groups --group-ids sg-081a71090edaf3ca0 --output yaml | yh
    aws ec2 describe-security-groups --group-ids sg-0efe39249c676d721 --output yaml | yh
    aws ec2 describe-security-groups --group-ids sg-03cf625dccddaf53f --output yaml | yh

     

    'AWS' 카테고리의 다른 글

    [eks 스터디 3주차] - EKS Storage & Node 관리  (0) 2023.05.12
    [eks 스터디 2주차] - EKS Networking  (0) 2023.05.06
Designed by Tistory.