Amazon EKS クラスターの kubeconfig
ファイルを作成または更新する
このトピックでは、クラスター用の kubeconfig
ファイルを作成します (または既存のファイルを更新します)。
kubectl
コマンドラインツールは、kubeconfig
ファイルの設定情報を使用して、クラスターの API サーバーと通信します。詳細については、Kubernetes ドキュメントの「kubeconfig ファイルを使用したクラスターアクセスの整理kubeconfig
ファイルを作成または更新する 2 つの手順を示します。
-
AWS CLI
update-kubeconfig
コマンドを使用して自動的に作成する。 -
AWS CLI または
aws-iam-authenticator
を使用して手動で作成する。
Amazon EKS ではクラスターの認証に、AWS CLI のバージョン 1.16.156
以降で使用可能な aws eks get-token
コマンドを使用するか、kubectl
で AWS IAM Authenticator for Kubernetes
aws sts get-caller-identity
前提条件
既存の Amazon EKS クラスター。デプロイするには、「Amazon EKS の使用開始」を参照してください。
デバイスまたは AWS CloudShell に、
kubectl
コマンドラインツールがインストールされていること。バージョンは、ご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが1.26
である場合、kubectl
のバージョン1.25
、1.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 のyum
、apt-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 で作成するには
-
クラスター用の
kubeconfig
ファイルを作成もしくは更新します。region-code
をお客様のクラスターが存在する AWS リージョン に置き換え、my-cluster
をお客様のクラスターの名前に置き換えます。aws eks update-kubeconfig --region
region-code
--namemy-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」を参照してください。 -
設定をテストします。
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
ファイルを手動で作成するには
-
を独自のものに置き換えてから、変更したコマンドを実行して、いくつかの変数の値を設定します。example values
export region_code=
region-code
export cluster_name=my-cluster
export account_id=111122223333
-
クラスターのエンドポイントを取得し、値を変数に格納します。
cluster_endpoint=$(aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query "cluster.endpoint" \ --output text)
-
クラスターとの通信に必要な Base64 でエンコードされた証明書データを取得し、値を変数に格納します。
certificate_data=$(aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query "cluster.certificateAuthority.data" \ --output text)
-
デフォルトの
~/.kube
ディレクトリがまだなければ、作成します。mkdir -p ~/.kube
-
ご希望のクライアントトークンメソッド (AWS CLI または AWS IAM Authenticator for Kubernetes) に対して次のコマンドのいずれかを実行して、
config
ファイルを~/.kube
ディレクトリに作成します。次の項目を含めるようにコマンドを変更することで、コマンドの 1 つを実行する前に次の項目を指定できます。-
IAM ロール –
args:
の下の各行の行頭にある#
を削除します。
を、デフォルトの AWS 認証情報プロバイダーチェーンではなく、クラスターオペレーションを実行する IAM ロールの名前に置き換えます。詳細については、GitHub の「AWS IAM Authenticator for Kubernetes によって提供される認証トークンを使用するようにmy-role
kubectl
を設定する」を参照してください。 -
AWS CLI 名前付きプロファイル –
env:
行の行頭の#
を削除し、その下の各行の行頭の#
を削除します。
を使用するプロファイルの名前に置き換えます。プロファイルを指定しない場合、デフォルトプロファイルが使用されます。詳細については、GitHub の「資格情報の指定と AWS プロファイルの使用aws-profile
」を参照してください。
-
-
クラスター設定を検索する場所を
kubectl
に知らせるために、ファイルパスをKUBECONFIG
環境変数に追加します。-
macOS または Linux の Bash シェルの場合。
export KUBECONFIG=$KUBECONFIG:~/.kube/config
-
Windows の PowerShell の場合:
$ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.kube\config"
-
-
(オプション) シェルを開くと設定されるように、シェルの初期化ファイルに設定を追加します。
-
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')
-
-
設定をテストします。
kubectl get svc
出力例は次のとおりです。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
認証またはリソースタイプのエラーが発生した場合は、トラブルシューティングトピックの「許可されていないか、アクセスが拒否されました (kubectl)」を参照してください。