Ingress Rules

Create a new namespace:

kubectl create ns ingress-test
namespace/ingress-test created

Change namespace

kubectl config set-context --current --namespace ingress-test

Create a deployment

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: phippy
  name: phippy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: phippy
  strategy: {}
  template:
    metadata:
      labels:
        app: phippy
    spec:
      containers:
      - image: r.deso.tech/whoami/whoami
        name: phippy
        ports:
        - containerPort: 80
        resources: {}
        env:
        - name: NAME_APPLICATION
          value: "phippy"
---
apiVersion: v1
kind: Service
metadata:
  name: phippy
spec:
  ports:
  - name: http
    targetPort: 80
    port: 80
  selector:
    app: phippy
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: captainkube
  name: captainkube
spec:
  replicas: 1
  selector:
    matchLabels:
      app: captainkube
  strategy: {}
  template:
    metadata:
      labels:
        app: captainkube
    spec:
      containers:
      - image: r.deso.tech/whoami/whoami
        name: captainkube
        ports:
        - containerPort: 80
        resources: {}
        env:
        - name: NAME_APPLICATION
          value: "captainkube"
---
apiVersion: v1
kind: Service
metadata:
  name: captainkube
spec:
  ports:
  - name: http
    targetPort: 80
    port: 80
  selector:
    app: captainkube
kubectl apply -f deploy-phippy.yaml
deployment.apps/phippy created
service/phippy created
kubectl apply -f deploy-captainkube.yaml
deployment.apps/captainkube created
service/captainkube created

Create a Ingress Class:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: contour
  annotations:
    ingressclass.kubernetes.io/is-default-class: "false"
spec:
  controller: projectcontour.io/ingress-controller

Apply the IngressClass:

kubectl apply -f ingress-class-contour.yaml
ingressclass.networking.k8s.io/contour created

Create the Ingress Rule

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: animals
spec:
  ingressClassName: contour
  rules:
  - host: phippy.local
    http:
      paths:
      - backend:
          service:
            name: phippy
            port:
              number: 80
        path: /
        pathType: Exact
  - host: captainkube.local
    http:
      paths:
      - backend:
          service:
            name: captainkube
            port:
              number: 80
        path: /
        pathType: Exact
kubectl apply -f ingress-animals.yaml
ingress.networking.k8s.io/animals created

Check the IP of the Ingress Controller:

kubectl get services --namespace projectcontour envoy --output jsonpath='{.status.loadBalancer.ingress[0].ip}' && echo
10.10.99.121
curl --header 'Host: phippy.local' 10.10.99.121
+--------------------------------------+
|               REQUEST                |
+--------------------------------------+
| GET / HTTP/1.1 Host: phippy.local    |
| User-Agent: curl/7.64.1 Accept:      |
| */* X-Envoy-Expected-Rq-Timeout-Ms:  |
| 15000 X-Envoy-Internal:              |
| true X-Forwarded-For:                |
| 10.10.50.1 X-Forwarded-Proto:        |
| http X-Request-Id:                   |
| 70544dc5-9be2-4538-b39e-c8df5fb45a87 |
| X-Request-Start: t=1611689615.111    |
+--------------------------------------+
curl --header 'Host: captainkube.local' 10.10.99.121
+--------------------------------------+
|               REQUEST                |
+--------------------------------------+
| GET / HTTP/1.1 Host:                 |
| captainkube.local User-Agent:        |
| curl/7.64.1 Accept: */*              |
| X-Envoy-Expected-Rq-Timeout-Ms:      |
| 15000 X-Envoy-Internal:              |
| true X-Forwarded-For:                |
| 10.10.50.1 X-Forwarded-Proto:        |
| http X-Request-Id:                   |
| 23d21448-432f-4457-b193-2a6eb863c73b |
| X-Request-Start: t=1611689633.650    |
+--------------------------------------+

Let’s clean up the lab!

kubectl config set-context --current --namespace default
kubectl delete ns ingress-test