minikubeのserviceでポートを固定する方法
minikubeのserviceを外部に公開
WSLのDockerでminikubeを使用している環境での話になります。
minikube上でserviceのポートを公開する際に、minikubeのserviceコマンドを使ってポートを公開しますが、ランダムなポートになってしまいます。
毎回違うと勝手が悪いため、どうにかしてポートを固定する方法がないか調査しました。
まずminikubeのserviceコマンドでポートを固定するようなオプションがないかのソースを確認しましたが、残念ながらportを固定できるようになっていませんでした。
kubectlのport-forwardコマンドを使用する
minikubeではできないので、他の方法としてk8sのkubectl port-forward
コマンドを使用してポートを固定する方法があります。
1
|
kubectl port-forward svc/nginx 8080:80
|
この場合は8080
が指定したポートになります。
この方法はお手軽ですが、直接podに転送しているため、serviceのロードバランサの機能は使用できないのが欠点です。
自分でSSHトンネルを掘る
次の方法は本末転倒ですが、minikube service
でやっているSSHコマンドを丸パクりする方法です。
minikube service
コマンドは最終的に以下のコマンドを実行しています。
1
|
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -N [email protected] -p <minikubeのssh接続ポート> -i <秘密鍵のパス> -L <ここに任意のポート>:<ServiceのClusterIP>:80
|
任意のポートの所を自分で設定してポートを固定しちゃいます。
必要な情報はそれぞれ下記の方法で取得可能です。
minikubeのssh接続ポート
1
2
|
~/$ minikube ssh-host
[127.0.0.1]:60532 ssh-rsa AAAAB3NzaC...省略
|
60532がssh接続ポート
秘密鍵のパス
1
2
|
~/$ minikube ssh-key
/home/hoge/.minikube/machines/minikube/id_rsa
|
ServiceのClusterIP
1
2
3
|
~/$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-sample NodePort XXX.XXX.XXX.XXX <none> 80:31198/TCP 7h2m
|
最終的に上記情報からポート30000
を指定し、svc-sample
へのsshトンネルをつなぐコマンドは下記になります。
1
|
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -N [email protected] -p 60532 -i /home/hoge/.minikube/machines/minikube/id_rsa -L 30000:XXX.XXX.XXX.XXX:80
|
※Nオプションをシェルを起動させないために指定しています
どうしてもservice経由で任意のポートを指定したい場合は上記の情報を取得してから実行するスクリプトを書くしかなさそうです。
上記以外の方法
kubectl proxy
でもできるようですが、私の環境ではうまく動かず断念しました…。時間があればこちらの方法も詳しく調査したいと思います。
実行環境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
~/$ minikube version
minikube version: v1.21.0
commit: 76d74191d82c47883dc7e1319ef7cebd3e00ee11
~/$ ssh -V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f 31 Mar 2020
~/$ kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:31:21Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
~/$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
|