EKS利用時のkubectlでAWS_PROFILE切り替え
EKSのチュートリアルを進めていた際、AWS_PROFILEの切り替え方法に少し詰まったのでメモとして残しておきます。 結論から書くと、aws-iam-authenticatorで上がっていたIssueを見て解決できました。
ステップ2-2でawscliとkubectlの設定を行う必要があるのですが、EKSの場合同時にAWSでEKSを使うための認証情報を指定する必要がある。 kubectlの設定ファイルの雛形はawscliで作成。
# 雛形を作成
aws eks update-kubeconfig --name cluster_name
# ~/.kube/configに出力された設定ファイル
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: heptio-authenticator-aws
args:
- "token"
- "-i"
- "<cluster-name>"
# - "-r"
# - "<role-arn>"
自分の場合このまま設定をテストすると以下のようなエラーが出てしまった。
$ kubectl get svc
error: the server doesn't have a resource type "cronjobs"
解決方法を探していた所冒頭に記述したIssueを見つけたので設定を行なった所問題は解決しました。
エラー内容からは推測できなかったのですが、どうやらEKSのコントロールプレーンがあるawsアカウントのPROFILEを読めていなかったようなので、コマンド実行前に AWS_PROFILE を指定するだけで問題は解決。
AWS_PROFILE=<profile-name> kubectl get svc
毎度毎度PROFILEを設定するのは面倒…と思っていたら、kubectlの設定のusersセクションの中でもコマンド実行時に読む環境変数を指定できるらしく、こちらで対応する方が楽だと思います。(aws-iam-authenticatorのREADME.mdにもよく見たら設定のサンプルに記述されていた)
users:
- name: aws
user:
exec:
apiVersion: client.authentication.k8s.io/v1alpha1
command: heptio-authenticator-aws
args:
- "token"
- "-i"
- "<cluster-name>"
# - "-r"
# - "<role-arn>"
env:
- name: AWS_PROFILE
value: <profile-name>
AWSやGCPのマネージドサービスのkubernetesは、便利な反面、落とし穴もたくさんあると思うので、今後利用していく中でハマったことなどがあればまとめていこうと思います。