minikube 別のホストから ingress を使って minikube のサービスにアクセスするには?

ショコラ
ショコラ

minikube 別のホストから ingress を使って minikube のサービスにアクセスするには?

最終的には「ホストで、Minikube のポート80にポートフォワーディング」でキメマス。

もっさん先輩
もっさん先輩

手順

minikube で hello-minikube を動かす & ingress を使って外部からアクセスさせる手順。

  1. 後ほど、ポートフォワーディング、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
  1. Ubuntu を再起動します。

※再起動しないと、ポートフォワーディング、IPフォワーディング がきまらない時がありました。

  1. minikube を起動します。
minikube start
  1. デプロイメントを作ります。
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
  1. デプロイメントを公開するサービスを作ります。
kubectl expose deployment hello-minikube --type=NodePort --port=8080
  1. イングレスのアドオンを有効にする。
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' アドオンが有効です
  1. イングレスを作ります。
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
  1. イングレスにアクセスします。
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
Scroll to Top