- Single HTTP(S) entry → routes to multiple Services
- Ingress resource is just config: controller does the actual routing
apiVersion: networking.k8s.io/v1: pathType required on each path- Ingress controller required (e.g. nginx): assume preinstalled on exam
Ingress: path-based + host-based + TLS
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
tls:
- hosts:
- myapp.example.com
secretName: myapp-tls
rules:
- host: myapp.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-svc
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: frontend-svc
port:
number: 80
Default backend
spec:
ingressClassName: nginx
defaultBackend:
service:
name: default-svc
port:
number: 80
rules: [...]
Common nginx annotations
pathType
Prefix: prefix match (/api matches /api/v1)Exact: exact path match only
Create
kubectl create ingress myingress --rule='myapp.com/api*=api-svc:80' --rule='myapp.com/*=frontend-svc:80'
kubectl create ingress myingress --rule='myapp.com/*=frontend-svc:80,tls=myapp-tls'
kubectl get ingress
kubectl describe ingress myingress
kubectl get ingressclass
Exam gotchas
- No controller → Ingress has no effect
- Wrong backend Service name/port → 502/503: check
describe ingress - TLS termination:
spec.tls + secretName referencing a TLS secret