Overview
오늘은 Kubernetes Ingress에 대해 학습하고 정리해보겠다. Ingress는 클러스터 외부에서 내부 서비스로 HTTP 및 HTTPS 트래픽을 관리하는 핵심 컴포넌트이다.
Kubernetes에서 외부 트래픽을 내부 서비스로 안전하고 효율적으로 라우팅하는 가장 핵심적인 리소스 중 하나가 바로 Ingress다. 단순히 외부 접근을 허용하는 것을 넘어서, 트래픽의 흐름을 제어하고, SSL 종료, 도메인 기반 라우팅, URL path 기반 매핑 등 다양한 기능을 제공한다.
개발/운영 환경에서는 서비스가 많아질수록 URL 및 도메인 기반 라우팅이 필요해지며, 이때 Ingress를 적절히 활용하면 관리 복잡도를 줄이고 보안을 향상시킬 수 있다.
이 글에서는 Ingress의 개념, 역할, 설정 방법, 그리고 실전에서 자주 활용되는 패턴을 중심으로 정리해본다.

Ingress란?
Ingress는 클러스터 외부에서 클러스터 내부의 서비스로 HTTP 및 HTTPS 트래픽을 라우팅하는 역할을 한다.
주요 기능
- 클러스터 외부에서 서비스로 접속 가능한 URL 제공
- 로드 밸런싱을 통한 트래픽 분산
- SSL/TLS 종료(Offloading) 지원
- 이름 기반 가상 호스팅(Name-based Virtual Hosting) 가능
Ingress의 주요 개념 및 용어
1️⃣ 노드(Node)
- 클러스터를 구성하는 워커 머신
- 컨테이너화된 애플리케이션을 실행하는 단위
2️⃣ 클러스터(Cluster)
- 쿠버네티스에서 관리하는 노드 집합
- 클러스터 내 노드는 퍼블릭 인터넷에 직접 노출되지 않음
3️⃣ 에지 라우터(Edge Router)
- 클러스터 네트워크에 대한 방화벽 정책을 적용하는 라우터
- 클라우드 제공업체 또는 물리적 하드웨어에서 관리될 수 있음
4️⃣ 클러스터 네트워크(Cluster Network)
- 쿠버네티스 네트워킹 모델을 기반으로 클러스터 내부 통신을 지원하는 링크
5️⃣ 서비스(Service)
- 특정 파드(Pod) 집합을 식별하고 네트워크 접근을 가능하게 하는 쿠버네티스 오브젝트
- 클러스터 내부에서만 접근 가능한 가상 IP를 가질 수 있음
Ingress 동작 흐름
Ingress는 클라이언트 → LoadBalancer 또는 NodePort → Ingress Controller → Ingress Resource → Backend Service → Pod 순으로 트래픽을 전달한다.
이 흐름을 통해 외부 요청이 클러스터 내부로 유입되어 적절한 서비스로 전달되는 과정을 체계적으로 제어할 수 있다.
예: 사용자가 `https://example.com/api` 요청 → Ingress Controller가 `/api` 경로의 규칙에 따라 `my-api-service` 로 라우팅
Ingress 컨트롤러
Ingress는 단독으로 동작하지 않으며, 반드시 Ingress 컨트롤러가 필요하다. Ingress 컨트롤러는 Ingress 리소스를 기반으로 트래픽을 적절히 라우팅하는 역할을 수행한다.
대표적인 Ingress 컨트롤러
- NGINX Ingress Controller (가장 널리 사용됨)
- Traefik (경량화된 컨트롤러)
- HAProxy Ingress
- AWS ALB Ingress Controller (AWS 환경에서 ALB와 연동)
클라우드 환경에서의 Ingress 사용 팁
- GKE (Google Kubernetes Engine): Ingress 리소스를 만들면 자동으로 Google Cloud Load Balancer가 생성된다.
- EKS (AWS): AWS ALB Ingress Controller를 사용하여 ALB와 연동해 HTTPS, 인증서, path rule 등을 자동으로 구성 가능하다.
- AKS (Azure): Azure Application Gateway Ingress Controller(AAGIC)와 통합하여 layer 7 라우팅 및 WAF 기능 사용 가능.
클라우드 환경에 따라 기본 제공되는 LoadBalancer 리소스와 함께 Ingress를 활용하면, 보안 그룹, 인증서, WAF 등과의 통합이 수월하다.
Ingress 설정 예제
아래는 간단한 Ingress 리소스 YAML 예제이다. 이 설정은 example.com 도메인으로 들어오는 모든 트래픽을 my-service 서비스로 전달한다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
- `rules.host: example.com` 도메인으로 들어오는 트래픽 처리
- `path: /` 로 들어오는 요청을 `my-service` 로 라우팅
- `backend.service: my-service` 의 80번 포트로 트래픽 전달
실전 Ingress 구성 예시 - 멀티 서비스
spec:
rules:
- host: app.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- path: /web
pathType: Prefix
backend:
service:
name: web-service
port:
number: 3000
- 이 설정은 하나의 도메인에서 `/api` 경로는 API 서버로, `/web` 경로는 프론트엔드 서버로 각각 라우팅하는 전형적인 구조다.
Ingress vs. Service 차이점
| 비교 항목 | Ingress | Service |
| 주요 역할 | 외부 트래픽을 내부 서비스로 라우팅 | 내부 네트워크에서 파드(Pod) 간 통신을 지원 |
| 지원 프로토콜 | HTTP, HTTPS | TCP, UDP, HTTP, HTTPS |
| 로드 밸런싱 | 가능 | 가능 (Service Type에 따라 다름) |
| SSL/TLS 지원 | 지원 | 기본적으로 지원하지 않음 |
| 필요 컨트롤러 | 필요 (Ingress Controller) | 불필요 |
Ingress의 장점
✅ 서비스 단위로 복잡한 트래픽을 효과적으로 관리할 수 있음
✅ 이름 기반의 가상 호스팅을 활용하여 하나의 IP로 여러 서비스 운영 가능
✅ 로드 밸런싱 및 TLS 종료를 통해 보안 및 성능 개선 가능
✅ 외부 DNS 및 클라우드 환경과 쉽게 통합 가능
❗ Ingress 사용 시 주의사항
- Controller 설치 필수: Ingress 리소스만 선언하면 동작하지 않으며, 반드시 컨트롤러가 설치되어 있어야 한다.
- Host 충돌: 동일한 host를 여러 Ingress 리소스에서 정의할 경우 충돌이 발생할 수 있으므로 주의가 필요하다.
- TLS 인증서 관리: SSL/TLS를 사용할 경우 인증서 갱신 및 관리 작업이 필요하다. cert-manager를 함께 사용하는 것이 일반적이다.
🔚 마무리: Ingress는 Kubernetes의 외부 진입로이자 트래픽 제어의 핵심
Ingress는 단순한 외부 노출을 넘어서, 복잡한 트래픽 라우팅, 보안 설정, 멀티 서비스 운영 등을 가능하게 해주는 매우 강력한 리소스다.
적절한 Ingress Controller와 함께 TLS, Path, Host 기반 라우팅 규칙을 구성하면,
- 트래픽 분산과 인증 처리
- 멀티 테넌시 환경
- 보안 제어
등을 손쉽게 구현할 수 있다.
단, 클러스터 환경이나 서비스 특성에 맞는 Ingress Controller를 선택하고, 설정 충돌이나 인증서 관리 등 실무에서 자주 발생하는 이슈도 사전에 고려해야 한다.
➡ Kubernetes를 운영하는 모든 개발자와 운영자는 Ingress를 잘 이해하고 활용하는 것이 필수적인 역량이다.
Reference
- https://kubernetes.io/ko/docs/concepts/services-networking/ingress/
- https://kubernetes.github.io/ingress-nginx/
- https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-features
- https://aws.github.io/aws-load-balancer-controller/latest/
- https://cert-manager.io/docs/
'Container Orchestration > Kubernetes' 카테고리의 다른 글
| K8S 인증서 10년 만기 생성 방법 (2) | 2022.09.23 |
|---|---|
| kubectl 명령어 정리 (0) | 2022.08.10 |
| Kubernetes Probe (Liveness, Readiness, Startup) (0) | 2022.07.15 |
| Kubernetes 컨테이너 이미지 생성하기 (0) | 2022.05.10 |
| Kubernetes 클러스터 구축하기(kubespray) (0) | 2022.05.10 |