Amazon EKS
사용 설명서

Amazon EKS에 대한 kubeconfig 생성

이 단원에서는 클러스터에 대한 kubeconfig 파일을 생성(또는 기존 파일을 업데이트)합니다.

이 단원에서는 kubeconfig를 생성하거나 업데이트하는 두 가지 절차를 제공합니다. 첫 번째 절차와 같이 AWS CLI update-kubeconfig 명령을 사용하면 kubeconfig를 빠르게 만들거나 업데이트할 수 있고, 두 번째 절차를 사용하면 kubeconfig를 수동으로 만들 수 있습니다.

Amazon EKS는 AWS CLI 버전 1.16.156 이상 또는 Kubernetes용 AWS IAM Authenticator에서 사용 가능한 aws eks get-token 명령과 kubectl을 클러스터 인증에 사용합니다. 시스템에 AWS CLI를 설치한 경우에는 기본적으로 Kubernetes용 AWS IAM Authenticator에서 다음 명령을 통해 반환되는 것과 동일한 자격 증명을 사용합니다.

aws sts get-caller-identity

자세한 내용은 AWS Command Line Interface 사용 설명서AWS CLI 구성을 참조하십시오.

AWS CLI로 kubeconfig를 생성하려면

  1. 1.16.156 버전 이상의 AWS CLI가 설치되어 있어야 합니다. AWS CLI를 설치 또는 업그레이드하려면 AWS Command Line Interface 사용 설명서AWS 명령줄 인터페이스 설치를 참조하십시오.

    참고

    시스템의 Python 버전이 2.7.9 이상이어야 합니다. 그렇지 않으면 Amazon EKS에 대한 AWS CLI 호출과 함께 hostname doesn't match 오류가 표시됩니다. 자세한 내용은 Python 요청 FAQ의 What are "hostname doesn't match" errors?를 참조하십시오.

    AWS CLI 버전은 다음 명령을 통해 확인할 수 있습니다.

    aws --version

    중요

    yum, apt-get 또는 Homebrew 등의 MacOS용 패키지 관리자는 흔히 AWS CLI의 여러 버전 뒤에 있습니다. 최신 버전이 설치되어 있는지 확인하려면 AWS Command Line Interface 사용 설명서AWS 명령줄 인터페이스 설치를 참조하십시오.

  2. AWS CLI update-kubeconfig 명령을 사용하여 클러스터에 대한 kubeconfig를 생성하거나 업데이트합니다.

    • 기본적으로, 구성 파일은 홈 디렉터리의 기본 kubeconfig 경로(.kube/config)에 생성되거나 해당 위치의 기존 kubeconfig와 병합됩니다. --kubeconfig 옵션을 사용하여 다른 경로를 지정할 수 있습니다.

    • --role-arn 옵션으로 IAM 역할 ARN을 지정하면 kubectl 명령을 실행할 때 인증에 사용할 수 있습니다. 그렇지 않으면 기본 AWS CLI 또는 SDK 자격 증명 체인의 IAM 엔터티가 사용됩니다. aws sts get-caller-identity 명령을 실행하여 기본 AWS CLI 또는 SDK ID를 확인할 수 있습니다.

    • 자세한 내용은 aws eks update-kubeconfig help 명령의 도움말 페이지 또는 AWS CLI Command Referenceupdate-kubeconfig를 참조하십시오.

    aws eks --region region update-kubeconfig --name cluster_name
  3. 구성을 테스트합니다.

    kubectl get svc

    참고

    "aws-iam-authenticator": executable file not found in $PATH 오류가 표시되는 경우 Amazon EKS에 대해 kubectl이 구성되지 않았습니다. 자세한 내용은 aws-iam-authenticator 설치 단원을 참조하십시오.

    기타 권한 부여 또는 리소스 유형 오류가 표시되는 경우 문제 해결 단원의 권한이 없거나 액세스가 거부됨(kubectl)을 참조하십시오.

    결과:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

kubeconfig 파일을 수동으로 생성하려면

  1. ~/.kube 디렉터리가 아직 없으면 생성합니다.

    mkdir -p ~/.kube
  2. 선호하는 클라이언트 토큰 방법에 따라, 자주 사용하는 텍스트 편집기를 열고 아래의 kubeconfig 코드 블록을 복사하여 붙여 넣습니다.

    • AWS CLI aws eks get-token 명령을 사용하려면(AWS CLI 버전 1.16.156 이상 필요):

      apiVersion: v1 clusters: - cluster: server: <endpoint-url> certificate-authority-data: <base64-encoded-ca-cert> name: kubernetes contexts: - context: cluster: kubernetes user: aws name: aws current-context: aws kind: Config preferences: {} users: - name: aws user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: aws args: - "eks" - "get-token" - "--cluster-name" - "<cluster-name>" # - "--role" # - "<role-arn>" # env: # - name: AWS_PROFILE # value: "<aws-profile>"
    • Kubernetes용 AWS IAM Authenticator를 사용하려면:

      apiVersion: v1 clusters: - cluster: server: <endpoint-url> certificate-authority-data: <base64-encoded-ca-cert> name: kubernetes contexts: - context: cluster: kubernetes user: aws name: aws current-context: aws kind: Config preferences: {} users: - name: aws user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: aws-iam-authenticator args: - "token" - "-i" - "<cluster-name>" # - "-r" # - "<role-arn>" # env: # - name: AWS_PROFILE # value: "<aws-profile>"
  3. <endpoint-url>을 클러스터에 대해 생성한 엔드포인트 URL로 교체합니다.

  4. <base64-encoded-ca-cert>을 클러스터에 대해 생성한 certificateAuthority.data로 교체합니다.

  5. <cluster-name>을 클러스터 사용자 이름으로 바꿉니다.

  6. (선택 사항) 기본 AWS 자격 증명 공급자 체인 대신 클러스터 작업을 수행하는 IAM 역할을 맡으려면 -r 또는 --role<role-arn> 행의 주석 처리를 해제하고 IAM 역할 ARN을 원하는 사용자에게 사용하도록 바꿉니다.

  7. (선택 사항) 기본 AWS 자격 증명 공급자 체인 대신 항상 특정 이름의 AWS 자격 증명 프로필을 사용하려면 env 줄의 주석 처리를 해제하고 <aws-profile>을 사용할 프로필 이름으로 교체합니다.

  8. 파일 이름에 클러스터 이름을 넣어 파일을 기본 kubectl 폴더에 저장합니다. 예를 들어 클러스터 이름이 devel인 경우, 파일을 ~/.kube/config-devel에 저장합니다.

  9. KUBECONFIG 환경 변수에 파일 경로를 추가하면 kubectl이 클러스터 구성을 찾아야 하는 곳을 알게 됩니다.

    export KUBECONFIG=$KUBECONFIG:~/.kube/config-devel
  10. (선택 사항) 셸 초기화 파일에 구성을 추가하면 셸을 열 때 구성됩니다.

    • MacOS의 Bash 셸의 경우:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-devel' >> ~/.bash_profile
    • Linux의 Bash 셸의 경우:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-devel' >> ~/.bashrc
  11. 구성을 테스트합니다.

    kubectl get svc

    참고

    "aws-iam-authenticator": executable file not found in $PATH 오류가 표시되는 경우 Amazon EKS에 대해 kubectl이 구성되지 않았습니다. 자세한 내용은 aws-iam-authenticator 설치 단원을 참조하십시오.

    기타 권한 부여 또는 리소스 유형 오류가 표시되는 경우 문제 해결 단원의 권한이 없거나 액세스가 거부됨(kubectl)을 참조하십시오.

    결과:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m