Kubernetes Ingress(인그레스)는 클러스터 외부의 HTTP/HTTPS 요청을 클러스터 내부의 서비스로 라우팅하는 API 리소스이다. 일반적으로 아래와 같은 기능들을 제공한다:
foo.example.com)/api, /app)즉, Ingress는 웹 요청을 분기처리해주는 트래픽 게이트웨이 역할을 한다.
클라이언트 요청은 Ingress를 통해 내부 서비스에 전달된다:
Client ──> Ingress ──> Service ──> Pod
Ingress는 요청의 도메인과 경로를 기준으로 어떤 서비스로 보낼지를 판단한다.
예시:
kubia.example.com/kubia → kubia 서비스foo.example.com → foo 서비스bar.example.com → bar 서비스apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubia
spec:
rules:
- host: kubia.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubia-nodeport
port:
number: 80
Kubernetes 클러스터 외부에서 Ingress Controller에 접근하려면 NodePort 방식이나 LoadBalancer 방식을 사용할 수 있다.
이 예시에서는 NodePort를 통해 외부 접속을 허용하는 구조를 설명하고 있다. 특히 Private 클러스터 환경에서 많이 사용된다.
a37xxxxx.elb.amazonaws.com)에 HTTPS 요청을 보냄 (443 포트)iptables를 통해 클러스터 내부의 Ingress Controller Pod (NGINX)로 연결됨| 구성 요소 | 설명 |
|---|---|
| ELB | 외부에서 요청을 받는 AWS의 Load Balancer |
| NodePort | 클러스터 외부에서 접근 가능한 포트 (예: 31610) |
| ClusterIP | Kubernetes 내부에서 서비스 접근용 가상 IP |
| PodIP | 실제 컨테이너(Pod)의 IP |
| Ingress Controller | nginx 기반 컨트롤러가 요청을 처리하고 라우팅 |
172.31.0.0/20)에 속한 Node에 배치될 수 있음curl https://kubia.example.com 혹은 브라우저에서 해당 도메인에 접근하면 다음과 같은 흐름이 발생한다.

클라이언트는 먼저 kubia.example.com에 대한 IP를 조회한다.
kubia.example.com으로 GET 요청을 보냄Host 헤더는 라우팅에 사용됨Ingress Controller가 요청을 받아 해당 도메인의 규칙에 따라 Service로 전달
Service는 연결된 Pod 목록(Endpoints)을 참조하여 요청을 전달
Ingress Controller가 실제 요청을 해당하는 Pod 중 하나에 전달
즉, 새로운 Pod가 추가되거나 삭제될 때 Ingress Controller는 자동으로 이를 반영하여 라우팅을 보장
| 구성 요소 | 역할 |
|---|---|
| DNS | 도메인 이름을 클러스터 외부 IP(NodePort 등)로 매핑 |
| Ingress | 도메인/경로 기반 요청 라우팅 규칙 정의 |
| Ingress Controller | 실제로 NGINX 등을 통해 요청을 라우팅하는 컨트롤러 |
| Service | Pod 그룹을 하나의 엔드포인트로 묶어주는 추상화 |
| Endpoints | 실제 연결 가능한 Pod IP 목록 |