What is client-go credential plugins
はじめに
マネージドサービスの認証周りとkubectl
との連携がわからなかったのでそれの忘備録です。
kubeconfigのexec
でなにかしらやってるのは知ってたのですが、もうちょっとちゃんと見ようという感じです。
元ページ
client-go credential plugins
概要
kubectlやkubeletなど、client-goを使用するツールは外部コマンドを実行して認証情報を受け付けるための機能がある。
外部コマンドによって生成された認証情報を処理するため、webhook token authenticatorがサーバ側に必要。
ユースケース
LDAP認証の外部サービスを実行する際の流れを考える。
- 開発者が
kubectl
を叩く - Credential pluginがLDAPの資格情報を使って外部サービスに通信してToken生成。
- Credential pluginがclient-goにTokenを渡す。
kubectl
はCredential PluginからもらったTokenをAPI ServerへのBearer Tokenとして利用する。- API ServerはWebhook Token Authenticatorを使って、外部サービスにTokenが正しいかどうかをみてもらう
- 外部サービスがTokenを検証し、
user
とgroup
を返す
設定
kubeconfigのuser
のところに呼び出すコマンドを設定できる。
apiVersion: v1 kind: Config users: - name: my-user user: exec: # Command to execute. Required. command: "example-client-go-exec-plugin" # API version to use when decoding the ExecCredentials resource. Required. # # The API version returned by the plugin MUST match the version listed here. # # To integrate with tools that support multiple versions (such as client.authentication.k8s.io/v1alpha1), # set an environment variable or pass an argument to the tool that indicates which version the exec plugin expects. apiVersion: "client.authentication.k8s.io/v1beta1" # Environment variables to set when executing the plugin. Optional. env: - name: "FOO" value: "bar" # Arguments to pass when executing the plugin. Optional. args: - "arg1" - "arg2"
入力と出力フォーマット
kubeconfigで設定したコマンドはExecCredential
Objectを標準出力にだす。
kubeclt
はExecCredential
Objectのstatus
にあるクレデンシャルをつかう。
個人メモ
多分上記の6番目のところでUserとGroupを得ているような気がします。
User名はマネージドサービスごとのIAM的サービスに紐づくIDだったりするんでしょうが、Groupも似たような感じでしょうか。
TokenReviewとか使ってもうちょっと情報の整理が必要そう。