• 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

AnnotationPurpose
nginx.ingress.kubernetes.io/rewrite-target: /Strip path prefix before forwarding
nginx.ingress.kubernetes.io/ssl-redirect: "false"Disable HTTP→HTTPS redirect
nginx.ingress.kubernetes.io/proxy-body-size: "10m"Increase upload limit

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