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

Amazon EKS の kubeconfig を作成する

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

このセクションでは、kubeconfig を作成または更新する 2 つの手順を示します。AWS CLI を使用して update-kubeconfig AWS CLI コマンドで自動的にすばやく 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. AWS CLI のバージョン 1.16.156 以降がインストールされていることを確認します。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 を作成または更新するには、AWS CLI update-kubeconfig コマンドを使用します。

    • デフォルトでは、最終的な設定ファイルは、ホームディレクトリのデフォルト kubeconfig パス (.kube/config) に作成されるか、その場所で既存 kubeconfig とマージされます。別のパスは --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 --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 コマンドを使用するには (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-arn" # - "<role-arn>" # env: # - name: AWS_PROFILE # value: "<aws-profile>"
    • AWS IAM Authenticator for Kubernetes を使用するには:

      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 に教えます。

    • macOS または Linux 上の Bash シェルの場合:

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

      $ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.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
    • 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