JavaScriptを有効にしてください

minikubeのserviceでポートを固定する方法

 · 

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

スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア