はじめに
KubernetesをAmazon EKSで動かすことが増えてきました。自分で調査や開発するときはeksctlでクラスタを生成してkubectlで操作していますが、先日その私が生成したクラスタを他の開発メンバーに操作してもらおうとしたとき、どうするんだっけとあたふたしたので、対応方法を備忘録的に残しておきます。
基本はAWS ナレッジセンターの情報を基に進めました。
前提条件
- KubectlとAWS CLIがインストールされている。
- AWSのIAMユーザにEKSの権限が付与されており、
aws configure
でプロファイル設定がされている。
設定
以下の操作は、eksctlでクラスタを生成した自分(管理者)ではなく、そのクラスタにアクセスしてもらう開発メンバー側でやってもらった作業です。
まずは、Amazon EKS クラスターに対する許可がある認証情報か確認します。
aws sts get-caller-identity
次に、kubectlの接続設定ファイル(kubeconfig)を生成するためのコマンドを実行します。
aws eks --region region update-kubeconfig --name cluster_name
--regionオプションのリージョン名、--nameオプションのクラスタ名は各自のものに置き換えてください。
なお、我々が実行した時は、このコマンド実行時にTypeError: 'NoneType' object is not iterable
というエラーが発生していました。kubeconfigファイルである~/.kube/config
を開いてみても、殆ど何も記述されていない状態でした。
そこで、kubeconfigファイルである~/.kube/config
を手動で削除して、再度上記のコマンドを実行したらエラーが解消しました。正常終了すると、~/.kube/config
は下図のような内容が記録されています。(塗りつぶしが多くてすみません。。)
次に、kubectlコマンドを実行してクラスタにアクセスできることを確認します。例えば以下のコマンドでdefaultの名前空間にあるServiceを確認します。
kubectl get svc
なお、我々が実行したときは、このコマンド実行で認証エラーが発生していました。
そこで、aws-auth ConfigMapを編集しました。これは開発メンバーではなく、クラスターを作成した管理者が対応する必要があります。コマンドで以下を入力します。
kubectl edit configmap aws-auth --namespace kube-system
このコマンドを入力すると、viエディタが立ち上がりました。そこで、mapUsers
に開発メンバーのIAMユーザの情報を入力します。
入力したのは下図の赤枠の部分です。userarn
にIAMユーザのARN、username
にIAMユーザ名を入力しました。
この設定後、再度開発メンバーの方からkubectl get svc
コマンドを入力したら、認証エラーが発生せずに結果を取得することができました。
おわりに
今回はIAMユーザをaws-auth ConfigMapに追加しましたが、IAMロールを追加することもできるようです。詳しくはこちらのAWSの情報を参照してください。