Amazon EKS の kubeconfig を作成する - Amazon EKS

Amazon EKS の kubeconfig を作成する

このセクションでは、クラスター用の kubeconfig ファイルを作成し、また、既存のファイルを更新します。

このセクションでは、kubeconfig ファイルを作成または更新するための 2 つの手順について説明します。AWS CLI を使用して AWS CLI update-kubeconfig コマンドで自動的にすばやく kubeconfig ファイルを作成または更新することも、AWS CLI または aws-iam-authenticator を使用して手動で kubeconfig ファイルを作成することもできます。

Amazon EKS ではクラスターの認証に、AWS CLI のバージョン 1.16.156 以降で使用可能な aws eks get-token コマンドを使用するか、kubectlAWS IAM Authenticator for Kubernetes を使用します。システムに AWS CLI をインストール済みである場合は、AWS IAM Authenticator for Kubernetes はデフォルトで以下のコマンドで返されるものと同じ認証情報を使用します。

aws sts get-caller-identity

詳細については、『AWS CLI ユーザーガイド』の「AWS Command Line Interface の設定.」を参照してください。

kubeconfig ファイルを自動で作成する

kubeconfig ファイルを AWS CLI で作成するには

  1. バージョン 1.25.46 以降または 2.7.21 以降がインストールされていることを確認します。AWS CLI のインストールまたはアップグレードについては、AWS Command Line Interface ユーザーガイドの「AWS CLI のインストール 」を参照してください。

    注記

    システムの Python のバージョンは 2.7.9 以降であることが必要です。それ以外の場合は、AWS CLI で Amazon EKS を呼び出すと hostname doesn't match エラーが表示されます。

    AWS CLI のバージョンは、以下のコマンドを使用して確認できます。

    aws --version
    重要

    yumapt-get、または macOS の Homebrew は、AWS CLI より数バージョン遅れることがあります。最新バージョンを確認するには、「AWS Command Line Interface ユーザーガイド」の「AWS CLI のインストール」を参照してください。

  2. クラスター用の kubeconfig ファイルを作成もしくは更新します。example values を自分の値に置き換えます。

    • デフォルトでは、最終的な設定ファイルは、ホームディレクトリのデフォルト kubeconfig パス (.kube) に作成されるか、その場所で既存 config ファイルとマージされます。別のパスは --kubeconfig オプションを使用して指定できます。

    • kubectl コマンドを発行する場合、認証に使用する --role-arn オプションで IAM ロール ARN を指定できます。それ以外の場合は、デフォルトの AWS CLI または SDK の認証情報チェーンの中の IAM エンティティが使用されます。デフォルトの AWS CLI または SDK の ID を表示するには、 aws sts get-caller-identity コマンドを実行します。

    • 詳細については、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 または AWS IAM Authenticator for Kubernetes) のコマンドを実行して、config ファイルを ~/.kube ディレクトリに作成します。次の項目を含めるようにコマンドを変更することで、コマンドの 1 つを実行する前に次の項目を指定できます。

    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

    前提条件

    AWS IAM Authenticator for Kubernetes がデバイスにインストールされている必要があります。インストールするには、「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. クラスター設定を検索する場所を kubectl に知らせるために、ファイルパスを KUBECONFIG 環境変数に追加します。

    • 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