Amazon EKS용 kubeconfig 생성 - Amazon EKS

Amazon EKS용 kubeconfig 생성

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

이 섹션에서는 kubeconfig 파일을 생성하거나 업데이트하는 두 가지 절차를 제공합니다. AWS CLI에서 AWS CLI update-kubeconfig 명령을 사용하여 자동으로 kubeconfig 파일을 빠르게 생성 또는 업데이트하거나, AWS CLI 또는 aws-iam-authenticator를 사용하여 수동으로 kubeconfig 파일을 생성할 수 있습니다.

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

aws sts get-caller-identity

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

자동으로 kubeconfig 파일 생성

AWS CLI로 kubeconfig를 생성하려면

  1. 버전 1.25.46 또는 2.7.21 이상이 설치되어 있는지 확인합니다. AWS CLI를 설치 또는 업그레이드하려면 AWS CLI 사용 설명서에서 AWS Command Line Interface 설치를 참조하세요.

    참고

    시스템의 Python 버전이 2.7.9 이상이어야 합니다. 그렇지 않은 경우 Amazon EKS에 대한 AWS CLI 호출과 함께 hostname doesn't match 오류가 표시됩니다.

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

    aws --version
    중요

    yum, apt-get 또는 Homebrew 등의 MacOS용 패키지 관리자는 흔히 AWS CLI의 여러 버전 뒤에 있습니다. 최신 버전을 적용하려면 AWS Command Line Interface 사용 설명서에서 AWS CLI 설치 섹션을 참조하세요.

  2. 클러스터에 대해 kubeconfig 파일을 생성 또는 업데이트합니다. example values을(를) 사용자의 값으로 교체합니다.

    • 기본적으로 구성 파일은 홈 디렉터리의 기본 kubeconfig 경로(.kube)에 생성되거나 해당 위치의 기존 config 파일과 병합됩니다. --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 명령 참조에서 update-kubeconfig를 참조하세요.

    참고

    다음 명령을 실행하려면 지정한 클러스터에서 eks:DescribeCluster API 작업을 사용할 수 있는 권한이 있어야 합니다. 자세한 정보는 Amazon EKS 자격 증명 기반 정책 예제 섹션을 참조하세요.

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

    kubectl get svc
    참고

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

    출력 예는 다음과 같습니다.

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

수동으로 kubeconfig 파일 생성

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

  1. example values을 고유한 값으로 바꾼 다음 수정된 명령을 실행하여 몇 가지 변수에 대한 값을 설정합니다.

    export region_code=region-code export cluster_name=my-cluster export account_id=111122223333
  2. 클러스터의 엔드포인트를 검색하고 값을 변수에 저장합니다.

    cluster_endpoint=$(aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query "cluster.endpoint" \ --output text)
  3. 클러스터와 통신하는 데 필요한 Base64 인코딩 인증서 데이터를 검색하고 값을 변수에 저장합니다.

    certificate_data=$(aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query "cluster.certificateAuthority.data" \ --output text)
  4. 기본 ~/.kube 디렉터리가 아직 없으면 생성합니다.

    mkdir -p ~/.kube
  5. 기본 클라이언트 토큰 메서드(AWS CLI 또는 Kubernetes용 AWS IAM Authenticator)에 대한 명령을 실행하고 ~/.kube 디렉터리에서 config 파일을 생성합니다. 다음을 포함하도록 명령을 수정하여 명령 중 하나를 실행하기 전에 다음을 지정할 수 있습니다.

    AWS CLI

    사전 조건

    AWS CLI의 버전 1.16.156 이상이 디바이스에 설치되어 있어야 합니다.

    #!/bin/bash read -r -d '' KUBECONFIG <<EOF apiVersion: v1 clusters: - cluster: certificate-authority-data: $certificate_data server: $cluster_endpoint name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name contexts: - context: cluster: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name current-context: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name kind: Config preferences: {} users: - name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: aws args: - --region - $region_code - eks - get-token - --cluster-name - $cluster_name # - "- --role-arn" # - "arn:aws:iam::$account_id:role/my-role" # env: # - name: "AWS_PROFILE" # value: "aws-profile" EOF echo "${KUBECONFIG}" > ~/.kube/config
    AWS IAM Authenticator for Kubernetes

    사전 조건

    Kubernetes용 AWS IAM Authenticator가 디바이스에 설치되어 있어야 합니다. 설치는 aws-iam-authenticator 설치 섹션을 참조하세요.

    #!/bin/bash read -r -d '' KUBECONFIG <<EOF apiVersion: v1 clusters: - cluster: server: $cluster_endpoint certificate-authority-data: $certificate_data name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name contexts: - context: cluster: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name current-context: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name kind: Config preferences: {} users: - name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: aws-iam-authenticator args: - "token" - "-i" - "$cluster_name" # - "- --role-arn" # - "arn:aws:iam::$account_id:role/my-role" # env: # - name: "AWS_PROFILE" # value: "aws-profile" EOF echo "${KUBECONFIG}" > ~/.kube/config
  6. KUBECONFIG 환경 변수에 파일 경로를 추가하므로 kubectl은 클러스터 구성을 찾아야 하는 위치를 알 수 있습니다.

    • MacOS 또는 Linux의 Bash 셸의 경우:

      export KUBECONFIG=$KUBECONFIG:~/.kube/config
    • Windows의 PowerShell의 경우:

      $ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.kube\config"
  7. (선택 사항) 셸 초기화 파일에 구성을 추가하면 셸을 열 때 구성됩니다.

    • MacOS의 Bash 셸의 경우:

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

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config' >> ~/.bashrc
    • Windows의 PowerShell의 경우:

      [System.Environment]::SetEnvironmentVariable('KUBECONFIG', $ENV:KUBECONFIG, 'Machine')
  8. 구성을 테스트합니다.

    kubectl get svc
    참고

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

    출력 예는 다음과 같습니다.

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