以下の内容はhttps://devops-blog.virtualtech.jp/entry/20220722/1658457780より取得しました。


eksctlとHelmでハマった

eksctlを使うとEKSにサービスアカウントを用意してくれます。これの何が嬉しいかというと、KubernetesのServiceAccountとIAMロールが紐づいてくれるので、kube2iamかkiamを使わなくてもKubernetesからAWSのリソースの操作ができるようになります、やったね☆

詳細は以下から

IAM Roles for Service Accounts - eksctl

で、今回ExternalDNSとAWS Load Balancer Controller用のServiceAccountを追加して、LBの追加やDNSレコードの追加を自動でやらせようと思ったのですが、なぜかPermission deniedになってしまいます、おかしい……

結論

HelmのインストールオプションでserviceAccount.create=trueになっていて、eksctlで作ったSerivceAccountを上書きして、IAMロールとの紐付けが削除されていました。

インストールオプションで--set serviceAccount.create=falseするか、values.yamlでfalseにする必要があるんですね。以前作ったeksctlのコードではfalseにしていたので、過去の自分は知っていたようですが今日の私は知りませんでした。

調査方法

kubectl get serviceaccounts -n NAMESPACE SA_NAME -o yamlで以下のような項目があるか確認すると1発でわかります。

metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::XXXXXXXXXXXX:role/eksctl-demo-addon-iamserviceaccount-kube-sys-RoleN-xxxxxxxxxxxx

eks.amazonaws.com/role-arnにIAMロールのArnがセットされているはずで、このIAMロールをみればどういう権限が付与されているかわかります。 この部分がないと、NodeInstanceRoleに従うはずなので、そっちに権限がなければ操作できない、と……

まとめ

HelmのserviceAccount.createが上書きするとは思っていなくてだいぶ時間を使ってしまいました。




以上の内容はhttps://devops-blog.virtualtech.jp/entry/20220722/1658457780より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14