ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Private Amazon EKS kubectl 연결하기.
    Cloud/AWS 2024. 11. 7. 09:22

    Amazon Web Services(AWS)는 확장 가능하고 신뢰할 수 있는 클라우드 컴퓨팅 플랫폼으로,

    서버, 스토리지, 데이터베이스 등 IT 인프라를 인터넷을 통해 손쉽게 제공받을 수 있게 해주는 강력한 서비스입니다.

     

    Certified Practitioner for Platform Operations(CPPO) 진행하면서 해본 것을 복귀하는 내용입니다.

     

     

     

     

     

    ▶ 작업 내용

    1. Bastion 접속

    2. Bastion에 kubectl install

    3. AWS console를 통해서 'IAM 사용자(User)' 생성

    4. AWS console를 통해서 'IAM User Access Key' 생성

    5. Bastion에 aws confing 설정

    6. Amazon EKS Cluster Access 설정

    7. Amazon EKS Cluster 보안 그룹 PORT 443 허용

     

     

     

    ▶ 설정

    > Bastion 접속

    Amazon EKS Cluster를 private subnet에서 생성했기 때문에 local PC에서는 Amazon EKS Cluster에 연결할 수 없습니다.

    물론 internet-gateway, 전용 선 등의 조치를 한다면 가능합니다!

    저의 경우는 public subnet에서 Bastion 서버를 구성하여 중간 문 역할을 하도록 했습니다!
    (실제 site에서는 Bastion 서버를 구성하는 것을 AWS에서 권장하지 않는다고 합니다! 전용라인 추천!!)

     

     

    > Bastion 서버의 kubectl install

    kubectl은 Kubernetes 클러스터와 상호작용하기 위한 커맨드라인 도구입니다!

    이를 통해서 리소스, 작업, 상태 모니터링을 할 수 있습니다.

     

    (AWS 공식 가이드: AWS kubctl 클릭! )

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.31.0/2024-09-12/bin/linux/amd64/kubectl
    
    chmod +x ./kubectl
    
    mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH

     

     

    > AWS console를 통해서 'IAM 사용자(User)' 생성

     

     

     

    > AWS console를 통해서 'IAM User Access Key' 생성

     

     

    !! '액세스 키''비밀 엑세스 키'는 잘 파일로 보관하셔야 합니다 !!

     

     

     

    > Bastion 서버에서 aws configure

    'aws configure' 명령어는 AWS CLI를 통해 AWS 자격증명과 설정을 빠르게 구성할 수 있도록 도와주는 명령어 입니다.

    [root@ip-10-20-1-138 ~] aws configure
    AWS Access Key ID [None]: AKIA46ZDFFALC2H52TPA
    AWS Secret Access Key [None]: 비밀 엑세스 키
    Default region name [None]: ap-northeast-2
    Default output format [None]: json

     

     

    'aws sts get-caller-identity' 명령어를 통해서 현재 AWS CLI 세션에 사용 중인 IAM 엔터니(Identity)의 정보를 확인하는데 사용!

    해당 명령어는 인증된 사용자, 역할 또는 서비스 계정의 정보가 무엇인지 조회하여 AWS 계정 내에서 어떤 자격으로 요청이 이루어지고 있는지 확인하는데 유용합니다!

    [root@ip-10-20-1-138 ~] aws sts get-caller-identity
    {
        "UserId": "AIDA46ZDFFALHFQZDOQHF",
        "Account": "890742581270",
        "Arn": "arn:aws:iam::890742581270:user/usr-kior"
    }

     

     

    'aws eks update-kubeconfig' 명령어는 AWS EKS 클러스터에 대한 kubeconfig 파일을 업데이트하여, 로컬에서 kubectl를 사용해 클러스터에 접근할 수 있도록 설정해주는 명령어 입니다.

    [root@ip-10-20-1-138 ~] aws eks update-kubeconfig --region ap-northeast-2 --name KIOR-EKSC-02
    Added new context arn:aws:eks:ap-northeast-2:890742581270:cluster/KIOR-EKSC-02 to /root/.kube/config

     

     

     

    > Amazon EKS Cluster 엑세스 설정하기

    액세스를 설정하지 않으면 kubectl에서 클러스터에 접근할 수 없습니다!

    기본적으로 EKS 클러스터를 생성할 때, 클러스터의 액세스 제어는 IAM 역할이나 사용자 권한을 기반으로 합니다.

     

     

     

    > Amazon EKS Cluster 보안 그룹 PORT 443 허용

    443 포트를 허용하지 않으면 아래와 같은 메세지를 확인할 수 있습니다.

    [root@ip-10-20-1-138 ~] kubectl get nodes
    E1104 10:43:26.596988  442723 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"https://A24A3B26E09242D245703B7B4583E874.sk1.ap-northeast-2.eks.amazonaws.com/api?timeout=32s\": dial tcp 10.30.1.51:443: i/o timeout"
    ^C
    [root@ip-10-20-1-138 ~] kubectl get pods -A
    E1104 10:44:13.268264  442736 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"https://A24A3B26E09242D245703B7B4583E874.sk1.ap-northeast-2.eks.amazonaws.com/api?timeout=32s\": dial tcp 10.30.1.51:443: i/o timeout"

     

     

    443에 대해서 Cluster가 인바운드를 허용하지 않았기 때문입니다.

    [root@ip-10-20-1-138 ~] kubectl get nodes
    NAME                                             STATUS   ROLES    AGE     VERSION
    ip-10-30-1-197.ap-northeast-2.compute.internal   Ready    <none>   2d21h   v1.31.0-eks-a737599
    ip-10-30-2-149.ap-northeast-2.compute.internal   Ready    <none>   2d21h   v1.31.0-eks-a737599
    
    
    
    [root@ip-10-20-1-138 ~] kubectl get pods -A
    NAMESPACE     NAME                           READY   STATUS    RESTARTS   AGE
    kube-system   aws-node-72tbf                 2/2     Running   0          2d21h
    kube-system   aws-node-l2fsd                 2/2     Running   0          2d21h
    kube-system   coredns-9b5bc9468-4ct5d        1/1     Running   0          5d17h
    kube-system   coredns-9b5bc9468-bmd74        1/1     Running   0          5d17h
    kube-system   eks-pod-identity-agent-bx6kg   1/1     Running   0          2d21h
    kube-system   eks-pod-identity-agent-k8mhj   1/1     Running   0          2d21h
    kube-system   kube-proxy-8f9f8               1/1     Running   0          2d21h
    kube-system   kube-proxy-zgtk2               1/1     Running   0          2d21h

     

     

     

     

     

    ▶ Draw.io

     

     

     

     

     

    ▶ 결론

     

    기본적으로 kubectl이 되어야 Kubernetes를 할 수 있으니깐 구축이 필수입니다!

     

Designed by Tistory.