[アップデート]EKSを使う際にaws-iam-authenticatorが不要になりました!
はじめに
おはようございます、加藤です。先日、EKSのドキュメントヒストリを眺めているとある変更がありました。
Document History for Amazon EKS - Amazon EKS
Change | Description | Date |
---|---|---|
AWS CLI get-token command | The aws eks get-token command was added to the AWS CLI so that you no longer need to install the AWS IAM Authenticator for Kubernetes to create client security tokens for cluster API server communication. Upgrade your AWS CLI installation to the latest version to take advantage of this new functionality. For more information, see Installing the AWS Command Line Interface in the AWS Command Line Interface User Guide. | May 10, 2019 |
とりあえず、読めないのでGoogle先生の力を借ります。
aws eks get-tokenコマンドがAWS CLIに追加されたため、クラスターAPIサーバー通信用のクライアントセキュリティトークンを作成するためにKubernetes用のAWS IAM Authenticatorをインストールする必要がなくなりました。 この新機能を利用するには、AWS CLIインストールを最新バージョンにアップグレードしてください。 詳細については、AWS Command Line Interfaceユーザーガイドの「AWS Command Line Interfaceのインストール」を参照してください。
AWS CLIに新しいコマンドが追加され、AWS IAM Authenticatorが不要になったようですね。
Amazon EKS API に GetToken API が追加されました。 これまでは EKS での k8s クラスタ作成と操作には awscli + kubectl + aws-iam-authenticator(旧 heptio-authenticator-aws) の3つが必要でしたが、今後は awscli + kubectl の2つでよくなります。
/ "get-token..." https://t.co/gXFw7aG4oY
続)
— ポジティブな Tori (@toricls) May 14, 2019
やってみた
AWS CLI
最新のAWS CLIがインストールされている必要があります。 私の環境は下記の通りです。
aws-cli/1.16.156 Python/3.7.3 Darwin/18.5.0 botocore/1.12.146
これより古い場合は、下記のドキュメントに従ってpip3
からAWS CLIをインストールしてください。Homebrewで既にインストールされたAWS CLIがある場合は、brew uninstall
or brew unlink
で対応してください。
Installing the AWS CLI - AWS Command Line Interface
kubeconfigの比較
aws eks update-kubeconfig --name ${CLUSTER_NAME}
で、kubeconfigを再作成して比較してみました。
- name: arn:aws:eks:ap-northeast-1:${YOUR_ACCOUNT_ID}:cluster/${YOUR_CLUSTERNAME} user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 args: - token - -i - ${YOUR_CLUSTERNAME} command: aws-iam-authenticator env: null
users: - name: arn:aws:eks:ap-northeast-1:${YOUR_ACCOUNT_ID}:cluster/${YOUR_CLUSTERNAME} user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 args: - eks - get-token - --cluster-name - ${YOUR_CLUSTERNAME} command: aws
args, command, env が変更になっていますね。新しい方だとaws-iam-authenticator
を使用せず、AWS CLIだけで完結しています。
新の方ではenvが省略されていますが、aws eks update-kubeconfig
を使う際にプロファイルを指定すると、AWS_PROFILE
が設定されました。
MFA問題は解消したか
EKSには、MFAが有効化されたアカウントでkubectl
を叩くと毎回MFAを効かれるという問題がありました。流石に面倒すぎるので、今までは下記のブログに書いた方法で対処していました。
[超小ネタ] Amazon Elastic Container Service for Kubernetes(EKS)でkubectlする際に毎回MFAを求められて面倒なのを回避する
このアップデートを見た時、これ解決するんじゃね?と淡い期待を抱きました。 結果は残念ながら対応していませんでした...引き継ぎ上のブログに書いた方法で対処していきます。
Twitterでポジティブな Tori(@toricls)さんに教えて頂きましたが、今までも実はオプションを追加すれば、クレデンシャルキャッシュされたようです。これは目から鱗でした!
ちなみに aws-iam-authenticator 0.4.0 以降をご利用であればキャプチャみたいな感じで実行時引数に "--cache" つければ aws-iam-authenticator 自身の AWS クレデンシャルキャッシュ機構が利用できますー pic.twitter.com/0QuUbrjNIz
— ポジティブな Tori (@toricls) 2019年5月14日
さらにさらに!新しい方式でもクレデンシャルキャッシュを使えるように、bashスクリプトを公開されています。 前述したdirenv, assume-roleを使った一時クレデンシャルを生成する方法が合わない方はこちらを利用すると幸せになれますね!
カッとなって書いたのでもし何かの参考になれば...
/ "toricls/eks-kubectl-mfa-helper: Better friend for your MFA-forced IAM user and kubectl command." https://t.co/v6Hiq4L9QF
— ポジティブな Tori (@toricls) May 14, 2019
なにが嬉しいのか?
このアップデートによって改善されたのは、aws-iam-authenticator
をインストールしなくて良いという一点だけです。
ローカル端末からkubectl
を叩いているシチュエーションでは、インストールはそこまで手間では無く、大きな変化はないと考えています。しかし、下記のブログのようにCodeBuildからkubectl
を叩いている場合は結構嬉しいです。
上記ブログから抜粋しますが、下記はkubectl
を叩く為のDockerfileです。
FROM alpine:3.8 # install AWS CLI ENV AWS_CLI_VERSION 1.16.26 RUN apk --update --no-cache add \ python \ py-pip \ && \ pip install --upgrade awscli==${AWS_CLI_VERSION} && \ apk -v --purge del py-pip # install kubectl ENV KUBECTL_VERSION 1.11.3 RUN wget -O /usr/local/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl && \ chmod +x /usr/local/bin/kubectl # install AWS IAM Authenticator ENV AWS_IAM_AUTHENTICATOR_RELEASE_DATE 2018-07-26 ENV AWS_IAM_AUTHENTICATOR_VERSION 1.10.3 RUN wget -O /usr/local/bin/aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/${AWS_IAM_AUTHENTICATOR_VERSION}/${AWS_IAM_AUTHENTICATOR_RELEASE_DATE}/bin/linux/amd64/aws-iam-authenticator && \ chmod +x /usr/local/bin/aws-iam-authenticator
AWS CLI, kubectl, aws-iam-authenticatorの3つをインストール、そしてバージョンアップし続ける必要がありますね。 aws-iam-authenticatorが不要になるので、数十MBコンテナ容量が小さくなりバージョン管理の手間が軽減されます。細かいですが、このアップデートの嬉しさはこういうところかなと感じました。
あとがき
劇的なアップデートという訳では無いですが、こういう細かい所も改善してくれるのはとても嬉しいですね。個人的感想ですが、AWSはEKSに力を入れているんだなーと改めて感じました。 また、公式ドキュメントとして、eksctlを使った場合のGetting Startedも公開されドンドンドキュメントや機能が充実していくなーと感じる日々です。
Getting Started with eksctl - Amazon EKS
以上でした!