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
$ 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
$ 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 を使うとルーティングされていることが分かりやすい。
参考)