0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

kubectlがWSL上で実行できない

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
...

できたーーー!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?