Ingress Rules
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