建立適用於 kubeconfig 的 Amazon EKS - Amazon EKS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立適用於 kubeconfig 的 Amazon EKS

您將在本節為您的叢集建立 kubeconfig 檔案 (或更新現有的檔案)。

本節提供兩項程序以建立或更新 kubeconfig。您可以透過 AWS CLI 使用 update-kubeconfig AWS CLI 命令來快速地自動建立或更新 kubeconfig,也可以使用 AWS CLI 或 aws-iam-authenticator. 手動建立 kubeconfig。

Amazon EKS 使用 aws eks get-token 命令 (在 1.16.156 的 AWS CLI 版本或更新版本中提供) 或適用於 Kubernetes 的 AWS IAM 驗證器搭配 kubectl 來進行叢集驗證。如果您已在系統上安裝 AWS CLI,則依預設適用於 Kubernetes 的 AWS IAM Authenticator 將使用以下列命令傳回的相同登入資料:

aws sts get-caller-identity

如需詳細資訊,請參閱 AWS CLI中的設定 AWS Command Line Interface 使用者指南.

自動建立 kubeconfig

使用 kubeconfig 建立 AWS CLI 檔案

  1. 請確定您已安裝 1.16.156 的版本或 AWS CLI 的更新版本。若要安裝或更新 AWS CLI,請參閱 https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html 中的AWS Command Line Interface 使用者指南安裝 AWS 命令列界面.

    注意

    您的系統 Python 版本必須為 2.7.9 或更新版本。否則,對 hostname doesn't match 發出 AWS CLI 呼叫時您會收到 Amazon EKS. 錯誤。

    您可使用以下命令檢查您的 AWS CLI 版本:

    aws --version
    重要

    諸如 yumapt-get 或適用於 的 Homebrew 等套件管理工具macOS通常落後 的數個版本AWS CLI。為確保您的版本為最新版本,請前往 中的安裝 AWS 命令列界面AWS Command Line Interface 使用者指南

  2. 使用 AWS CLI update-kubeconfig 命令為您的叢集建立或更新 kubeconfig。

    • 根據預設,產生的組態檔案會在您的主目錄預設的 kubeconfig 路徑下 (.kube/config) 建立,或與位在該處的現有 kubeconfig 合併。您可以使用 --kubeconfig 選項指定其他路徑。

    • 當您發出 IAM --role-arn 命令時,您可以使用 kubectl 選項來指定 角色 ARN 進行身份驗證。否則,系統將使用位於預設 IAM 或開發套件登入資料鏈結的 AWS CLI 實體。您可以執行 AWS CLI aws sts get-caller-identity 命令來檢視您的預設 或軟體開發套件身分。

    • 如需詳細資訊,請查看 協助頁面與 aws eks update-kubeconfig help 命令,或在 中查看 update-kubeconfigAWS CLI Command Reference

    注意

    若要執行下列命令,您必須具有使用指定叢集的 eks:DescribeCluster API 動作的權限。如需詳細資訊,請參閱 Amazon EKS 身分型政策範例.

    aws eks --region <region-code> update-kubeconfig --name <cluster_name>
  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. 若此檔案尚不存在,則建立預設 ~/.kube 目錄。

    mkdir -p ~/.kube
  2. 開啟您偏好的文字編輯器,並將以下其中一個 kubeconfig 程式碼區塊 (根據您慣用的用戶端字符方法) 複製到其中。

    • 若要使用 AWS CLI aws eks get-token 命令 (需要版本 1.16.156 或更新版本 AWS CLI):

      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 驗證器:

      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. (選用) 如果要擔任 IAM 角色以執行叢集操作 (而非預設 AWS 登入資料提供者鏈結),請取消 -r--role<role-arn> 行的註解,並取代 IAM 角色 ARN 以與使用者使用。

  7. (選用) 若要一律使用特定的具名AWS登入資料描述檔 (而不是預設AWS登入資料供應者鏈結),請取消評論 env<aws-profile>,並換成要使用的描述檔名稱。

  8. 將檔案儲存至預設kubectl資料夾,檔案名稱中使用您的叢集名稱。例如,如果您的叢集名稱為 <devel>,請將檔案儲存至 ~/.kube/config-<devel>

  9. 將該檔案路徑新增到 KUBECONFIG 環境變數,讓 kubectl 知道應在何處尋找您的叢集組態。

    • 對於 macOS 或 Linux 上的 Bash shell:

      export KUBECONFIG=$KUBECONFIG:~/.kube/config-<devel>
    • Windows PowerShell 上的 :

      $ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.kube\config-<devel>"
  10. (選用) 將該組態新增到 shell 初始化檔案,因此當您開啟 shell 時,該組態已設定完畢。

    • 對於 上的 Bash macOSshell:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-<devel>' >> ~/.bash_profile
    • 對於在 Linux 上的 Bash shell:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-<devel>' >> ~/.bashrc
    • Windows PowerShell 上的 :

      [System.Environment]::SetEnvironmentVariable('KUBECONFIG', $ENV:KUBECONFIG, 'Machine')
  11. 測試組態。

    kubectl get svc
    注意
    注意

    如果您收到任何授權或資源類型錯誤,請參閱故障診斷一節中的 未經授權或存取遭拒 (kubectl)

    輸出:

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