Ingress のルーティングを nginxinc/NGINX-Demos の nginx-hello を使って試してみる。
まずは Ingress Controller を有効にする。
$ minikube addons enable ingress 🔎 Verifying ingress addon... 🌟 The 'ingress' addon is enabled $ kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-f9fd979d6-5mfmx 1/1 Running 0 5m7s etcd-minikube 1/1 Running 0 5m12s ingress-nginx-admission-create-x6d2h 0/1 Completed 0 3m25s ingress-nginx-admission-patch-kkr7b 0/1 Completed 2 3m25s ingress-nginx-controller-558664778f-k8gjr 1/1 Running 0 3m25s kube-apiserver-minikube 1/1 Running 0 5m12s kube-controller-manager-minikube 1/1 Running 0 5m12s kube-proxy-zjvcb 1/1 Running 0 5m7s kube-scheduler-minikube 1/1 Running 0 5m12s storage-provisioner 1/1 Running 0 5m12s
バックエンドの Service と Deployment を作成。イメージは nginxdemos/nginx-hello:plain-text
を使う。
--- apiVersion: v1 kind: Service metadata: name: sandbox-nginx-service-1 spec: ports: - name: http protocol: TCP port: 80 targetPort: 8080 selector: app: sandbox-nginx-1 type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: name: sandbox-nginx-deployment-1 spec: replicas: 1 selector: matchLabels: app: sandbox-nginx-1 template: metadata: labels: app: sandbox-nginx-1 spec: containers: - image: nginxdemos/nginx-hello:plain-text name: nginx ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: sandbox-nginx-service-2 spec: ports: - name: http protocol: TCP port: 80 targetPort: 8080 selector: app: sandbox-nginx-2 type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: name: sandbox-nginx-deployment-2 spec: replicas: 1 selector: matchLabels: app: sandbox-nginx-2 template: metadata: labels: app: sandbox-nginx-2 spec: containers: - image: nginxdemos/nginx-hello:plain-text name: nginx ports: - containerPort: 80
$ kubectl apply -f backends.yml
service/sandbox-nginx-service-1 created
deployment.apps/sandbox-nginx-deployment-1 created
service/sandbox-nginx-service-2 created
deployment.apps/sandbox-nginx-deployment-2 created
Ingress を作成。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: sandbox-ingress spec: rules: - http: paths: - path: /nginx1 pathType: Prefix backend: service: name: sandbox-nginx-service-1 port: number: 80 - path: /nginx2 pathType: Prefix backend: service: name: sandbox-nginx-service-2 port: number: 80
$ kubectl apply -f ingress.yml ingress.networking.k8s.io/sandbox-ingress created $ kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE sandbox-ingress <none> * 192.168.64.10 80 110s
それぞれにリクエストしてみる。
$ kubectl get pods NAME READY STATUS RESTARTS AGE sandbox-nginx-deployment-1-677d4f9887-dq5d7 1/1 Running 0 5m2s sandbox-nginx-deployment-2-694b844ff6-fnxzh 1/1 Running 0 5m2s # /nginx1 にリクエスト $ curl http://`minikube ip`/nginx1 Server address: 172.17.0.3:8080 Server name: sandbox-nginx-deployment-1-677d4f9887-dq5d7 Date: 10/Jan/2021:03:06:03 +0000 URI: /nginx1 Request ID: 3cc25e80736bfcc2bc13b16c95884e54 # /nginx2 にリクエスト $ curl http://`minikube ip`/nginx2 Server address: 172.17.0.4:8080 Server name: sandbox-nginx-deployment-2-694b844ff6-fnxzh Date: 10/Jan/2021:03:06:07 +0000 URI: /nginx2 Request ID: 7429d04e9bf93c4e462545f62f780c50
/nginx1
, /nginx2
のレスポンスがそれぞれの Service の nginx から返る。nginx-hello を使うとルーティングされていることが分かりやすい。