Ingress のルーティングを nginx-hello で試してみる

Ingress のルーティングを nginxinc/NGINX-Demosnginx-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 を使うとルーティングされていることが分かりやすい。

参考)