Minikube in VirtualBox on Windows10 な環境で、Minikubeにhttp://localhost:xxxx
でアクセスできるようにしたメモ
長いよ!
minikube addons enable ingress
nginx.ingress.kubernetes.io/ssl-redirect: "false"
- VMの80にポートフォワード
環境
- Windows 10 Home 1809
- virtualBox v5.2.22
- minikube v0.30.0
アプデさぼってるな...
発端
普通にMinikubeのGetting Startをやっていると、type: NodePort
なServiceにアクセスするためにminikube service <service-name> --url
でURLを払い出す記述がどこかで見つかると思う。
ここで吐き出されるIPアドレスはたぶん192.168.99.100
で、後ろに適当な30000番台のポート番号がくっついていることだろう。
このURLを叩けばアクセスできることにはできるのだけれど、困る。
というのも、どこの馬の骨とも知れぬプライベートIPアドレスとlocalhostとではブラウザ様の挙動に雲泥の差があるからだ。
具体的には、HTTPであってもlocalhostはセキュアなものとして扱ってくれる。今日のWebはHTTPSが基本。各種Web APIもセキュアな環境でないと動いてくれないとかよくあるのでマジ重要なのだ。
なのでlocalhostでアクセスしたい。こういうときはVirtualBoxのVMの設定でポートフォワードすればいいというのはふんわりと知っていたのだけれど、いかんせん適当に吐き出されるポート番号相手にどうしたものか分からず苦戦した。
"Minikube windows virtualbox localhost"といった検索ワードでggり倒したけれどそれらしい情報が全然見つからず辛い思いをした。
ふとtype: LoadBalancer
なる記述に踊らされ、関連してIngressという単語を拾い検索ワードを弄っていると、Minikube で快適に Ingress を利用するという記事を見つけ、参考になった。
Ingress
Ingressが何か全くわからなかったためちょっと調べた。
K8s on Vagrant, NGINX Ingress Controller の利用を参考にすると、クラスタ外部からクラスタ内のサービスにアクセスを橋渡しして、ロードバランシングやSSLの終端を担う存在らしい。k8sでのリバースプロキシみたいな存在なのかな。
MinikubeのIngressアドオン
Minikube で快適に Ingress を利用するに立ち返り、書かれている手順に倣ってIngressを導入する。
まずはMinikubeにIngressアドオンを入れる。minikube addons enable ingress
を打ってお茶を淹れてくるだけ。
まったりしている間にnginx-ingress-controllerやらの展開が終わったのを確認して、Ingressの設定を投げる。
ほぼコピペだったけれど、ちょこちょこ弄っている。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: localhost
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
実のところどういう意味かは執筆時点で全然理解できていないけれどこれで動いたのでヨシ。
元記事の定義との変更点は、片方はannotationのnginx.ingress.kubernetes.io/ssl-redirect: "false"
。
デフォルトの動作だとHTTPSにフォースリダイレクトされてしまったため、ユーザーガイドに従って動作を変更した。
ConfigMapで行う方法とannotationで行う方法が示されていて、今回は後者。ConfigMapはaddonが勝手に入れているようだけれど、弄れるのか?
もう一つの変更はホストの指定。
参考にした記事の設定ではnginx.minikube.dev
というホスト名を設定し、dnsmasqでそのホスト名で名前解決するようにしていたけれど、今回はlocalhostからポートフォワードして入るため、こんな記述にしてみている。
nginxの知識もIngressの知識も無く、ホスト名の設定がどこにどう利くのかよく理解できていないから、これでいいのかは分からない。どうせホビープロジェクトだし困ってから考える。
あとはVMでポートフォワードの設定をし、ブラウザからhttp://localhost:xxxx
にアクセスして指定したServiceに案内されたら成功。
ブラウザのキャッシュを無効化せずに叩いてhttpsに案内されたのにハマったのは内緒だ。一度httpsに通されると勝手にhttps向くんだね。
最後に
k8s全然わかんない