kubectlでGKEにつなごうと思ったら"error executing access token command"

1 min read読了の目安(約1000字

kubectlでGKEにつなごうと思ったらerror executing access token commandが出たので解決した話です。

事象

ちょっと久々にkubectlでGKEにつなごうと思ったら以下のエラーが出て困った。

$ kubectl get po --context gke_xxxxx_asia-northeast1_xxxxx
Unable to connect to the server: error executing access token command /snap/google-cloud-sdk/132/bin/gcloud config config-helper --format=json: err=fork/exec /snap/google-cloud-sdk/132/bin/gcloud: no such file or directory output= stderr=

解決

~/.kube/configusers.[当該のuser].auth-provider.config.cmd-path/snap/google-cloud-sdk/132/bin/gcloudになっていたのを、/snap/bin/gcloudに修正した。

事象と解決の説明

kubectlでGKEにつなごうとした際、kubectlが認証をしようとして指定したコンテキストのユーザの認証用のコマンドを実行しようとした。
認証用のコマンドは~/.kube/configusers.[当該のuser].auth-provider.config.cmd-pathに記録されているが、これが古いパスになっていた。

Google Cloud SDKをSnapでインストールしていたので、パッケージを諸々アップデートした際に古いバイナリが削除されたが、その際~/.kube/configは自動的には書き換わらなかったのだと思う。(SnapはKubernetesのことを知らないので、当然のこと)

Snapでインストールしたgcloudコマンドは/snap/bin/gcloudで参照できるので、コマンドのパスをそのように書き換えて、今後再びアップデートされた際にも問題が再発しないようにした。