概要
minikube ではアドオンの概念がありこれを使って Ingress を ON にするだけでホスト名ベースのロードバランシングができるようになります
今回は簡単な Web アプリを Ingress にぶら下げて挙動を確認してみました
環境
- macOS 10.13.6
- minikube v0.28.2
- kubectl 1.11.2
Ingress を有効にする
minikube addons enable ingress
これだけで OK です
minikube addons list
アドオンの一覧を確認できます
enable になっていれば OK です
kubectl get all -n kube-system
pod の一覧を調べると Ingress 用の pod が生成されています
どうやら内部的には nginx が立ち上がりそれを使って Web アプリとして立ち上げた pod をバランシングしているようです
pod/nginx-ingress-controller-5984b97644-rb48q
deployment.apps/nginx-ingress-controller
replicaset.apps/nginx-ingress-controller-5984b97644
Ingress を試す
では Ingress の挙動を確認しましょう
まずは pod を作成し service を expose します
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
kubectl expose deployment hello-minikube
これでコンテナ自体は立ち上がります
ただしまだ外部からアクセスすることができません
これを Ingress にぶら下げてアクセスできるようにします
Ingress の生成
Ingress は YAML ファイルの定義から生成します
- vim ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello
spec:
rules:
- host: hello.minikube.dev
http:
paths:
- backend:
serviceName: hello-minikube
servicePort: 8080
ポイントは backend の部分でここで指定している serviceName を Ingress にぶら下げてます
Ingress から servicePort で指定した Web アプリケーションのポートに対してリクエストを投げます
なので servicePort で指定するポートは expose したポートにします
kubectl create -f ingress.yaml
これで Ingress を登録しましょう
登録した Ingress の一覧は get で確認できます
- kubectl get ingress
動作確認
ぶら下げた Web アプリにホストベースでアクセスしてみます
今回は ingress.yaml で hello.minikube.dev
という名前のホストとして Web アプリをぶら下げたのでヘッダに指定します
curl http://
minikube ip-H "Host: hello.minikube.dev"
Host の指定がないと Ingress (nginx) が振り先がわからず 404 になってしまします
これでアクセスすると今回の Web アプリ (echoserver) からレスポンスが返ってくると思います
CLIENT VALUES:
client_address=172.17.0.4
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://hello.minikube.dev:8080/
SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001
HEADERS RECEIVED:
accept=*/*
connection=close
host=hello.minikube.dev
user-agent=curl/7.54.0
x-forwarded-for=192.168.99.1
x-forwarded-host=hello.minikube.dev
x-forwarded-port=80
x-forwarded-proto=http
x-original-uri=/
x-real-ip=192.168.99.1
x-request-id=9e3a2e5f6076a7d956fddd0783b7d1ec
x-scheme=http
BODY:
-no body in request-
さらっと minikube の IP にアクセスしていますが minikube はホストが 1 台しかないので当然と言えば当然です
本番環境の kubernetes などでは Ingress 用のホストを準備してそこに nginx が立ち上がりバランシングする感じになります
GKE などでは Google Cloud Load Balancing があるのでそれを使うことが推奨されています
お掃除
Ingress の削除
kubectl delete ingress hello
or
kubectl delete -f ingress.yaml
Service および Deployment, Replicaset, Pod の削除
kubectl delete service,deploy hello-minikube
minikube の停止
- minikube stop
最後に
minikube で Ingress を試してみました
minikube の場合ホストが 1 台しかないのでアクセスできる IP は --type=NodePort
と同じですが今回の場合は Ingress (nginx) を通してコンテナにアクセスします
正直本番に近い構成にすることは難しいですが Ingress の感じを掴んだり、Ingress の定義の登録ができるかなどの確認には使えると思います
0 件のコメント:
コメントを投稿