Xubuntu上のminikubeでIngressを使う
minikubeが停止している場合は開始します。
1 minikube start --driver=docker
初期の状態で何が動いているのかをチェックします。
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 NAMESPACE NAME READY STATUS RESTARTS AGE kube-system pod/coredns-78fcd69978-vmdl6 1/1 Running 0 101s kube-system pod/etcd-minikube 1/1 Running 0 115s kube-system pod/kube-apiserver-minikube 1/1 Running 0 113s kube-system pod/kube-controller-manager-minikube 1/1 Running 0 113s kube-system pod/kube-proxy-db4dw 1/1 Running 0 101s kube-system pod/kube-scheduler-minikube 1/1 Running 0 115s kube-system pod/storage-provisioner 1/1 Running 1 (70s ago) 112s NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 115s kube-system service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 114s NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE kube-system daemonset.apps/kube-proxy 1 1 1 1 1 kubernetes.io/os=linux 114s NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE kube-system deployment.apps/coredns 1/1 1 1 114s NAMESPACE NAME DESIRED CURRENT READY AGE kube-system replicaset.apps/coredns-78fcd69978 1 1 1 101s
minikubeでIngressを有効にします ドキュメント:https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/
1 minikube addons enable ingress
Ingressを有効にしたあとの状態を確認します。
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 NAMESPACE NAME READY STATUS RESTARTS AGE ingress-nginx pod/ingress-nginx-admission-create--1-httf5 0/1 Completed 0 24s ingress-nginx pod/ingress-nginx-admission-patch--1-8pmjs 0/1 Completed 0 24s ingress-nginx pod/ingress-nginx-controller-69bdbc4d57-flhbp 0/1 Running 0 24s kube-system pod/coredns-78fcd69978-vmdl6 1/1 Running 0 3m25s kube-system pod/etcd-minikube 1/1 Running 0 3m39s kube-system pod/kube-apiserver-minikube 1/1 Running 0 3m37s kube-system pod/kube-controller-manager-minikube 1/1 Running 0 3m37s kube-system pod/kube-proxy-db4dw 1/1 Running 0 3m25s kube-system pod/kube-scheduler-minikube 1/1 Running 0 3m39s kube-system pod/storage-provisioner 1/1 Running 1 (2m54s ago) 3m36s NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3m39s ingress-nginx service/ingress-nginx-controller NodePort 10.108.240.214 <none> 80:30541/TCP,443:32559/TCP 24s ingress-nginx service/ingress-nginx-controller-admission ClusterIP 10.109.86.198 <none> 443/TCP 24s kube-system service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 3m38s NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE kube-system daemonset.apps/kube-proxy 1 1 1 1 1 kubernetes.io/os=linux 3m38s NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE ingress-nginx deployment.apps/ingress-nginx-controller 0/1 1 0 24s kube-system deployment.apps/coredns 1/1 1 1 3m38s NAMESPACE NAME DESIRED CURRENT READY AGE ingress-nginx replicaset.apps/ingress-nginx-controller-69bdbc4d57 1 1 0 24s kube-system replicaset.apps/coredns-78fcd69978 1 1 1 3m25s NAMESPACE NAME COMPLETIONS DURATION AGE ingress-nginx job.batch/ingress-nginx-admission-create 1/1 4s 24s ingress-nginx job.batch/ingress-nginx-admission-patch 1/1 5s 24s
ingress-nginx
ネームスペースに展開されているようです。 このネームスペースを指定します。
1 kubectl get all -n ingress-nginx
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 NAME READY STATUS RESTARTS AGE pod/ingress-nginx-admission-create--1-httf5 0/1 Completed 0 2m5s pod/ingress-nginx-admission-patch--1-8pmjs 0/1 Completed 0 2m5s pod/ingress-nginx-controller-69bdbc4d57-flhbp 1/1 Running 0 2m5s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/ingress-nginx-controller NodePort 10.108.240.214 <none> 80:30541/TCP,443:32559/TCP 2m5s service/ingress-nginx-controller-admission ClusterIP 10.109.86.198 <none> 443/TCP 2m5s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/ingress-nginx-controller 1/1 1 1 2m5s NAME DESIRED CURRENT READY AGE replicaset.apps/ingress-nginx-controller-69bdbc4d57 1 1 1 2m5s NAME COMPLETIONS DURATION AGE job.batch/ingress-nginx-admission-create 1/1 4s 2m5s job.batch/ingress-nginx-admission-patch 1/1 5s 2m5s
この状態でクラスタにアクセスしてみます。 まずはminikubeのIPを確認します。
例:
そのIPにアクセスしてみます。
404の結果が返ってきます。
1 2 3 4 5 6 7 <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx</center> </body> </html>
サンプルアプリケーションをデプロイします HTTP サーバをminikubeにデプロイします。
ドキュメント:https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/#deploy-a-hello-world-app
まずはdeploymentとpodです。
1 kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
続いてserviceです。
1 kubectl expose deployment web --type=NodePort --port=8080
結果を確認します。
例:
1 2 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web NodePort 10.109.141.151 <none> 8080:31972/TCP 6s
上の例では、該当ノードの31972ポートで公開されています。
サービスのURLを表示するコマンドです。
1 minikube service web --url
例:
1 http://192.168.49.2:31972
ここにcurlでアクセスしてみます。
1 curl `minikube service web --url`
例:
1 2 3 Hello, world! Version: 1.0.0 Hostname: web-79d88c97d6-8zcks
Ingressリソースを作成する Ingressリソースを使って、ノードのIPアドレスとポート番号を指定するのではなくホスト名でアクセスできるようにします。ここではhttp://hello-world.info
とします。
以下のファイルをexample-ingress.yaml
として作成します。 これは、hello-world.info
へのアクセスをweb
サービスの8080
ポートにプロキシするという内容です。 このIngressリソースはdefault
ネームスペースに作成します。default
に作らなければいけないわけではありませんが、同じネームスペースのサービスを探すようです。もし異なるネームスペースのサービスにプロキシしたいならExternalNameサービスを間に挟めばよさそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: rules: - host: hello-world.info http: paths: - path: / pathType: Prefix backend: service: name: web port: number: 8080
作成したファイルを適用します。
1 kubectl apply -f example-ingress.yaml
結果を確認します。
例:
1 2 NAME CLASS HOSTS ADDRESS PORTS AGE example-ingress nginx hello-world.info 192.168.49.2 80 2m41s
この状態で動作を確認してみます。しかし、hello-world.info
とノードのIPは関連づいていません。 そこでHostヘッダで指定してみます。minikube ip
はノードのIPを取得するコマンドです。
1 curl -H "Host: hello-world.info" `minikube ip`
さっきと同じ結果が返ってくればOKです。
これで、ノードポートを意識せずにPodまでアクセスできるようになりました。