Ingress 는 HTTP · HTTPS 트래픽을 호스트 이름과 경로에 따라 클러스터 안 Service 로 넘기는 규칙이다. 규칙(Ingress 오브젝트)만으로는 아무 일도 일어나지 않고, 그것을 읽어 실제 프록시를 설정하는 Ingress controller 가 있어야 한다. 컨트롤러는 클러스터에 기본으로 들어 있지 않으므로 하나 골라 설치한다.
| 컨트롤러 | 특징 |
|---|---|
| ingress-nginx (Kubernetes 프로젝트) | 가장 널리 쓰인다. annotation 으로 세부 동작을 조정한다. 이 트리의 Ingress Nginx controller |
| NGINX Ingress Controller (F5) | 이름이 비슷하지만 다른 제품. annotation 체계가 다르다 |
| Traefik | 동적 설정 · 대시보드. k3s 기본 |
| HAProxy Ingress · Contour(Envoy) · Istio Gateway | 각 프록시 기반 |
spec.ingressClassName 으로 어느 컨트롤러가 처리할지 지정한다. 컨트롤러가 여럿이면 필수다.
Kubernetes 는 Ingress 의 후속으로 Gateway API(GatewayClass · Gateway · HTTPRoute)를 두고 있다. ingress-nginx 를 포함한 주요 컨트롤러가 둘 다 지원하므로 새로 만드는 구성은 Gateway API 도 검토한다.
현행 ingress-nginx 는 controller v1.15.1 이다[1].
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
LoadBalancer 가 있는 환경은 cloud, 없으면 baremetal(NodePort) 매니페스트를 쓴다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.15.1/deploy/static/provider/cloud/deploy.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.15.1/deploy/static/provider/baremetal/deploy.yaml
kubectl get pods --namespace=ingress-nginx
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=120s
kubectl get svc -n ingress-nginx ingress-nginx-controller
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
spec:
ingressClassName: nginx
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-svc
port:
number: 80
kubectl apply -f ingress.yaml
kubectl get ingress
curl -H 'Host: app.example.com' http://<컨트롤러 주소>/
최신 버전 controller-v1.15.1 — 2026-09-20 확인. https://github.com/kubernetes/ingress-nginx/releases/latest ↩︎