WSLの環境に 公式リファレンス を見ながらkubectlをインストールしてウキウキしながらコマンドを実行したのですが、下記のようなエラーが発生してしょんぼりしてしまいました。
$ kubectl get pod
The connection to the server localhost:8080 was refused - did you specify the right host or port?
そのため、kubectlが実行できず悩んでいたのですが、解決策が見つかったので備忘録として残しておきます。
実行環境
- WSL
- Ubutu 20.04 LTS
- Azure Kubernetes Service
- Kubernetesのバージョン 1.15.10
サポート対象外だからバージョン上げろ
TL;DR
環境変数で KUBECONFIG
がちゃんと設定されていないことが原因でした。
解決策
なんか色々探しているうちに「kubectlの接続設定を見ろ」っていう記事が多かったので、コマンドで確認しました。
$ kubectl config view
apiVersion: v1
clusters: null
contexts: null
current-context: ""
kind: Config
preferences: {}
users: null
空じゃん。。。
「 az aks get-credentials
で接続情報を取得してファイルに格納しているのになんでだ?」と思ったので、そのコマンドの実行結果を見てみました。
$ az aks get-credentials --subscription {{サブスクリプションID}} --resource-group {{リソースグループ}} --name {{リソース名}}
Merged "{{リソース名}}" as current context in C:\Users\{{ユーザー名}}\.kube\config
WSLからWindowsのCドライブにアクセスするときは /mnt/c
でアクセスしなきゃいけないはずが、 C:\
でアクセスしていて、ファイルに設定を書き込めていなかったことが原因っぽいです。(これWindowsのパス表記じゃん?)
試しに kubectl config view --kubeconfig /mnt/c/Users/{{ユーザー名}}/.kube/config
で接続設定がちゃんと格納されているか見たら、それらしい接続方法が書いてありました。
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
...
そのため、接続設定のファイルがどこにあるかをちゃんと環境変数を設定してあげました。
$ echo 'export KUBECONFIG="/mnt/c/Users/{{ユーザー名}}/.kube/config"' >> ~/.bashrc
$ source ~/.bashrc
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
...
できたーーー!