Amazon EKS クラスターの kubeconfig ファイルを作成または更新する - Amazon EKS

Amazon EKS クラスターの kubeconfig ファイルを作成または更新する

このトピックでは、クラスター用の kubeconfig ファイルを作成します (または既存のファイルを更新します)。

kubectl コマンドラインツールは、kubeconfig ファイルの設定情報を使用して、クラスターの API サーバーと通信します。詳細については、Kubernetes ドキュメントの「kubeconfig ファイルを使用したクラスターアクセスの整理」を参照してください。このトピックでは、Amazon EKS クラスターの kubeconfig ファイルを作成または更新する 2 つの手順を示します。

  • AWS CLI update-kubeconfig コマンドを使用して自動的に作成する。

  • AWS CLI または aws-iam-authenticator を使用して手動で作成する。

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
前提条件
  • 既存の Amazon EKS クラスター。デプロイするには、「Amazon EKS の使用開始」を参照してください。

  • デバイスまたは AWS CloudShell に、kubectl コマンドラインツールがインストールされていること。バージョンは、ご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが 1.26 である場合、kubectl のバージョン 1.251.26、または 1.27 が使用できます。kubectl をインストールまたはアップグレードする方法については、「kubectl のインストールまたは更新」を参照してください。

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

前提条件
  • ご使用のデバイスまたは AWS CloudShell で、AWS CLI のバージョン 2.12.3 以降または 1.27.160 以降がインストールおよび設定されていること。現在のバージョンは、aws --version | cut -d / -f2 | cut -d ' ' -f1 で確認できます。macOS の yumapt-get、または Homebrew などのパッケージマネージャは、AWS CLI の最新バージョンより数バージョン遅れることがあります。最新バージョンをインストールするには、「AWS Command Line Interface ユーザーガイド」の「AWS CLI のインストール、更新、およびアンインストール」と「aws configure でのクイック設定」を参照してください。AWS CloudShell にインストールされている AWS CLI バージョンは、最新バージョンより数バージョン遅れている可能性もあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。

  • 指定したクラスターに対して eks:DescribeCluster API アクションを使用するアクセス許可。詳細については、「Amazon EKS でのアイデンティティベースのポリシーの例」を参照してください。

kubeconfig ファイルを AWS CLI で作成するには
  1. クラスター用の kubeconfig ファイルを作成もしくは更新します。region-code をお客様のクラスターが存在する AWS リージョン に置き換え、my-cluster をお客様のクラスターの名前に置き換えます。

    aws eks update-kubeconfig --region region-code --name my-cluster

    デフォルトでは、最終的な設定ファイルは、ホームディレクトリのデフォルト 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」を参照してください。

  2. 設定をテストします。

    kubectl get svc

    出力例は次のとおりです。

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

    認証またはリソースタイプのエラーが発生した場合は、トラブルシューティングトピックの「許可されていないか、アクセスが拒否されました (kubectl)」を参照してください。

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 CloudShell で、AWS CLI のバージョン 2.12.3 以降または 1.27.160 以降がインストールおよび設定されていること。現在のバージョンは、aws --version | cut -d / -f2 | cut -d ' ' -f1 で確認できます。macOS の yumapt-get、または Homebrew などのパッケージマネージャは、AWS CLI の最新バージョンより数バージョン遅れることがあります。最新バージョンをインストールするには、「AWS Command Line Interface ユーザーガイド」の「AWS CLI のインストール、更新、およびアンインストール」と「aws configure でのクイック設定」を参照してください。AWS CloudShell にインストールされている AWS CLI バージョンは、最新バージョンより数バージョン遅れている可能性もあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。

    #!/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: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 のバージョン 0.5.9 以降。インストールするには、「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: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

    出力例は次のとおりです。

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

    認証またはリソースタイプのエラーが発生した場合は、トラブルシューティングトピックの「許可されていないか、アクセスが拒否されました (kubectl)」を参照してください。