minikube 別のホストから ingress を使って minikube のサービスにアクセスするには?
最終的には「ホストで、Minikube のポート80にポートフォワーディング」でキメマス。
手順
minikube で hello-minikube を動かす & ingress を使って外部からアクセスさせる手順。
- 後ほど、ポートフォワーディング、IPフォワーディング でアクセスするため、以下の設定を行います。
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
- Ubuntu を再起動します。
※再起動しないと、ポートフォワーディング、IPフォワーディング がきまらない時がありました。
- minikube を起動します。
minikube start
- デプロイメントを作ります。
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
- デプロイメントを公開するサービスを作ります。
kubectl expose deployment hello-minikube --type=NodePort --port=8080
- イングレスのアドオンを有効にする。
minikube addons enable ingress
$ minikube addons enable ingress
* ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
- k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1 イメージを使用しています
- k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1 イメージを使用しています
- k8s.gcr.io/ingress-nginx/controller:v1.2.1 イメージを使用しています
* ingress アドオンを検証しています...
* 'ingress' アドオンが有効です
- イングレスを作ります。
kubectl create ingress hello-minikube-ingress --class=nginx --rule="/*=hello-minikube:8080"
$ kubectl create ingress hello-minikube-ingress --class=nginx --rule="/*=hello-minikube:8080"
ingress.networking.k8s.io/hello-minikube-ingress created
- イングレスにアクセスします。
curl `minikube ip`
$ curl `minikube ip`
CLIENT VALUES:
client_address=172.17.0.4
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://192.168.49.2:8080/
SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001
HEADERS RECEIVED:
accept=*/*
host=192.168.49.2
user-agent=curl/7.81.0
x-forwarded-for=192.168.49.1
x-forwarded-host=192.168.49.2
x-forwarded-port=80
x-forwarded-proto=http
x-forwarded-scheme=http
x-real-ip=192.168.49.1
x-request-id=c0e613fb2a864e8472ba7960fbfe124d
x-scheme=http
BODY:
-no body in request-
多くの文献は↑ここで終わっていると思います。私がやりたいことは「別のホストから、このイングレスにアクセスさせたい」のです。やり方はいくつかあると思います。
(方法1)ホストで、Minikube のポート80にポートフォワーディングを行う。
(方法2)「ホストで Minikube に、IPフォワーディング させる。」というものです。これは クライアントの PC に Minikube のルートを追加し、ホストで IPフォワーディング するようにします。
(方法3)「ホストに、リバースプロキシを立てる。」これは、まぁいいかな。
(方法1)ホストで、Minikube のポート80にポートフォワーディングを行う。
手順1で準備は出来ています。iptables でポートフォワーディングの設定を行います。
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination `minikube ip`:80
ポートフォワーディングの場合、ホストの IP でアクセスすることができます。
http://192.168.11.9
(方法2)ホストで Minikube に、IPフォワーディング させる。
手順1で準備は出来ています。IPフォワーディングの場合、クライアントの PC に Minikube のルートを追加し、Minikube の IP でのアクセスになります。
http://192.168.49.2
以上
イングレスの調査
イングレスのマニュフェストファイルについて
①ルール無しでデフォルトのバックエンド を指定する方法。
cat <<EOF > ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-minikube-ingress
spec:
defaultBackend:
service:
name: hello-minikube
port:
number: 8080
EOF
②kubectlコマンドから、マニュフェストを生成する方法。
kubectl create ingress hello-minikube-ingress --class=nginx --rule="answorz.com/*=hello-minikube:8080" --dry-run -o yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
creationTimestamp: null
name: hello-minikube-ingress
spec:
ingressClassName: nginx
rules:
- host: answorz.com
http:
paths:
- backend:
service:
name: hello-minikube
port:
number: 8080
path: /
pathType: Prefix
status:
loadBalancer: {}
イングレスのマニュフェストファイルの適用はいつも通りです。
kubectl apply -f ingress.yaml
イングレスを確認する。
kubectl get ingress hello-minikube-ingress
イングレスを削除する。
kubectl delete ingress hello-minikube-ingress