Ingress Controller
인그레스 컨트롤러 (Ingress Controller) 는 클러스터 외부에서 들어오는 HTTP/HTTPS 등 애플리케이션 트래픽을 내부 서비스로 라우팅하고, 다양한 라우팅 정책을 적용하는 네트워크 구성요소다. 특히, Kubernetes 환경에서 외부 요청을 내부 서비스로 전달하는 진입점 역할을 하는데 사용된다.
쿠버네티스 환경의 확장성과 보안을 유지하며, 네임 기반, 경로 기반, TLS 종료, 인증·인가, 부하 분산 등 많은 기능을 프록시 및 리버스 프록시 (Reverse Proxy) 구조로 제공한다. 고가용성 (High Availability) 과 자동화, 그리고 다양한 백엔드 서비스 지원이 특징이다.
등장 배경 및 발전 과정
마이크로서비스, 클라우드 네이티브로의 전환에 따라 서비스 경계가 복잡해졌다.
Kubernetes 는 내부적으로 Pod 간 통신을 ClusterIP 또는 NodePort 를 통해 지원하지만, 클러스터 외부에서 HTTP(S) 요청을 서비스로 라우팅하는 표준 메커니즘이 필요했다. 이에 따라 Ingress API가 도입되었고, 이를 실제로 처리하는 Ingress Controller가 등장했다.
- 초창기에는
kubectl port-forward
또는NodePort
로 외부 노출 - 복잡한 URL 패턴, 도메인 기반 라우팅이 불가능 → Ingress 리소스 정의 도입
- 쿠버네티스 1.1(2015) 에서 공식 인그레스 리소스 지원 시작, 엔터프라이즈 네트워크 환경에서 프로덕션 표준이 됨.
- 다양한 Controller 구현체가 오픈소스로 발전:
NGINX
,Traefik
,HAProxy
,Contour
,Istio Gateway
등
목적 및 필요성
세부 목표 | 필요성 |
---|---|
트래픽 진입점 집중 관리 | 외부에서 클러스터로의 엔트리포인트 일원화·보안 강화 |
동적 라우팅 정책 | 애플리케이션 이나 API 의 버전·경로별 트래픽 유연 제어 필요 |
SSL/TLS 종료, 인증, 권한 관리 | 통신 보안 및 접근 제어 자동화 |
운영/배포 효율성 | 서비스 배포·확장 시 엔드포인트 관리 단순화 |
→ 복잡한 마이크로서비스 환경에서 도메인 - 기반 라우팅, 보안, 트래픽 제어, 관측성까지 포함한 네트워크 진입 제어의 핵심 요소로 기능
핵심 개념
기본 개념
구분 | 개념 | 설명 |
---|---|---|
리소스 정의 | Ingress | 외부 HTTP/HTTPS 요청을 클러스터 내부 서비스로 라우팅하는 Kubernetes 리소스 선언 |
제어 컴포넌트 | Ingress Controller | Ingress 리소스를 감시하고, 실제 프록시 구성 (L7 트래픽 처리) 을 수행하는 구현체 |
구현체 | NGINX, Traefik, HAProxy 등 | 대표적인 Ingress Controller 구현. 로드 밸런서 혹은 프록시 기반으로 동작함 |
트래픽 처리 | Reverse Proxy | 외부 요청을 내부로 프록시하여 인증, TLS 종료, 경로 기반 라우팅 등 수행 |
확장성 지원 | Load Balancer | 외부에서 다수의 Ingress Controller 인스턴스로 분산 처리 가능 |
기능 지원 | Path/Host 기반 라우팅, TLS 종료, 인증, L7 Load Balancing | 주요 기능 요소 |
선언적 연결 | IngressClass | 여러 Ingress Controller 간 역할 분리 및 설정 매핑 |
심화 개념
Ingress Resource
역할: 클러스터 외부 요청 (HTTP/HTTPS) 을 내부 서비스로 라우팅하는 규칙 선언.
구성:
host
: 도메인 기반 구분 (example.com
)path
: 경로 기반 라우팅 (/api
,/admin
)backend
: 요청을 전달할 내부 서비스 (serviceName
,servicePort
)
예시:
|
|
ingressClassName
: 이 Ingress 는nginx
IngressClass 에 의해 처리됨.rewrite-target
: URL 경로 재작성 (예:/web/foo
→/foo
)rules
:host
와path
에 따라 요청을 특정 서비스로 라우팅
Ingress Controller
설명: Ingress 리소스를 감시 (watch) 하고, 이를 기반으로 실제 프록시 (L7) 설정을 구성.
동작 방식: Deployment 로 실행되며, 각 클러스터 노드에서 ingress 트래픽을 처리.
역할:
- 리버스 프록시로 외부 요청 수신
- TLS 인증서 적용
- 인증 헤더 삽입, CORS 등 보안 기능 적용
- 로깅, 레이트 리밋, 서킷 브레이커 등 고급 기능 포함 (Controller 마다 다름)
IngressClass
도입 목적: 멀티 Ingress Controller 환경에서 각 리소스를 어떤 Controller 가 처리할지 명시
구성 요소:
controller
: 예:k8s.io/ingress-nginx
parameters
: 커스텀 리소스 사용 가능
예시:
IngressClass
는 특정 Ingress 리소스를 어떤 Ingress Controller 가 처리할지 결정한다.controller
: 해당 클래스가 어떤 컨트롤러에 의해 처리되는지를 지정한다.k8s.io/ingress-nginx
는 NGINX Ingress Controller 의 기본값.
- 여러 Ingress Controller 를 병렬로 운영할 때 클래스 단위로 구분해 제어할 수 있다.
트래픽 라우팅 전략
기준 | 설명 |
---|---|
호스트 기반 | 도메인에 따라 트래픽을 분리: api.example.com , web.example.com |
경로 기반 | /api , /user 등 URL 경로에 따라 라우팅 |
헤더 기반 | 요청 헤더를 기반으로 특정 백엔드 선택 |
쿠키 기반 | 세션 스티키 적용을 위한 쿠키 라우팅 |
TLS 종료 (SSL Termination)
기능: HTTPS 요청을 Ingress Controller 에서 해제 후 내부에 HTTP 로 전달.
이점:
- 백엔드 서비스에서 인증서 처리 불필요
- 인증서 중앙 관리
구성: tls
필드를 통해 Secret 정의.
인증/인가 기능 연계
기본 지원:
- HTTP Basic Auth
- OAuth2 Proxy 연동
- 인증 헤더 삽입 (e.g.,
X-Forwarded-User
)
외부 인증 시스템 연동: OIDC, LDAP, 인증 미들웨어와 통합 가능
실무 구현과의 연관성
실무 요구사항 | 연관 핵심 기능 | 설명 |
---|---|---|
도메인/경로 기반 라우팅 | Host/Path 기반 라우팅 | 다수의 서비스에 대해 하나의 IP 로 요청을 분기하여 멀티 도메인 운영 혹은 다중 API Gateway 구성 가능 |
보안 통신 요구사항 | TLS 종료 | 인증서 중앙관리, 자동 갱신 (cert-manager) 로 인프라 보안 단순화 및 HTTPS 적용 비용 감소 |
제로 트러스트 아키텍처 | 인증·인가, IP 제한, 헤더 기반 필터링 | 외부 요청을 식별하여 서비스 접근 제한. OAuth2 Proxy, JWT 인증, RBAC 정책 연계 가능 |
트래픽 안정화 | L7 Load Balancing, Health Check | 백엔드 상태 감지 및 장애 자동 우회로 고가용성 확보. Traefik/NGINX 에서 커스텀 정책 가능 |
운영 효율성 | 선언형 구성 + 모니터링 연계 | YAML 로 라우팅 정책 명시 + Prometheus, Grafana 와 연계한 메트릭 수집 및 알림 |
서비스 스케일링 | Ingress 규칙 기반 자동 확장 | 새 서비스 추가 시 라우팅 규칙만 수정하면 배포 완료. 프록시 설정 재시작 없이 실시간 반영 가능 |
비용 최적화 | 클라우드 외부 LB 대체 | 퍼블릭 클라우드 비용이 높은 외부 LB 대신 Ingress Controller 사용으로 비용 절감 |
주요 기능 및 역할
주요 기능
기능 범주 | 항목 | 설명 |
---|---|---|
트래픽 제어 | Path/Host 기반 라우팅 | URL 경로 (/api , /admin ) 또는 도메인 (app.example.com ) 기준 분기 |
보안 처리 | TLS 종료 (SSL Termination) | HTTPS 트래픽을 Ingress 레이어에서 복호화하고 인증서를 중앙 관리 |
인증/인가 통합 | AuthN/AuthZ | 외부 인증 시스템 (OAuth2, OIDC, Basic Auth 등) 과 연동하여 인증/인가 처리 |
부하 분산 | Load Balancing | 다중 백엔드 인스턴스로 트래픽을 분산 (Round Robin, IP Hash 등 지원) |
URL 조작 | Rewrite / Redirect | 클라이언트 요청 URL 을 수정하거나 리다이렉션 (경로 정규화, 리디렉션 전략 등) |
고급 제어 | Rate Limiting / CORS / WAF | 요청 속도 제한, CORS 허용/차단, Web Application Firewall 연동 등 보안 제어 |
관찰 가능성 확보 | Metrics / Logs / Tracing | Prometheus, Fluentd, Jaeger 등과 연계하여 성능/보안/오류 모니터링 지원 |
주요 역할
역할 범주 | 항목 | 설명 |
---|---|---|
프록시 역할 | Reverse Proxy (L7) | 외부 클라이언트 요청을 내부 서비스로 전달하고 응답 반환 (L7 프록시로 동작) |
트래픽 제어 지점 | Cluster Entry Gateway | 클러스터 외부 요청을 수용하는 단일 진입점 역할 수행 |
정책 해석기 | Ingress 리소스 감시 및 적용 | YAML 로 정의된 Ingress 리소스를 감시하고 실시간으로 정책을 구성 요소에 반영 |
보안 경계 제공자 | Security Boundary Enforcer | TLS, 인증/인가, 접근제어 등의 보안 정책을 가장 앞단에서 시행 |
운영 가시성 제공자 | Observability Integrator | APM, 메트릭 수집, 로그 추적 등 운영 관찰 가능성 확보에 핵심 위치 |
DevOps 연계 지점 | CI/CD 및 GitOps 진입점 | Git 기반 YAML 선언을 통해 지속적 배포와 정책 자동화를 가능하게 함 |
기능 ↔ 역할 관계 매핑
기능 항목 | 연결되는 역할 항목 | 기능 - 역할 매핑 설명 |
---|---|---|
Path/Host 기반 라우팅 | Reverse Proxy, Entry Gateway | 경로/도메인 기준 요청을 내부로 전달하는 핵심 기능과 이를 중계하는 게이트웨이 역할을 연결 |
TLS 종료 | 보안 경계 제공자 | 인증서를 중앙에서 관리하고 복호화하는 보안 게이트 처리 기능 |
인증/인가 | 보안 경계 제공자 | 외부 인증 연동 또는 요청 제어를 통해 보안 경계 및 트러스트 확보 |
Load Balancing | 트래픽 제어 지점, 운영 가시성 제공자 | 요청을 다중 인스턴스로 효율적으로 분산함과 동시에 관찰 도구와 연계해 가용성 모니터링 가능 |
Metrics/Logs/Tracing | 운영 가시성 제공자, DevOps 연계 지점 | 관찰성을 제공하며, 운영 자동화 도구와 통합해 배포 및 트래픽 정책을 최적화함 |
Rewrite / Redirect | Reverse Proxy | 외부 요청 구조를 내부 API 스펙에 맞게 수정하거나 리다이렉션 처리 |
Ingress Controller 역할 기반 구성
flowchart TD %% 외부 사용자 UA(["사용자 (Client)"]) %% Ingress Controller IGW[["Ingress Controller<br/>(Reverse Proxy, Entry Gateway)"]] %% 보안 정책 계층 SEC[["보안 정책 계층<br/>(TLS 종료, 인증/인가, WAF)"]] SEC -->|TLS Termination<br/>JWT / OAuth2| IGW %% 트래픽 라우팅 RTG[["트래픽 라우팅<br/>(Path/Host 기반)"]] IGW --> RTG %% 부하 분산 처리 LBS[["부하 분산 처리<br/>(Load Balancer + Health Check)"]] RTG --> LBS %% 내부 백엔드 서비스 SVC1([서비스 A]) SVC2([서비스 B]) LBS --> SVC1 LBS --> SVC2 %% 모니터링 / 로깅 / 트레이싱 OBS[["관찰 가능성 계층<br/>(Metrics / Logs / Tracing)"]] IGW -->|Request Log| OBS SVC1 -->|App Metrics| OBS SVC2 -->|App Traces| OBS %% CI/CD와 선언형 정책 연계 GIT[(GitOps / CI-CD)] GIT -->|YAML 정책 배포| IGW UA -->|HTTPS 요청| SEC
계층 | 역할 설명 |
---|---|
사용자 (Client) | 클러스터 외부에서 HTTP/HTTPS 요청 발생 |
Ingress Controller | 클러스터 진입 지점이자 L7 프록시 역할 수행 (경로 해석, 인증/인가, TLS 종료 등) |
보안 정책 계층 | TLS 종료, 인증 토큰 검증, WAF 규칙 적용 등 외부 트래픽의 검증 수행 |
라우팅/로드 밸런싱 | Path/Host 기반 요청 분기 → Health Check 기반 백엔드 분산 처리 |
백엔드 서비스 | 실제 비즈니스 로직을 처리하는 서비스들. 마이크로서비스 구조 또는 단일 서비스 구조 모두 가능 |
관찰 가능성 계층 | 요청 로그, 지표, 트레이싱 등을 수집하여 Prometheus, Grafana, Jaeger 등과 연동 가능 |
GitOps/CI-CD 연계 | 선언형 YAML 로 Ingress 정책을 배포하고, 자동 재구성 및 일관된 정책 관리 실현 |
특징
카테고리 | 핵심 특징 | 설명 |
---|---|---|
확장성 | 수평 확장 가능 | 여러 Ingress Controller 인스턴스를 동시에 배포하여 트래픽 증가 대응 (Stateless 방식) |
유연성 | 다양한 라우팅 및 설정 지원 | Host/Path 기반 라우팅 외에도 Header, Cookie 등 정교한 제어 가능. Annotation, CRD 기반 커스터마이징 가능. |
표준 기반 운영 | Kubernetes 리소스 기반 동작 | Ingress 리소스를 watch 하여 동적 구성 반영. GitOps 및 YAML 선언적 구성 방식과 자연스럽게 통합 가능. |
플랫폼 독립성 | 클라우드/온프레미스 호환 | 표준 Kubernetes API 기반이므로 GKE, EKS, AKS, On-prem 등 모든 환경에서 동일 방식으로 동작 가능. |
보안 기능 내장 | TLS, 인증, IP 제한 등 | TLS termination, Let’s Encrypt 자동 갱신, OAuth2/JWT 연동, IP 화이트리스트 등 내장된 보안 정책 활용 가능. |
플러그인 아키텍처 | 미들웨어 및 모듈 연동 | 인증, 인증서, 로깅, WAF 등 기능을 플러그인으로 확장 가능 (예: Traefik Middleware, NGINX ModSecurity) |
다양한 구현체 | 오픈소스 및 상용 지원 | NGINX, HAProxy, Traefik, Istio, Kong 등 다양한 컨트롤러 선택 가능. 성능, 보안, 확장성에 따라 선택적으로 사용 가능 |
핵심 설계 원칙
범주 | 원칙 | 설명 |
---|---|---|
설계 철학 | 단일 진입점 (Single Point of Entry) | 모든 외부 트래픽은 Ingress Controller 를 통해 들어오며, 트래픽 제어와 보안 정책 적용의 중심 역할 수행 |
선언형 구성 (Declarative Configuration) | Kubernetes Ingress 리소스를 통해 라우팅, 보안, 인증 정책 등을 코드로 정의하고 GitOps 기반 관리 가능 | |
상태 비저장 설계 (Stateless Architecture) | 확장성과 무중단 배포를 위해 요청 상태를 저장하지 않음. 세션 스티키가 필요한 경우에는 외부 세션 스토어 (예: Redis) 연동 | |
관심사의 분리 (Separation of Concerns) | 트래픽 라우팅, 보안, 인증은 Ingress Controller 에서, 비즈니스 로직은 백엔드 서비스에서 수행 | |
보안 전략 | 보안 우선 접근 (Security First) | HTTPS 기본화, 인증/인가 필터, TLS 종료, WAF 연동, IP 제어 등 보안 강화 기능을 기본 제공 |
최소 권한 원칙 (Least Privilege) | 컨트롤러는 필요한 네임스페이스와 리소스만 접근하도록 설정하여 보안 영역 최소화 | |
운영 관점 | 플러그형 아키텍처 (Pluggable Architecture) | NGINX, Traefik, HAProxy, Envoy 등 다양한 Ingress Controller 로 교체 가능하며, 커스텀 CRD 및 모듈 확장 가능 |
장애 안전성 (Fail-Safe Defaults) | 잘못된 설정이나 인증 실패 시 기본적으로 요청 차단 → 오작동 방지와 보안 보장 | |
가시성 확보 (Observability by Default) | 기본적으로 메트릭, 로그, 트레이싱 연동을 고려하여 운영상의 문제 추적이 용이하게 설계됨 | |
서비스 디스커버리 연동 | Kubernetes 의 서비스/엔드포인트 기반으로 동적으로 백엔드 라우팅 가능 (K8s-native) |
Ingress 설계 원칙별 설정 예시
선언형 구성 (Declarative Configuration)
|
|
- 목적: GitOps 등과 연계 가능한 코드 기반 정책 관리
단일 진입점 (Single Point of Entry)
Ingress Controller 는 기본적으로 L7 Entry Point 역할을 수행하며, 클러스터 외부에서 진입하는 HTTP/HTTPS 트래픽의 유일한 관문으로 설정된다.
- 목적: Ingress Controller 1 곳에서 모든 외부 요청을 제어
TLS 종료 (Security First)
|
|
- 목적: HTTPS 암호화, 인증서 자동 관리 (cert-manager 연동)
인증/인가 (AuthN/AuthZ)
|
|
- 목적: OAuth2 Proxy 등 외부 인증 시스템과 연동
상태 비저장 설계 (Stateless Architecture)
Ingress Controller 자체는 상태를 저장하지 않으므로, 세션 스티키가 필요한 경우 외부 세션 스토리지(예: Redis) 를 이용한다.
- 목적: 사용자 세션을 외부에 저장하고 Ingress 는 상태를 유지하지 않음
가시성 확보 (Observability)
|
|
- 목적: Ingress 메트릭을 Prometheus 로 수집하여 Grafana 대시보드 구성
최소 권한 설정 (Least Privilege)
- 목적: Ingress Controller 가 필요한 리소스만 접근하도록 제한
6.6 주요 원리 및 작동 원리
제어 루프 패턴 (Control Loop Pattern):
graph TD A[사용자가 Ingress 리소스 생성] --> B[Kubernetes API Server] B --> C[Ingress Controller가 변경 감지] C --> D[현재 상태와 원하는 상태 비교] D --> E[프록시 설정 업데이트] E --> F[NGINX/HAProxy/Traefik 재로드] F --> G[트래픽 라우팅 적용] G --> H[상태 피드백] H --> C
트래픽 처리 흐름:
graph LR A[🌐 외부 클라이언트] --> B["LB 또는 NodePort (External Access)"] B --> C["Ingress Controller Pod (NGINX/Envoy)"] C --> D["Ingress 리소스 규칙 평가 (host/path)"] D --> E["ClusterIP Service (Backend Selector)"] E --> F["Pod (애플리케이션 컨테이너)"]
작동 원리는 Kubernetes 의 Watch API 를 활용한 이벤트 기반 처리로, Ingress 리소스 변경을 실시간으로 감지하여 프록시 설정을 동적으로 업데이트한다.
Ingress 작동 흐름:
- 사용자가 Ingress 리소스를 정의 (
host
,path
,backend
포함) - Ingress Controller 는 API Server 를 통해 리소스를 감시
- Controller 는 자신이 사용하는 로드 밸런서 (NGINX, Envoy 등) 의 설정을 업데이트
- 외부에서 도착한 요청을 보고 적절한 서비스로 전달
sequenceDiagram participant User participant K8sAPIServer participant IngressController participant Proxy participant BackendService %% 리소스 정의 및 처리 흐름 User->>K8sAPIServer: Ingress 리소스 생성 (host/path/backend) IngressController->>K8sAPIServer: Watch Ingress Resource IngressController->>IngressController: 프록시 설정 업데이트 (NGINX, Envoy) %% 실제 요청 처리 흐름 User->>Proxy: HTTP 요청 (Host/Path) Proxy->>IngressController: 요청 전달 및 매칭 IngressController->>BackendService: 트래픽 전달 (서비스 선택 → Pod)
구조 및 아키텍처
flowchart TD %% 외부 요청 계층 Client[사용자 클라이언트] DNS[DNS] LB[Cloud Load Balancer] %% Ingress Controller 구성 subgraph Ingress_Controller["Ingress Controller (Cluster Internal)"] APIWatcher[API Watcher] Controller["Controller Process<br/>(client-go)"] Cache["Resource Cache<br/>(인메모리 상태)"] Proxy["Proxy Engine<br/>(NGINX/HAProxy/Envoy)"] CRD["Custom Resources<br/>e.g., VirtualServer, Middleware"] Metrics["Metrics Exporter<br/>/metrics"] Webhook["Admission Controller<br/>(Validating Webhook)"] end %% 설정 리소스 계층 IngressRes[Ingress Resources] Secret[TLS Secret] ConfigMap[ConfigMap] CRDDef["CRDs (VirtualServer, Policy 등)"] %% Kubernetes 서비스/파드 계층 SvcA[Service A] SvcB[Service B] PodA1[Pod A1] PodA2[Pod A2] PodB1[Pod B1] %% 모니터링 도구 Prometheus[(Prometheus)] %% 요청 흐름 Client --> DNS --> LB --> Proxy %% 컨트롤러 구성 흐름 IngressRes --> APIWatcher --> Controller APIWatcher --> Webhook Controller --> Cache Controller --> CRD Controller --> Proxy Controller --> Metrics Controller --> ConfigMap Controller --> Secret CRDDef --> CRD %% 서비스 연결 Proxy --> SvcA --> PodA1 SvcA --> PodA2 Proxy --> SvcB --> PodB1 %% 메트릭 흐름 Metrics --> Prometheus
계층 | 설명 |
---|---|
External 계층 | 클라이언트 요청이 DNS 를 거쳐 클라우드 로드 밸런서에 도달 |
Ingress Controller 계층 | 요청을 받아 실제 라우팅을 처리하는 핵심 계층으로 Controller, Proxy, Webhook, Metrics Exporter 포함 |
Kubernetes 설정 리소스 | Ingress Resource, Secret, ConfigMap, CRD 등으로 구성, 컨트롤러가 이를 감시하고 설정에 반영 |
서비스 계층 | 내부 Kubernetes 서비스 및 파드로 트래픽 전달 |
관찰 가능성 계층 | 메트릭을 Prometheus 로 수집하여 모니터링 가능 |
구성 요소
구성 범주 | 구성 요소 | 기능 | 역할 | 특징 |
---|---|---|---|---|
필수 | Controller Process | Kubernetes API 모니터링 및 설정 관리 | Ingress 리소스 변경 감지 → 프록시 설정 반영 | Go 기반, client-go 사용, 실시간 동기화 |
Proxy Engine | 실제 HTTP/HTTPS 트래픽 처리 및 라우팅 | 요청 수신 → 백엔드 서비스 전달 | NGINX, HAProxy, Envoy 등 pluggable 구현체 | |
Resource Cache | 클러스터 리소스 정보 로컬 저장 | 빠른 설정 참조 및 API 서버 부하 감소 | 인메모리 캐시, 컨트롤러 내부에서 실시간 갱신 | |
선택 | Metrics Exporter | Prometheus 형식의 메트릭 노출 | 트래픽/지연/오류율 등 모니터링 지표 제공 | /metrics 엔드포인트, Prometheus/Grafana 연동 가능 |
Admission Controller | Ingress 리소스 유효성 검증 | 잘못된 설정 차단 및 클러스터 안정성 확보 | 웹훅 기반, 설정 무결성 보장, Validation/Mutation 지원 | |
Custom Resource Definitions (CRD) | 벤더별 고급 기능 확장 | 표준 Ingress 외 고급 라우팅/보안 정책 구현 | VirtualServer , Middleware , Policy 등 컨트롤러별 CRD 정의 가능 |
구현 기법 및 방법
카테고리 | 구현 방식/기법 | 설명 | 대표 예시 / 리소스 구성 |
---|---|---|---|
배포 형태 | Deployment 패턴 | Kubernetes Deployment 로 구성. ReplicaSet 기반 수평 확장 및 복구 가능 | Deployment + Service 구성 |
DaemonSet 패턴 | 각 노드에 하나씩 Ingress Controller 배포. 직접 NodePort 접근 시 활용 | DaemonSet + NodePort , 주로 로컬 트래픽에 유리 | |
Helm Chart 배포 | 배포, 업그레이드 자동화. values.yaml 을 통한 커스터마이징 가능 | helm install ingress-nginx , traefik/traefik 등 | |
Operator 기반 설치 | CRD + Controller 로 구성된 설치 자동화 방식. 상태 기반 운영이 가능 | Istio, cert-manager, Argo CD 등과 유사 방식 | |
리소스 구성 | Ingress 리소스 선언 (YAML) | Ingress 오브젝트를 정의하여 라우팅 정책 설정 | kind: Ingress , spec.rules 등 구성 |
Annotation 기반 설정 | 구현체별 고유 기능을 어노테이션으로 설정. 주로 NGINX 등에서 활용 | nginx.ingress.kubernetes.io/rewrite-target 등 | |
CRD 기반 확장 | IngressClass, Gateway API, VirtualService 등으로 세밀한 정책 설정 가능 | Istio 의 VirtualService, Gateway API 의 HTTPRoute 등 | |
보안 구성 | TLS Termination | HTTPS 종단 처리. 인증서 자동 갱신 및 TLS 설정 포함 | cert-manager 연동, Let’s Encrypt 사용 |
인증 및 접근 제어 | JWT, OAuth2 Proxy, IP 화이트리스트 등 통합 | auth-url , whitelist-source-range 등 | |
운영 도구 | 로깅 및 모니터링 | Proxy 엔진의 메트릭을 Prometheus, Grafana 와 연동하여 모니터링 | nginx_vts , traefik_metrics , Prometheus Exporter 등 |
GitOps 연동 | YAML 기반 선언적 관리 → GitOps 툴 (ArgoCD, Flux 등) 로 연동하여 자동 배포/추적 가능 | values.yaml 으로 Git 저장소에 구성 관리 |
요약 정리
핵심 항목 | 요약 설명 |
---|---|
배포 방식 | Deployment, DaemonSet, Helm, Operator 등 다양한 배포 전략이 존재 |
설정 방식 | Ingress 리소스, Annotation, CRD 등을 통해 설정 가능 (표준/고급 라우팅 모두 지원) |
보안 및 인증 | TLS, 인증서 관리, 접근 제어 등의 기능이 내장되어 있음 |
운영/관측 도구 | Prometheus/Grafana 연동, GitOps 기반 선언적 관리 가능 |
배포 형태
구현 방식 | 특징 | 용도 | 자동화 연동 |
---|---|---|---|
Deployment | 수평 확장 및 고가용성 보장 | 일반 클러스터 전반에 적합 | GitOps, CI-CD |
DaemonSet | 노드별 배포, 지연 최소화 | 로컬 처리 또는 Bare Metal 환경 | kubectl, ArgoCD |
Helm Chart | 배포 자동화 및 파라미터화된 설치 | 운영 효율성과 유지보수가 필요한 환경 | Helm, GitOps |
Operator 기반 | 상태 관리 및 선언적 리소스 처리 자동화 | 정책 중심 관리 및 플랫폼 서비스 운영환경 | Operator SDK, GitOps |
Deployment 패턴
특징: ReplicaSet 기반 수평 확장 가능
장점: 롤링 업데이트, 자동 복구, 고가용성 확보
적용: 대부분의 Ingress Controller 기본 배포 방식
아키텍처 다이어그램:
graph TD subgraph Kubernetes Cluster LB[External LoadBalancer] svc["Service (type=LoadBalancer)"] dep[Deployment: Ingress Controller] pod1[Pod A] pod2[Pod B] pod3[Pod C] end LB --> svc svc --> pod1 svc --> pod2 svc --> pod3
배포 파이프라인 예시 (GitOps 기반):
|
|
구현 예시 (YAML):
|
|
DaemonSet 패턴
특징: 모든 노드에 하나의 Pod 을 배포
장점: 노드 로컬 처리로 지연 최소화, 외부 NodePort 연동에 적합
적용: 성능 중심 환경, Bare Metal 환경
아키텍처 다이어그램:
graph TD user[Client] user --> node1[Node 1] user --> node2[Node 2] user --> node3[Node 3] subgraph Node 1 D1[DaemonSet Pod] end subgraph Node 2 D2[DaemonSet Pod] end subgraph Node 3 D3[DaemonSet Pod] end
배포 파이프라인 예시 (CI-CD 방식):
구현 예시 (YAML):
Helm Chart 배포
특징: values.yaml 을 기반으로 선언적 배포
장점: 재사용성, 업그레이드 편의, 환경 분리 쉬움
적용: 대부분 Helm 공식 Chart 제공 (NGINX, Traefik 등)
아키텍처 다이어그램:
flowchart TB Dev[DevOps Engineer] --> GitHub[Helm Chart Repo] GitHub --> CI[CI Pipeline] CI --> K8s[Kubernetes Cluster] K8s --> ingress["Ingress Controller (Helm Release)"]
배포 파이프라인 예시 (Helm + GitOps):
구현 예시 (values.yaml):
Operator 기반 설치
특징: CRD + 컨트롤러로 구성
장점: 상태 기반 관리, 자동 복구 및 정책 중심 운영
적용: Istio, cert-manager, ArgoCD 등에서 광범위 사용
아키텍처 다이어그램:
graph TD cr[Custom Resource: IngressPolicy] --> op[Ingress Operator] op --> k8sres[Kubernetes Resources: Deployment, Service]
배포 파이프라인 예시 (Operator SDK + GitOps):
구현 예시 (Custom Resource + CRD):
리소스 구성
구현 방식 | 개념 요약 | 장점 | 한계/주의사항 |
---|---|---|---|
Ingress 선언 | 기본 Kubernetes 리소스 | 간단하고 빠르게 적용 가능 | 복잡한 정책 적용에는 한계 |
Annotation 설정 | Ingress 에 구현체별 기능을 주입 | 인증/리다이렉트 등 특수 기능 지원 | 구현체 의존성 높음 (이식성 ↓) |
CRD 기반 확장 | Gateway API, VirtualService 등 사용 | 구조 분리, 고급 기능, 정책 제어 가능 | 복잡도 증가, CRD/컨트롤러 선 설치 필요 |
Ingress 리소스 선언 (YAML)
- Kubernetes 기본 제공 리소스인
Ingress
를 선언하여 라우팅 규칙 설정 - Host/Path 기반으로 트래픽을 백엔드 서비스로 전달
아키텍처 다이어그램:
graph TD client[Client Request] ingress[Ingress Resource] svc[Backend Service] pod["Pod (App)"] client --> ingress ingress --> svc svc --> pod
배포 파이프라인 예시 (GitOps 기반):
|
|
구현 예시 (YAML):
|
|
Annotation 기반 설정
Ingress
메타데이터에 어노테이션을 추가하여 컨트롤러별 특수 기능을 선언적으로 설정- 예: 리다이렉션, 인증, 캐싱 등
아키텍처 다이어그램:
graph TD ingress[Ingress Resource w/ Annotation] ctrl[Ingress Controller] action["특수 기능 적용 (예: 리다이렉션, Auth)"] svc[Backend Service] ingress --> ctrl ctrl --> action action --> svc
배포 파이프라인 예시 (Helm + values override):
구현 예시 (YAML):
|
|
CRD 기반 확장 (예: Gateway API, Istio VirtualService 등)
- 기본 Ingress 기능을 넘는 복잡한 라우팅, 정책, TLS, 인증 등의 기능을 위해 CRD(Custom Resource) 기반 확장
- Gateway API, Istio, Traefik 등이 활용
아키텍처 다이어그램 (Gateway API 기반 예시):
graph TD client[Client] gw["Gateway (CRD)"] route["HTTPRoute (CRD)"] svc[Service] client --> gw gw --> route route --> svc
배포 파이프라인 예시 (Operator + CRD 등록 후 GitOps):
구현 예시 (HTTPRoute + Gateway):
|
|
보안 구성
보안 구성 방식 | 개요 | 장점 | 한계 또는 고려사항 |
---|---|---|---|
TLS Termination | Ingress 에서 HTTPS 종료 | HTTPS 보안 확보, 인증서 자동화 | 백엔드와의 통신 보안은 별도 고려 필요 |
OAuth2/JWT 인증 | 인증 프록시와 연동하여 사용자 인증 수행 | 외부 인증 시스템 통합, 인증 확장성 확보 | 인증 프록시 구성 필요, 리다이렉션 구성 필요 |
IP 화이트리스트 | 클라이언트 IP 기반 접근 제한 | 보안 강화, 내부망 제한 서비스에 적합 | 동적 IP 환경에서 불편, VPN 고려 필요 |
TLS Termination
- Ingress Controller 에서 HTTPS 요청의 TLS 암호화를 해제하고, 백엔드에는 HTTP 로 전달하는 방식
- 인증서는 Ingress Controller 또는 cert-manager 를 통해 자동 관리 가능
아키텍처 다이어그램:
sequenceDiagram participant Client participant Ingress participant Backend Client->>Ingress: HTTPS Request (TLS) Ingress->>Ingress: TLS Termination (SSL 해제) Ingress->>Backend: HTTP Request (내부 통신)
배포 파이프라인 예시 (cert-manager + GitOps):
|
|
구현 예시 (Ingress + 인증서 자동 적용):
|
|
인증 및 접근 제어
JWT 또는 OAuth2 인증 프록시
- 인증은 Ingress 앞단 또는 사이드카 형태의 인증 프록시에서 수행 (예: oauth2-proxy)
- 사용자 인증 후
Authorization
또는ID Token
전달
아키텍처 다이어그램 (oauth2-proxy 기반):
sequenceDiagram participant Client participant Ingress participant OAuth2-Proxy participant Backend Client->>Ingress: HTTP Request Ingress->>OAuth2-Proxy: 인증 요청 OAuth2-Proxy->>OAuth Server: Redirect + Token 요청 OAuth Server-->>OAuth2-Proxy: JWT/Access Token OAuth2-Proxy-->>Ingress: 인증 완료 Ingress->>Backend: 요청 전달 (with Header)
배포 파이프라인 예시 (Helm 으로 oauth2-proxy 설치):
구현 예시 (Ingress + External Auth):
|
|
IP 화이트리스트 기반 접근 제어
- 특정 IP 만 접근 가능하도록 제한
- 주로 프라이빗 네트워크나 내부 시스템용으로 사용
아키텍처 다이어그램:
flowchart TD Client1[Client IP: 1.2.3.4] Client2[Client IP: 5.6.7.8] ingress[Ingress Controller] svc[Backend Service] Client1 --> ingress Client2 -. blocked .-> ingress ingress --> svc
구현 예시 (YAML Annotation 방식):
|
|
운영 도구
구현 방식 | 개요 | 장점 | 고려사항 |
---|---|---|---|
로깅 및 모니터링 | 메트릭 및 로그를 수집하여 관찰성 확보 | 성능/장애 모니터링, 알림, 추세 분석 가능 | Prometheus Operator, Grafana 구성 필요 |
GitOps 연동 | Git 저장소 기반 선언형 배포 자동화 | 실시간 동기화, 감사 이력 관리, 충돌 방지 | Argo CD/Flux 설치 및 관리 필요, 브랜치 전략 관리 필요 |
로깅 및 모니터링
- Ingress Controller(NGINX, Traefik 등) 의 메트릭과 로그를 수집하여 Prometheus, Grafana, Loki 등으로 시각화 및 경보 설정
- 주요 관찰 지표: 요청 수, 지연 시간, 에러율, 4xx/5xx 상태코드 등
아키텍처 다이어그램:
flowchart TD client[Client Request] --> ingress[Ingress Controller] ingress --> backend[App Service] ingress --> prometheus["Prometheus (Metrics Export)"] ingress --> loki["Loki (Log Export)"] prometheus --> grafana[Grafana Dashboard] loki --> grafana
배포 파이프라인 예시 (Helm + values.yaml):
|
|
설정 키 | 의미 | 주요 대상 | 결과 효과 |
---|---|---|---|
metrics.enabled | 메트릭 활성화 | NGINX Exporter | Prometheus 수집 가능 |
serviceMonitor.enabled | ServiceMonitor CR 생성 | Prometheus Operator | 자동 수집 대상 등록 |
additionalLabels.release=prometheus | 라벨 매칭 | Prometheus Helm release | CR 자동 감지 조건 충족 |
enable-access-log | 접근 로그 기록 | NGINX | 요청 로그 추적 가능 |
log-format-escape-json | JSON 로그 출력 | Loki/FluentBit 등 | 파싱 최적화 |
logLevel=info | 로그 레벨 설정 | Ingress Controller | 적절한 운영 로그 제공 |
구현 예시:
- values.yaml (모니터링 + 로깅)
|
|
- Prometheus Operator 설치 시 자동 감지
- Grafana 에서 대시보드 템플릿:
NGINX Ingress Controller dashboard (ID: 9614)
사용 가능
GitOps 연동
- Ingress 리소스 및 관련 YAML 파일을 Git 저장소에 선언하고, Argo CD 또는 Flux 등 GitOps 툴을 통해 자동으로 Kubernetes 클러스터에 적
- 구성 변경 시 Git commit → 자동 동기화 → 변경 반영
아키텍처 다이어그램:
flowchart TD dev[Developer Push] --> git[Git Repository] git --> argo[Argo CD Controller] argo --> cluster[Kubernetes Cluster] cluster --> ingress[Ingress + TLS + Policies]
배포 파이프라인 예시 (Argo CD Application):
|
|
구현 예시 (디렉토리 구조 예시):
- Git 저장소에 선언된 리소스를 기준으로 Argo CD 가 주기적으로 상태 감시
kubectl describe application ingress-nginx
로 상태 점검 가능
장점
카테고리 | 항목 | 설명 |
---|---|---|
트래픽 관리 | 트래픽 라우팅 통제 | Host, Path 기반의 세밀한 라우팅 제어 가능 |
트래픽 집약 관리 | 외부 요청 진입점을 단일화해 라우팅과 정책 적용을 중앙 집중화 | |
중앙집중식 운영 | 모든 라우팅 정책을 Ingress 리소스로 선언하여 일괄 관리 가능 | |
보안 | TLS 종료/SSL 지원 | HTTPS 요청을 Ingress 레벨에서 해제하여 백엔드 보안 및 성능 확보 |
보안 정책 적용 | 인증, IP 화이트리스트, WAF, JWT 등 다양한 보안 정책을 프록시 수준에서 통합 적용 | |
자동화 및 DevOps | 선언적 구성 | YAML 기반 설정으로 GitOps 및 CI/CD 자동화에 최적화됨 |
DevOps 연계 | 파이프라인과 쉽게 통합 가능하여 배포/운영 자동화에 용이 | |
확장성 및 유연성 | 수평 확장 | Ingress Controller 는 여러 인스턴스로 확장 가능하며 트래픽 증가에 유연 대응 |
플랫폼 호환성 | NGINX, Traefik, ALB 등 다양한 프록시/로드밸런서와 연동 가능 | |
비용 효율성 | 클라우드 비용 절감 | 단일 외부 LoadBalancer 로 다수 서비스 연결 시 비용 절감 (특히 L4 대비) |
운영 단순화 | 모니터링/로깅 일원화 | 진입점에서 모든 요청을 수집하고 관찰할 수 있어 운영 복잡성 감소 |
요약 정리
항목 | 내용 요약 |
---|---|
트래픽 제어 | 경로 기반 정교한 라우팅과 중앙 집중식 트래픽 통제가 가능함 |
보안 강화 | TLS 종료, 인증, WAF 등의 정책을 진입점에서 통합 적용 |
자동화 최적화 | YAML 기반 선언형 구성으로 GitOps 및 DevOps 환경에 이상적 |
확장성과 유연성 | 다수 프록시 구현체와 호환되며, 수평 확장으로 트래픽 증가에도 안정 대응 |
비용 절감 효과 | 단일 LoadBalancer 구성으로 인프라 비용을 효율적으로 절감 가능 |
운영 단순화 | 단일 진입점에서의 모니터링/로깅은 운영 부담을 줄이고 문제 진단을 단순화함 |
단점과 문제점 그리고 해결방안
단점
구분 | 항목 | 설명 | 해결책 |
---|---|---|---|
구조적 한계 | 단일 장애점 | Ingress Controller 장애 시 전체 서비스 접근 차단 | 고가용성 구성, 다중 Zone/Replica 배포 |
L7 전용 한계 | TCP/UDP 등의 L4 트래픽 미지원 | LoadBalancer 서비스 사용, Gateway API 연동 | |
성능/확장 | 성능 병목 | 모든 트래픽이 Ingress 를 거치며 부하 집중 | 수평적 확장 (HPA), 로드 밸런서 최적화 |
리소스 오버헤드 | 프록시 구성 자체가 CPU/메모리 리소스 사용 많음 | 요청 제한 설정, 자원 할당 최적화, 컨트롤러 수평 확장 | |
운영 복잡도 | 설정 복잡성 | 다양한 어노테이션, 인증 정책, 라우팅 설정 등 YAML 구성 복잡 | 템플릿/툴링 기반 관리, Helm/Kustomize 활용 |
진단/디버깅 난이도 | 설정 오류나 라우팅 문제 발생 시 원인 파악이 어려움 | 접근 로그 활성화, 로깅/메트릭 도구 연계 (Loki, Prometheus, Grafana) | |
표준화 문제 | 구현체 간 설정 차이 | NGINX, Traefik 등 컨트롤러마다 기능·어노테이션 상이 | Gateway API 기반 구성으로 일관성 확보, 벤더 중립 설정 구조 사용 |
- 구조적 단점은 고가용성 미지원 및 L7 한계, 성능 단점은 병목/오버헤드, 운영 측면에서는 설정 복잡성과 진단 어려움, 플랫폼 측면에서는 벤더 종속성이 대표적이다.
- 해결방안은 수평 확장, 템플릿화, 표준 API 활용, 관찰성 도구 연계를 통해 보완 가능하다.
문제점
구분 | 항목 | 원인 | 영향 | 탐지 및 진단 | 예방 방법 | 해결 방법 및 기법 |
---|---|---|---|---|---|---|
설정 충돌 | 라우팅 설정 충돌 | 동일 host/path 중복 Ingress 정의 | 트래픽 라우팅 오류 | kubectl describe , 로그 확인, CI 정적 분석 | 네이밍 정책, 네임스페이스 분리 | Admission Controller, GitOps 테스트 |
보안 이슈 | 인증서 만료 | cert-manager 자동화 실패, 만료 주기 누락 | HTTPS 통신 불가 | Prometheus 알림, cert-manager 이벤트 로그 | 인증서 갱신 주기 점검 | 자동화 구성 점검, Let’s Encrypt 연동 |
신뢰성 저하 | 라우팅 누락 | Path 정의 누락, 오타 등 YAML 설정 실수 | 특정 서비스 접근 불가 | Ingress 상태 확인 (describe ), Canary 테스트 | GitOps 배포 시 검증 단계 추가 | Pre-deploy 테스트 |
성능 문제 | 자원 과다 사용 | 트래픽 증가, 다수 라우팅 규칙으로 컨트롤러 부하 증가 | 노드 자원 소진, 성능 저하 | 메트릭 수집 (Prometheus), HPA 트리거 확인 | 요청 수 제한, 리소스 할당 조정 | 수평 확장 (HPA), 캐시 최적화 |
취약점 노출 | 보안 취약점 노출 | NGINX Ingress 취약점 (예: CVE-2025-1974) 등 | 권한 상승, 보안 침해 가능성 | 보안 취약점 스캐너, 이미지 정책 적용 | 최신 이미지 적용 | 패치 적용, 자동 업데이트 파이프라인 구축 |
- 주요 문제는 설정 충돌, 인증서 자동화 실패, 트래픽 누락, 리소스 과다 사용, 보안 취약점 노출로 나뉘며
- 예방은 CI 검증 파이프라인, 모니터링/경보 시스템, 최신 버전 유지, 리소스 제한 설정 등으로 강화할 수 있다.
- 해결은 Admission Webhook, cert-manager 자동화, 정적 분석, 메트릭 기반 스케일링 등 실무 도구와 연계하여 진행해야 한다.
도전 과제
카테고리 | 도전 과제 | 원인 또는 배경 | 주요 영향 | 해결 방안/기법 |
---|---|---|---|---|
확장성 | 수천 개 Ingress 처리 시 성능 저하 | YAML 수 증가, Controller sync 부하 증가 | Ingress 적용 지연, 라우팅 지연 | IngressClass 분리, CRD 스코핑, 캐시 최적화 |
보안 | 인증서/인증 설정 누락 | 인증서 자동화 실패, 인증 정책 누락 | HTTPS 불가, 서비스 노출 위험 | cert-manager + Prometheus 알림, fallback 인증서 구성 |
보안 | 외부 노출로 인한 공격 표면 증가 | 공용 도메인 사용, 취약 컨트롤러 이미지 | 클러스터 침해, 민감 정보 유출 | WAF 연계, 최신 패치 적용, 제로 트러스트 네트워크 적용 |
운영 자동화 | 멀티 클러스터 간 정책/설정 동기화 | 클러스터 분산에 따른 DNS/리소스 연계 어려움 | 정책 불일치, 트래픽 손실 | ExternalDNS , Federated CRD , GitOps 자동화 도입 |
운영 자동화 | 실시간 정책 반영 어려움 | 컨트롤러 재시작 필요, 동적 업데이트 미흡 | 다운타임 발생, 릴리스 속도 저하 | Canary 배포, Gateway API 활용, Declarative Patch 적용 |
가시성/디버깅 | 라우팅 오류 디버깅 난이도 | NGINX 기본 로그 부족, 설정 복잡 | 라우팅 실패 원인 파악 어려움 | OpenTelemetry, JSON structured logging, Trace ID 삽입 |
복잡도 | 컨트롤러별 설정 차이 | Traefik/NGINX/HAProxy 간 기능, 어노테이션 상이 | 설정 이식성 저하, 유지보수 복잡화 | Gateway API 기반 추상화, 공통 Helm Chart/CRD 사용 |
성능 | 고속 트래픽 변화 대응 어려움 | 트래픽 급증에 대한 오토스케일 한계, 단일 엔트리 포인트 구성 | 요청 처리 지연, 서비스 지연 시간 증가 | HPA(VPA), 캐싱 계층 추가, 분산 프록시 배포 |
L4-L7 혼합 | TCP/UDP 라우팅 미지원 | Ingress(L7 전용) 의 구조적 한계 | WebSocket, DB 등 일부 서비스 사용 불가 | L4 전용 Service/LoadBalancer, Gateway API 확장 |
글로벌 라우팅 | 리전/클러스터 간 분산 서비스 구성 어려움 | 글로벌 트래픽에 대한 정책 기반 라우팅 미흡 | 리전별 트래픽 불균형, DR 구성 복잡 | 글로벌 DNS, Geo-aware LB, External DNS + 정책 기반 라우팅 적용 |
- 확장성과 성능 측면: Ingress 리소스 수가 많을 경우 컨트롤러의 성능 병목 발생 →
IngressClass
, CRD 분리, 수평 확장이 해법 - 보안 측면: 인증서 자동화 실패, 외부 노출로 인한 공격 위험 →
cert-manager
, WAF, 패치 적용, 제로 트러스트 접근 - 운영 자동화: 멀티 클러스터 환경, 정책 실시간 반영 어려움 → GitOps, ExternalDNS, Gateway API 기반 자동화 구조 필요
- 가시성과 디버깅: 라우팅 문제 추적 어려움 → 로그 구조화 (JSON), OpenTelemetry, Trace 연계 필요
- 복잡성과 이식성: 컨트롤러별 설정 편차 존재 → Gateway API 를 통한 표준화로 해결 가능
- 하이브리드 트래픽 (L4/L7): 기존 Ingress 로 처리 어려움 → LoadBalancer 서비스 또는 Gateway API 연동 필요
분류 기준에 따른 종류 및 유형
분류 기준 | 유형 | 설명 | 대표 제품 |
---|---|---|---|
프록시 엔진 | NGINX 기반 | 안정성과 성숙도 높음, L7 HTTP 중심 라우팅 지원 | NGINX Ingress Controller, NGINX Plus |
Envoy 기반 | 클라우드 네이티브, 고성능, Istio/Gateway API 와 연동 가능 | Contour, Istio Gateway, Gloo Gateway | |
Traefik 기반 | 라이트한 라우팅 프록시, 미들웨어 내장, 빠른 동적 구성 | Traefik Proxy | |
HAProxy 기반 | 고성능 L4/L7 하이브리드 프록시 | HAProxy Ingress Controller | |
배포 방식 | Deployment | 중앙 집중식 컨트롤러 실행 방식, 확장성 용이 | 대부분의 Ingress Controller |
DaemonSet | 각 노드마다 실행, 호스트 네트워크 직접 접근 가능 | 고정 IP 라우팅, 저지연 환경에 적합 | |
플랫폼 연동 | 클라우드 네이티브 (Managed) | 퍼블릭 클라우드에서 제공하는 관리형 Ingress | AWS ALB, GCP Load Balancer, Azure AGIC |
인클러스터 (Self-managed) | 쿠버네티스 내부에서 직접 실행 및 구성 | NGINX OSS, Traefik, Contour 등 | |
트래픽 프로토콜 | L7 (HTTP/HTTPS/gRPC) 지원 | Path/Host 기반 고급 라우팅 가능 | NGINX, Envoy, Traefik |
L4 (TCP/TLS) 지원 | L7 프록시보다 단순하지만 낮은 레벨의 트래픽 제어 가능 | HAProxy, 일부 Envoy 구성 | |
설정 방식 | Annotation 기반 | 기본 Kubernetes Ingress 구조, 유연성은 낮지만 간단함 | NGINX OSS, AWS ALB |
CRD 기반 | Gateway API, VirtualService 등 확장성과 명시성 높음 | Istio, Gloo Gateway, Contour |
배포 방식
- Deployment 방식은 확장성과 배포 유연성에 좋으며, DaemonSet은 각 노드에 직접 배포되어 특정 네트워크 환경에서 성능적으로 유리함
플랫폼 연동
- 클라우드 네이티브 Ingress Controller는 퍼블릭 클라우드에 최적화돼 있고, 보통 부하 분산기 (LB) 와 긴밀히 통합됨
- 인클러스터 방식은 오픈소스 및 커뮤니티 기반으로 자율성과 커스터마이징에 강함
트래픽 레벨
- 대부분의 Ingress Controller 는 HTTP(S) 라우팅 중심이지만, 일부는 TCP/TLS 같은 L4 트래픽 처리도 지원하여 멀티 프로토콜 환경에 유리함
설정 방식
- 기본 Ingress 는 Annotation 방식이 많지만, 확장성과 구조적 관리에서는 **CRD 기반 (Gateway API, VirtualService)**가 우수함
- 특히 Gateway API는 현재 CNCF 에서 Ingress 의 차세대 표준으로 정립 중임
프록시 엔진 기반 분류
- NGINX, Envoy, HAProxy, Traefik 등 다양한 프록시가 Ingress Controller 의 기반 엔진으로 사용됨
- Envoy는 Service Mesh 와 연계하기 좋고, Traefik은 동적 구성과 미들웨어 내장으로 DevOps 에 최적화됨
항목 | NGINX | Envoy | HAProxy | Traefik |
---|---|---|---|---|
아키텍처 | 이벤트 기반, 고성능 C 기반 단일 프로세스 구조 | 비동기 이벤트 기반, 모듈화된 C++ 구조 | 멀티 스레드, 성능 중심 구조 | Go 기반, 내장형 Ingress Controller 로 설계됨 |
Ingress 제품 | ingress-nginx , nginx-ingress (F5) | Contour , Ambassador , Gloo , Istio Gateway | 커스텀 Ingress 가능, 직접 통합은 드묾 | traefik/traefik 직접 Ingress Controller 로 사용 가능 |
성능/확장성 | 우수 (대용량 처리에 강함), 단일 프로세스 한계 있음 | 매우 우수 (고성능, 멀티쓰레드 지원, 셀프 힐링 구조) | 매우 빠름 (L4, L7 모두 최적화), 설정 복잡성 존재 | 자동 탐지 기반, 적은 설정으로도 수평 확장 가능 |
L7 라우팅 유연성 | 표준 Ingress + rich annotation 기반 커스텀 라우팅 가능 | 고급 라우팅 기능 (header, method, weight 등 지원) | 라우팅은 설정 파일 기반, 유연성은 낮은 편 | 경량 라우팅 설정, path/host/header 기반 라우팅 지원 |
보안 기능 | TLS 종료, mTLS, 인증/인가 연동, WAF 연동 | mTLS, 인증 체인 구성, RBAC, 필터 기반 인증 정책 | TLS, ACL, IP 제한 등 기본 제공 | ACME 인증서 자동화, TLS 종료, 인증 미들웨어 연동 가능 |
Observability | 기본 로그 + Prometheus 메트릭 + 접근 로그 설정 가능 | 메트릭, 로그, 트레이싱 (OpenTelemetry, Jaeger) 완비 | 메트릭/로그 우수하나 트레이싱 연동은 제한적 | 메트릭, 로깅, 트레이싱 내장 (구성 쉬움) |
Kubernetes 통합성 | Kubernetes-native 아님 (추가 설정 필요) | CRD 기반 완전 통합 (Contour 등) | 통합 어려움, 직접 연동 사례는 제한적 | K8s-native 설계, CRD 없이도 바로 사용 가능 |
커뮤니티/생태계 | 매우 크고 안정적, 기업/오픈소스 이중 구조 지원 | CNCF 주도, 서비스 메시 표준 핵심 엔진 | 전통적이며 안정적, 기업용 네트워크에서 강세 | Cloud-native 친화적, GitOps/DevOps 에 적합 |
적합한 환경 | 전통적 L7 라우팅, 보안 정책 세분화 필요 환경 | 고성능/마이크로서비스 + observability 중시 환경 | L4/L7 혼합 라우팅, 고성능 TCP 처리 필요 환경 | DevOps/경량 서비스, 자동화된 Ingress 구성에 최적 |
요약 정리
구분 | 요약 평가 |
---|---|
NGINX | 안정성과 성숙도 면에서 강력하며 다양한 설정이 가능하지만, K8s-native 가 아니어서 복잡도가 높음 |
Envoy | 마이크로서비스, Observability, 고성능에 강점. 서비스 메시, Gateway API 기반 연동에 이상적 |
HAProxy | 고성능 TCP/HTTP 처리에 특화. 단독 사용보다는 Gateway 나 고정 인프라 환경에서 유용 |
Traefik | DevOps 친화적, 설정 단순, 자동 감지 기능 탁월. 경량 환경에서 매우 적합 |
추천 사용 시나리오
시나리오 | 추천 프록시 |
---|---|
대규모 서비스에서 안정적 TLS/라우팅 구성 필요 | NGINX |
서비스 메시, API Gateway, Istio 연동이 핵심인 아키텍처 | Envoy |
고성능 TCP 로드 밸런싱, L4/L7 통합 라우팅 | HAProxy |
간단한 마이크로서비스 배포, GitOps, 자동화 중심 환경 | Traefik |
Gateway API vs. Ingress 비교
Kubernetes Ingress 는 오랜 기간 L7 트래픽 제어의 표준이었지만, 확장성 부족, 구성 일관성 부족, 구현체별 차이 등의 문제로 인해 Gateway API가 등장했다.
비교
항목 | Ingress | Gateway API |
---|---|---|
정체성 | Kubernetes 네트워크 리소스 (v1 정식 API) | Ingress 의 확장 대체를 목표로 한 Kubernetes 차세대 네트워크 API (CRD) |
출시 시점 | Kubernetes 1.1 (2015) | Kubernetes 1.18 이후 시작 (GA: 1.27 이상 일부 기능 기준) |
기능 범위 | L7 (HTTP, HTTPS) 트래픽 라우팅 | L4 ~ L7 까지 지원 (HTTP, HTTPS, TCP, TLS, gRPC 등) |
구성 방식 | 단일 리소스 (Ingress ) 내에서 모든 설정 수행 | 역할 분리된 리소스 구성: Gateway , GatewayClass , HTTPRoute , TLSRoute 등 |
라우팅 유연성 | 제한적: 기본적으로 Host/Path 기반만 지원 | 고급 라우팅: Header, Method, Query, Host, Path, Weight 등 세밀한 매칭 지원 |
TLS 처리 | 주로 Annotation 기반 설정 | 리스너 레벨에서 TLS 구성 지원 (명시적이고 선언적) |
멀티리스너/포트 지원 | 포트당 리스너 미지원 (보통 80, 443 고정) | Gateway 객체 내 여러 리스너 (포트/프로토콜) 정의 가능 |
설정 방식 | Annotation 중심 (컨트롤러 종속, 비표준적) | Spec 필드 기반 선언적 YAML, API 표준화 진행 중 |
컨트롤러 의존성 | Controller 마다 Annotation 해석이 다름 | GatewayClass 로 컨트롤러 분리 및 기능 명시 가능 |
확장성/표현력 | 구조 단순하지만 기능 표현력 제한 | 역할 분리 구조로 복잡하지만 고급 기능 표현 가능 |
CRD 기반 구성 | 표준 리소스 (Ingress ) | 모두 CRD 로 구성 (Gateway , Route 등) |
권한 분리 (RBAC) | 불가능: Ingress 단일 객체로 모든 설정 포함 | Gateway(플랫폼 팀), Route(앱 팀) 등 역할 기반 접근 분리 가능 |
표준화 및 향후 방향 | 안정화는 되었지만 기능 한계 있음 | CNCF 주도 차세대 네트워크 API 로 점차 채택 증가 중 |
대표 구현체 | NGINX Ingress Controller, Traefik, HAProxy 등 | Istio Gateway, Contour, Gloo Gateway, Envoy Gateway 등 |
Gateway API 리소스 구성
flowchart TB GC["GatewayClass\n(클러스터 전체에서 공통 정책 정의)"] GW["Gateway\n(리스너 정의 및 네트워크 진입점)"] HR["HTTPRoute\n(어플리케이션 라우팅 정의)"] TR["TLSRoute\n(HTTPS/TLS 라우팅)"] SR["Service\n(Kubernetes 백엔드 서비스)"] subgraph Cluster GC --> GW GW --> HR GW --> TR HR --> SR TR --> SR end
리소스 | 역할 및 기능 |
---|---|
GatewayClass | 클러스터 수준에서 Gateway 리소스가 사용할 구현체를 정의함 (예: nginx , istio , gke-l7 ) |
Gateway | Listener (Port, TLS, Hostname 등) 를 정의하며 외부 트래픽의 진입점을 구성함 |
HTTPRoute | Host/Path/Method/Header 등 기반으로 트래픽을 특정 서비스로 라우팅함 |
TLSRoute | TLS SNI 기반으로 라우팅 정의, HTTPS 트래픽의 수신을 처리함 |
Service | 실제 백엔드 Kubernetes 서비스 (LoadBalancer, ClusterIP 등) |
구조적 특징 요약
특징 | 설명 |
---|---|
역할 분리 | Ingress 가 한 객체에 모든 정보를 담는 것과 달리, Gateway API 는 목적별 리소스로 역할을 분리 |
보안 강화 | Gateway 와 Route 리소스에 서로 다른 namespace 및 RBAC 설정 가능 |
확장성 | TCPRoute , UDPRoute , gRPCRoute 등 다양한 L4/L7 확장 가능 |
다중 라우팅 지원 | 하나의 Gateway 에 여러 Route 를 연결하여 멀티 앱/서비스 대응 가능 |
Yaml 예시
목표: example.com
으로 오는 요청 중 /app
경로를 Kubernetes 의 app-service
로 라우팅
Ingress 예제 (기존 방식)
|
|
Gateway API 예제 (Gateway + HTTPRoute 방식)
[External Traffic] ↓ [Gateway] ← 클러스터 진입점 (Listener) ↓ [HTTPRoute] ← 어떤 조건으로 어떤 백엔드로 보낼지 정책 결정 ↓ [Kubernetes Service]
GatewayClass (클러스터 전역에서 사용될 클래스)
Gateway (진입점 정의: Host, Port, TLS 등)
항목 | 설명 |
---|---|
역할 정의 | 외부 트래픽의 클러스터 진입점을 정의하는 리소스 |
구성 요소 | - GatewayClass 로 컨트롤러를 지정- Listeners 로 포트, 프로토콜, 도메인 정의- TLS 종료, 인증서, 호스트 이름 등을 설정 |
위치 | 보통 플랫폼팀 (Infra 팀) 이 소유 및 관리함 |
예시 기능 | - example.com:443 에서 TLS 종료- http:80 요청 수신- 여러 Hostname 및 포트에 대해 Listener 다중 설정 |
비유적으로 말하면 | 진입로 (Gate) 와 도로 (포트) 를 만드는 작업 (차는 아직 안 다님) |
HTTPRoute (라우팅 정책 정의)
항목 | 설명 |
---|---|
역할 정의 | Gateway 를 통해 들어온 트래픽을 특정 백엔드 서비스로 라우팅하는 정책을 정의 |
구성 요소 | - parentRefs 로 어떤 Gateway 에 연결되는지 지정- rules 로 어떤 조건에 따라 어떤 서비스로 라우팅할지 결정 |
위치 | 일반적으로 애플리케이션 팀 또는 서비스 오너가 관리 |
예시 기능 | - /api 요청은 api-service 로- /web 요청은 web-service 로- Header 기반, Method 기반 조건 설정 가능 |
비유적으로 말하면 | Gateway 가 만든 도로 위에서 " 어느 방향으로 차를 보내는지 " 결정하는 교차로 신호 시스템 |
비교 요약
항목 | Ingress 방식 | Gateway API 방식 |
---|---|---|
구성 리소스 | 1 개 (Ingress ) | 최소 2~3 개 (GatewayClass , Gateway , HTTPRoute ) |
설정 방식 | 단일 리소스에 Host/Path/TLS 포함 | 리스너와 라우팅을 분리, 역할 기반 구성 |
선언적 명확성 | 일부는 Annotation 의존 (비표준) | 모두 Spec 기반 선언형 구성 |
확장성 | 기능 제한 (L7 중심) | TCPRoute, gRPCRoute 등 L4~L7 확장 가능 |
권한 분리 | 단일 Ingress 에 전체 설정 포함 | Gateway 와 Route 의 RBAC 분리가능 |
Gateway API 마이그레이션 시나리오 및 맵핑 가이드
Kubernetes 의 기존 Ingress 리소스는 단일 리소스 모델에 의존하며, 복잡한 L7 라우팅 및 멀티 프로토콜 처리가 어려웠다.
→ 이를 보완하기 위해 Gateway API 는 역할 기반 리소스 분리, CRD 기반의 확장성, 명시적 정책 구성을 제공한다.
마이그레이션 전략 단계별 시나리오
단계 | 설명 | 도구/기법 |
---|---|---|
1 단계 | Gateway API CRD 설치 | kubectl apply -f https://gateway-api.sigs.k8s.io/releases/latest/standard-install.yaml |
2 단계 | 기존 Ingress 리소스 정리 | kubectl get ingress -A → 대상 서비스 식별 |
3 단계 | GatewayClass 정의 | NGINX, Istio 등 클래스에 맞춰 정의 |
4 단계 | Gateway 생성 | Listener(port), TLS 설정 등 포함 |
5 단계 | HTTPRoute 변환 | Host/Path → Match → backendRef 로 변환 |
6 단계 | 테스트 및 검증 | curl , kubectl get gateway , describe 등 활용 |
7 단계 | Ingress 제거 | Gradual → 완전 삭제 (blue/green 방식 권장) |
리소스 매핑 가이드
Ingress 요소 | Gateway API 요소 | 변환 방식 |
---|---|---|
Ingress | Gateway + HTTPRoute | 역할 분리 |
spec.rules.host | HTTPRoute.spec.hostnames | 1:1 매핑 |
spec.rules.http.paths.path | HTTPRoute.spec.rules.matches.path.value | Prefix, Exact 등 명시 가능 |
backend.service.name | backendRefs.name | 동일 서비스 참조 |
annotations | Filters, Policies, ExtensionRef | 명시적 CRD 또는 필터 리소스로 분리 |
IngressClass | GatewayClass | LoadBalancer provider 정의 위치 변경됨 |
예시: 기존 Ingress → Gateway API
기존 Ingress
Gateway API (Gateway + HTTPRoute)
|
|
전환 시 주의사항
항목 | 설명 |
---|---|
네임스페이스 정책 | HTTPRoute → Gateway 연결 시 namespace scope 명확히 설정 필요 |
인증 및 TLS | cert-manager 연동 시 Gateway 리스너의 TLS 구성과 통합 필수 |
구현체 호환성 | Gateway API 지원 범위는 Controller 별로 다름 → 지원 여부 확인 필수 |
필터/리다이렉트 | 기존 annotation 기반 설정은 Filter CRD 로 변경 필요 (현재 일부 실험적) |
실무 적용을 위한 고려사항 및 주의할 점
카테고리 | 항목 | 설명 | 권장 사항 |
---|---|---|---|
보안 | TLS 설정 강화 | 약한 암호화, 만료 인증서, 인증서 누락으로 인한 위험 발생 | TLS 1.2+ 이상 사용, cert-manager 기반 자동 갱신, fallback 인증서 구성 |
WAF 통합 | 웹 방화벽 도입 시 과도한 차단으로 정상 서비스에 영향 가능 | 점진적 정책 적용, 화이트리스트/로그 기반 필터 정제 | |
인증 연동 | OAuth2/OIDC 등 외부 인증 시스템과의 연동 필요 | OAuth2 Proxy 등 사용, 외부 IdP 연결 및 세션 관리 | |
성능 | 리소스 할당 최적화 | 과소 설정 시 성능 병목, 과대 설정 시 자원 낭비 | requests/limits 명시, 수요 기반 리소스 프로파일링 |
캐싱 전략 | 과도한 캐싱으로 인한 메모리 낭비 및 오래된 응답 제공 | TTL 기반 캐싱, 정적 파일 중심 적용 | |
가용성 | 다중 인스턴스 구성 | Controller 단일 구성 시 SPOF(Single Point of Failure) 발생 | 최소 2~3 개 이상의 Ingress Controller, Multi-AZ 배포, HPA/VPA 적용 |
헬스 체크 설정 | 잘못된 헬스 체크 구성은 비정상 종료 오판으로 서비스 중단 유발 | liveness , readiness probe 튜닝 (timeout, threshold 조정) | |
Pod 중단 방지 설정 | 노드 스케줄러나 롤링 업데이트 시 예기치 않은 다운타임 유발 | PodDisruptionBudget , affinity , drain 정책 적용 | |
운영/관리 | 로그 및 관측성 확보 | 404/503 에러 진단 어려움, 경로 문제 추적 곤란 | 로그 레벨 확대, Prometheus , Grafana , OpenTelemetry 연계 |
설정 일관성 | YAML 중복, 경로 충돌, path 우선순위로 오류 발생 가능 | GitOps 기반 선언형 배포, prefix/rule 검증 자동화, 리뷰 프로세스 도입 | |
네임스페이스 전략 | 리소스 혼재 시 설정 충돌 및 관리 혼란 발생 | 도메인 단위 또는 서비스 도메인 분리 운영, 네임스페이스 기반 분리 | |
Helm/Kustomize 사용 | 수작업 배포 시 설정 누락, 실수 위험 | Helm chart 또는 Kustomize 기반 템플릿화 및 GitOps 연동 |
- 보안에서는 TLS 설정, 인증서 자동화, 외부 인증 연동, WAF 적용 시의 영향 분석이 중요하다. 특히
cert-manager
는 운영 필수 도구로 자리잡고 있다. - 성능 및 자원 관리에서는 CPU/메모리 limits, 캐싱 전략, 트래픽 규모에 따른 적절한 배포가 요구된다.
- 가용성 확보를 위해 Controller 이중화, HPA/VPA, PDB, 헬스 체크 설정 등 복수 계층의 장애 대응 전략이 필요하다.
- 운영 및 유지보수 관점에서는 선언형 구성과 GitOps, 경로 우선순위 충돌 방지, 관찰성 확보, 네임스페이스 설계 등이 실무 효율성과 안정성을 좌우한다.
- 다양한 구성요소 간 의존성을 고려하여 Helm/Kustomize 등의 도구로 설정을 템플릿화하고, 운영 자동화를 지속적으로 강화해야 한다.
실무 권장 시나리오
환경 | 권장 Ingress Controller | 이유 |
---|---|---|
단일 클러스터 웹 서비스 | NGINX | 안정성, 문서, 커뮤니티 풍부 |
실시간 구성 변경, DevOps 팀 | Traefik | 리로드 없는 동적 구성, 미들웨어 |
고성능 로우레벨 제어 | HAProxy | TCP/UDP, 커넥션 최적화 |
Envoy-native 운영 환경 | Contour | Envoy CRD 기반 정밀 제어 |
Istio Mesh 사용 중 | Istio Gateway | Gateway + VirtualService 연동 필수 |
실무 활용을 위한 선택 가이드
고려 항목 | 질문 | 선택 기준 |
---|---|---|
구성 복잡도 | YAML 외 설정 요소가 필요한가? | NGINX 는 annotation 중심, Traefik/Contour 는 CRD 중심 |
인증/보안 | 인증서 자동화가 필요한가? | cert-manager 연동 또는 기본 TLS 지원 필요 여부 |
트래픽 특성 | HTTP 외에 TCP/UDP 도 필요한가? | HAProxy, NGINX 에서 지원 가능 |
관측성 | 모니터링/로깅이 중요한가? | Traefik (Prometheus, OpenTelemetry 내장) 유리 |
확장성 | 수백 개 이상의 서비스 관리가 필요한가? | CRD 기반 구성 (Traefik, Contour, Istio) 이 유리 |
실무 적용을 위한 운영 체크리스트
항목 | 질문 | 점검 포인트 |
---|---|---|
인증 | TLS 인증서 만료 감지 가능한가? | cert-manager 알림 연계 여부 확인 |
관측성 | 요청 실패 시 라우팅 로그 확인 가능한가? | access log, error log 활성화 여부 |
트래픽 통제 | 잘못된 라우팅 규칙이 배포되지 않는가? | staging 배포 파이프라인, dry-run 테스트 적용 |
확장 | 서비스 증가에 따라 성능 저하가 있는가? | Ingress 수 기준 HPA 적용 여부 |
고가용성 | Controller Pod 이중화 되어 있는가? | PodDisruptionBudget, replica=2 이상 적용 |
최적화 고려사항 및 주의할 점
분류 | 고려사항 | 설명 | 권장 사항 |
---|---|---|---|
성능 최적화 | 리소스 Watch 범위 제한 | CRD 리소스 수 또는 네임스페이스 범위가 넓을수록 컨트롤러 부하 증가 | --watch-namespace 옵션 설정, 네임스페이스별 분리 운영 |
Worker 프로세스 수 조정 | 과도한 워커 수는 컨텍스트 스위칭 과잉 유발 | CPU 코어 수에 맞춰 적절히 설정 | |
Keep-Alive 설정 | HTTP 연결 재사용 미적용 시 처리량 감소 | keepalive 활성화 및 타임아웃 조정 | |
버퍼 크기 최적화 | 버퍼 사이즈가 작으면 패킷 조각화 및 성능 저하 발생 | 요청량/응답량 기준으로 buffer_size 튜닝 | |
TLS 처리 최적화 | TLS handshake 비용이 높고, 인증서 갱신도 리소스 소모 | L4 LB 로 이전 고려, 경량 인증서 사용, cert-manager 사용 시 Pod 리소스 보장 필요 | |
Connection Pooling | 백엔드와의 연결을 매 요청마다 새로 열면 오버헤드 증가 | 풀 크기 제한 및 연결 재사용 활성화 (proxy_http_version 1.1 ) | |
리소스 최적화 | HPA 적용 | 부하 급증 시 수동 대응 어렵고 자원 낭비 가능 | CPU/Memory 기반 HPA, requests/limits 설정 병행 |
노드 어피니티 설정 | 트래픽 집중 노드에 모든 Pod 이 몰리면 비효율적 | 가용 영역별로 분산 배치, Topology Aware Routing | |
설정/운영 최적화 | Annotation 남용 | 지나치게 많은 어노테이션은 설정 충돌 및 관리 복잡성 증가 | Helm Chart 템플릿화, Gateway API 전환 고려 |
IngressRule 수 과다 | 컨트롤러 성능 저하 및 sync latency 증가 | IngressClass 분리, 리소스 다중화 (e.g. RouteGroup) | |
프록시 오토스케일 | 수요 대비 스케일이 늦으면 SLA 저하 유발 | VPA(Horizontal/Vertical), Cluster Autoscaler 연계 | |
보안 최적화 | Rate Limiting | 과도한 제한 설정은 정상 요청도 차단 | Burst 허용 + Gradual Backoff 설정 (limit-req ) |
TLS Offload | SSL 처리로 CPU 소모 과다 가능 | 프런트단 하드웨어 Offload 사용 고려 (L7 대신 L4 사용 등) | |
GZIP 압축 설정 | 대역폭 절약을 위해 압축 적용 필요 | gzip on , 레벨 최적화, 헤더 조건부 압축 |
Ingress Controller 는 고성능, 고가용성, 운영 편의성을 모두 고려해야 하는 핵심 컴포넌트로, 설정 단순화뿐 아니라 리소스 사용량, 성능, 보안까지 다각도로 최적화가 필요하다.
특히 다음 사항들을 중심으로 최적화를 고려해야 한다:
- 성능 측면에서는 TLS 처리, Worker 수, Keep-Alive, Buffer 최적화 등 프록시 내부 처리 흐름 개선이 중요하다.
- 리소스 측면에서는 HPA 설정, 노드 간 균형 배치, Auto Scaling 연동을 통해 안정성과 비용 효율을 확보해야 한다.
- 운영 측면에서는 Annotation 남용 방지와 설정의 GitOps 화, Helm 템플릿화 등 구성 단순화가 유지보수성 향상에 핵심이다.
- 보안 측면에서는 TLS Offload, Rate Limit 설정, 압축 적용 등으로 성능과 보호 수준을 동시에 고려해야 한다.
실무 사용 예시
카테고리 | 사례 | 주요 기능/구성 요소 | 기대 효과 |
---|---|---|---|
보안 및 인증 | OAuth2/OIDC 인증 게이트웨이 | TLS 종료, OAuth2 Proxy, External Auth Plugin | SSO 연동, 인증 계층 분리, 민감 리소스 보호 |
Let’s Encrypt 기반 인증서 자동화 | cert-manager, ACME, ClusterIssuer | 무중단 TLS 갱신, 자동화된 HTTPS 적용 | |
트래픽 라우팅 | 서비스 도메인 분리 및 매핑 | Host/Path 기반 Ingress Rule, 여러 Backend 정의 | 단일 도메인 내 서비스 분기, 마이크로서비스 구조 구현 |
Canary 배포 전략 | Ingress Annotation (e.g., NGINX Canary 정책) | 신규 버전 트래픽 일부만 배정, 점진적 배포로 리스크 최소화 | |
모니터링 및 관찰성 | 트래픽 흐름 및 SLA 모니터링 | Prometheus Exporter, Grafana 대시보드, 로그 분석 | 오류/지연 탐지, 응답 시간 확인, SLA 준수 확인 |
인프라 연동 | Kubernetes Service 라우팅 | LoadBalancer 타입 Service, ClusterIP 연계 | 외부 요청을 내부 Pod 로 안전하게 전달, 고가용성 확보 |
GitOps 기반 배포 자동화 | Helm/Kustomize, ArgoCD, Ingress 리소스 버전 관리 | 일관된 설정 관리, 배포 자동화, 변경 이력 추적 |
Ingress Controller 는 단순한 라우팅 컴포넌트를 넘어 보안, 인증, 배포 전략, 모니터링, 자동화 등 다양한 실무 요구사항을 해결하는 중심 요소로 기능한다.
특히 다음과 같은 관점에서 핵심적인 역할을 한다:
- 보안/인증 계층 분리: OAuth2 Proxy, cert-manager 등을 통한 인증 게이트웨이 역할 수행
- 트래픽 제어 전략 강화: Canary 배포, 도메인 분리, 경로 기반 라우팅을 통한 서비스 유연성 확보
- 운영 자동화/관찰성 향상: GitOps 와 모니터링 도구를 통한 가시성 확보 및 CI/CD 연동
활용 사례
사례 1: 온라인 쇼핑몰
시나리오: 대용량 온라인 쇼핑몰 쿠버네티스 클러스터에 NGINX Ingress Controller 를 적용하여 멀티 도메인 트래픽 관리와 인증, TLS 자동화를 구현.
시스템 구성:
- Kubernetes 클러스터
- NGINX Ingress Controller
- cert-manager(SSL 자동화)
- Prometheus, Grafana(모니터링)
- 여러 백엔드 서비스
flowchart TD userA[User] --> dns[DNS] dns --> lb[External LB] lb --> nginxIC[NGINX Ingress Controller] nginxIC --> svcA[Service A] nginxIC --> svcB[Service B] nginxIC --> prom[Prometheus] nginxIC --> cert[cert-manager] nginxIC --> grafana[Grafana]
Workflow:
- 사용자가 도메인으로 접속하면 DNS→외부 LB→NGINX Ingress Controller 로 트래픽 전달
- 인그레스 컨트롤러에서 라우팅 정책에 따라 각 서비스로 트래픽 분기
- cert-manager 를 통해 SSL 인증서 자동 발급 및 갱신
- 모든 트래픽/에러/상태는 Prometheus, Grafana 로 실시간 모니터링
역할:
- NGINX Ingress Controller: 정책 해석, 트래픽 라우팅, SSL/TLS 종료
- cert-manager: 인증서 자동 관리
- Prometheus/Grafana: 모니터링 및 알림
유무에 따른 차이점:
- 미도입: 서비스별 개별 외부 노출, 수동 인증서 관리, 운영 복잡성 상승
- 도입: 중앙화 관리, 자동 인증서 갱신, 서비스 확장/운영 효율 증가
구현 예시:
|
|
위 인그레스는 shop.example.com 도메인으로 들어오는 /api 경로의 트래픽을 api-service 로 라우팅하고, shop-tls 인증서로 SSL 종료
사례 2: 쇼핑몰
시나리오: 쇼핑몰 프론트엔드와 백엔드 서비스를 동일 도메인에서 라우팅하며 인증을 제공하는 Kubernetes 기반 환경 구성
시스템 구성:
- Ingress-NGINX Controller
- cert-manager
- OAuth2-proxy
- 서비스:
frontend-service
,api-service
graph TD user[User Browser] --> https[https://shop.example.com] https --> Ingress["Ingress Controller (NGINX)"] Ingress --> OAuthProxy OAuthProxy --> AuthProvider[OAuth Provider] Ingress --> FrontendService[Frontend] Ingress --> APIService[Backend API] Ingress --> certManager["cert-manager (TLS)"]
Workflow:
- 사용자가 HTTPS 접속 → 인증 미완료 시 OAuth2-proxy 경유
- 인증 후 요청은 Host/Path 기반으로 Frontend 또는 API 에 라우팅
- TLS 인증서는 cert-manager 가 자동으로 갱신
역할:
- Ingress Controller: TLS 종료, 요청 분기
- OAuth2 Proxy: 인증 처리
- cert-manager: TLS 인증서 자동화
유무에 따른 차이점:
- ❌ Ingress 없음 → 모든 서비스 수동 노출 필요, 보안 구성 어려움
- ✅ Ingress 있음 → 중앙에서 인증 및 트래픽 제어 가능, 관리 일원화
구현 예시:
|
|
사례 3: 전자상거래 플랫폼
시나리오: 전자상거래 플랫폼에서 마이크로서비스 기반 웹 애플리케이션 운영
시스템 구성:
- NGINX Ingress Controller (고가용성 3 개 인스턴스)
- Frontend 서비스 (React 기반 웹 애플리케이션)
- API Gateway 서비스 (사용자 인증 및 API 라우팅)
- Product 서비스 (상품 정보 관리)
- Order 서비스 (주문 처리)
- Payment 서비스 (결제 처리)
graph TB subgraph "Internet" User[사용자] CDN[CloudFlare CDN] end subgraph "Load Balancer" LB[Cloud Load Balancer] end subgraph "Kubernetes Cluster" subgraph "Ingress Layer" IC1[NGINX Ingress 1] IC2[NGINX Ingress 2] IC3[NGINX Ingress 3] end subgraph "Application Services" Frontend[Frontend Service] API[API Gateway Service] Product[Product Service] Order[Order Service] Payment[Payment Service] end end User --> CDN CDN --> LB LB --> IC1 LB --> IC2 LB --> IC3 IC1 --> Frontend IC1 --> API IC2 --> Frontend IC2 --> API IC3 --> Frontend IC3 --> API API --> Product API --> Order API --> Payment
Workflow:
- 사용자가 ecommerce.example.com 접속
- CloudFlare CDN 에서 정적 자산 캐싱 처리
- Cloud Load Balancer 가 트래픽을 NGINX Ingress Controller 로 분배
- Ingress Controller 가 경로 기반 라우팅 수행 (/api/* → API Gateway, /* → Frontend)
- API Gateway 에서 JWT 토큰 검증 후 백엔드 마이크로서비스로 라우팅
역할:
- SSL 종료 및 TLS 1.3 암호화 적용
- 경로 기반 라우팅 (/api, /static, /admin)
- 레이트 리미팅 (IP 당 분당 100 요청)
- WAF 규칙 적용 (SQL 인젝션, XSS 차단)
유무에 따른 차이점:
- Ingress Controller 사용 시: 단일 진입점, 중앙집중식 보안 정책, 비용 효율적
- 미사용 시: 서비스별 개별 LoadBalancer 필요, 관리 복잡성 증가, 인프라 비용 3-5 배 증가
구현 예시:
|
|
주목할 내용
카테고리 | 주제 | 항목/구현체 | 설명 |
---|---|---|---|
프록시 엔진 | Ingress 구현체 | NGINX, Traefik, Envoy | Ingress Controller 로 사용되는 주요 프록시 엔진. Traefik 은 동적 구성 및 미들웨어, Envoy 는 고성능과 관찰성에서 강점 |
트래픽 관리 | API 확장 | Gateway API | 기존 Ingress 를 대체하는 차세대 Kubernetes API. 명시적이고 확장 가능한 트래픽 관리 구조 제공 |
고급 라우팅 | Istio Gateway | 서비스 메시 환경에서의 Ingress 동작 확장. L7 기반 고급 트래픽 정책 구현 가능 | |
경량 캐싱/최적화 | Edge Caching | CDN 연계 또는 L7 캐싱 구조를 통해 성능 향상 | |
보안 | 인증서 관리 | cert-manager, ACME | TLS 인증서 자동 발급/갱신 및 ACME 프로토콜 기반 관리 자동화 |
인증 처리 | OAuth2 Proxy, mTLS | OAuth2 기반 외부 인증 통합, 또는 상호 TLS 를 통한 서비스 간 인증 보안 강화 | |
보안 취약점 | IngressNightmare (CVE-2025-1974 등) | Ingress Controller 관련 RCE 취약점, 주기적인 보안 패치 및 모니터링 필요 | |
운영 자동화 | 선언적 정책 관리 | Ingress 리소스 (YAML) | Ingress 설정을 Git 기반으로 관리 및 파이프라인 자동화 가능 |
GitOps | ArgoCD 등 | Git 저장소 중심으로 선언적 리소스 관리 및 배포 자동화 | |
관찰성 | 메트릭 및 모니터링 | Prometheus, OpenTelemetry | 실시간 모니터링 및 분산 추적, 표준화된 메트릭 수집 및 분석 가능 |
도메인 관리 | DNS 자동 연동 | ExternalDNS | Ingress 와 DNS 레코드를 자동으로 연동하여 외부 도메인 연결 자동화 |
확장성 | 부하 분산 구조 | Load Balancer | 클라우드 외부에서 다중 Ingress Controller 로 트래픽 분산 |
멀티 클러스터 확장 | Gateway API + ExternalDNS | 글로벌 환경에서도 유연한 트래픽 관리 구조 지원 가능 |
요약 정리
항목 | 내용 요약 |
---|---|
프록시 구현체 | NGINX, Envoy, Traefik 등 다양한 컨트롤러 지원. 기능별 차별점 명확 |
차세대 API 확장 | Gateway API 는 Ingress 의 대체 표준으로 각광받고 있음 |
보안 영역 강화 | cert-manager, mTLS, OAuth2 Proxy 등으로 TLS 인증과 사용자 인증을 자동화 및 강화 |
운영 자동화 필수화 | GitOps, 선언적 YAML 관리, ExternalDNS 등은 효율적인 인프라 자동화에 기여 |
관찰성과 안정성 | Prometheus, OpenTelemetry, Circuit Breaker 패턴 등으로 모니터링 및 장애 대응 강화 |
보안 위협 존재 | Ingress 관련 취약점 발생 가능성 높음 → 지속적 패치와 버전 관리 필요 |
확장성과 성능 고려 필요 | CDN 연계 캐싱, 멀티 클러스터 DNS 대응, L7 기반 고급 라우팅 등 적극 도입 필요 |
반드시 학습해야할 내용
카테고리 | 주제 | 핵심 항목 | 설명 |
---|---|---|---|
기초 | Kubernetes 리소스 이해 | Pod, Service, Ingress | Ingress 의 백엔드 연결 구조와 ClusterIP 기반 트래픽 흐름 이해 |
기초 | 네트워크 기본 지식 | HTTP, HTTPS, TLS | L7 트래픽의 프로토콜 흐름과 인증서 기반 암호화 통신 구조 이해 |
중급 | Reverse Proxy 동작 방식 | NGINX, Traefik 등 Ingress Controller | 설정 감지 및 반영 방식, 리로드 여부, 프록시 구성 처리 흐름 분석 |
중급 | 라우팅 및 로드밸런싱 | Host/Path 기반 규칙, 알고리즘 | 정적/동적 라우팅, Round-Robin, IP Hash 등 분산 전략 이해 |
중급 | 선언형 리소스 구성 | YAML, CRD | GitOps 및 CI/CD 통합을 위한 선언적 정책 관리 기초 |
중급 | 인증서 자동화 | cert-manager, ACME | TLS 인증서 발급 자동화, 무중단 갱신 및 인증서 실패 대응 전략 |
고급 | 인증 연계 | OAuth2 Proxy, OIDC | 외부 인증 시스템 연계 (SSO, Identity Provider 등) |
고급 | 모니터링 및 관찰성 | Prometheus, Grafana, OpenTelemetry | 메트릭/로그/트레이싱 수집, 요청 흐름 추적, SLA 측정 |
고급 | 보안 심화 | WAF, DDoS 보호 | 웹 방화벽 구성 및 공격 방어, 서비스 앞단 방어 전략 수립 |
고급 | 자동화 및 배포 전략 | Helm, Kustomize, ArgoCD, ExternalDNS | 템플릿화된 설정 관리, GitOps 기반 배포, DNS/TLS 통합 자동화 |
심화/미래 지향 | 표준화 및 진화 방향 | Gateway API | Ingress 의 기능적 한계를 개선한 명확한 역할 분리 구조 학습 (Route, Gateway, Listener 등) |
심화/통합 연계 | Service Mesh 와의 관계 | Istio, Linkerd Gateway | 사이드카 기반 메시와 L7 프록시의 통합 연계 구조 이해 |
- 기초 지식은 Pod/Service/Ingress 간 구조 및 L7 프로토콜의 기본 이해에서 시작해야 함
- 중급 수준에서는 Ingress Controller 구현체 (NGINX, Traefik 등) 의 구성 방식과 설정 처리 흐름, 인증서 자동화 및 선언형 리소스 구성을 학습
- 고급/심화 수준에서는 보안 (인증/인가, WAF), 관찰성 (메트릭/트레이싱), 자동화 (GitOps, cert-manager), 인증 연계 (OIDC) 등을 학습
- 미래 기술 방향은 Gateway API 로의 진화, Service Mesh 와의 역할 분리 및 통합 구조 이해가 핵심
용어 정리
카테고리 | 용어 | 설명 |
---|---|---|
Kubernetes 리소스 | Ingress | 클러스터 외부 트래픽을 서비스 내부로 라우팅하는 Kubernetes 리소스 |
IngressClass | Ingress 리소스를 처리할 Ingress Controller 를 지정하는 메타 리소스 | |
Backend | Ingress 가 트래픽을 전달할 서비스 또는 엔드포인트 | |
PathType | URL 경로 매칭 방식 (Exact, Prefix, ImplementationSpecific) | |
CRD (Custom Resource Definition) | 쿠버네티스 API 를 확장하는 사용자 정의 리소스 구조 | |
Ingress Controller 관련 기술 | Ingress Controller | Ingress 리소스를 해석하여 실제 트래픽을 라우팅하는 컴포넌트 (예: NGINX, Istio, HAProxy 등) |
Gateway API | Ingress 의 확장성과 역할을 대체하는 차세대 API, 표준화 진행 중 | |
Upstream | 프록시 서버가 요청을 전달하는 백엔드 서버 그룹 (보통 서비스 단위) | |
네트워킹 | Reverse Proxy | 클라이언트 요청을 받아 내부 서버로 전달하는 중간 계층 서버 |
L7 (Layer 7) | OSI 7 계층 중 애플리케이션 계층으로, HTTP, gRPC 등 콘텐츠 기반 라우팅 처리 | |
SNI (Server Name Indication) | 하나의 IP 주소에서 여러 TLS 인증서를 구분하기 위한 TLS 확장 기술 | |
보안 및 인증 | TLS Termination (또는 Offload) | Ingress Controller 에서 SSL/TLS 복호화를 처리해 백엔드는 평문 통신 |
ACME (Automatic Certificate Management Environment) | Let’s Encrypt 등의 자동 인증서 발급 및 갱신 프로토콜 | |
cert-manager | Kubernetes 에서 인증서 발급 및 갱신을 자동화하는 컨트롤러 | |
CORS (Cross-Origin Resource Sharing) | 브라우저에서 도메인 간 HTTP 요청을 제어하는 보안 정책 | |
OAuth / OIDC | 외부 인증 제공자와 연동해 사용자 인증 및 토큰 발급을 처리하는 표준 프로토콜 | |
OAuth2 Proxy | OAuth2 기반 외부 인증과 Kubernetes Ingress 를 연결하는 인증 프록시 | |
운영 및 자동화 | GitOps | Git 저장소에 선언적으로 정의된 인프라와 애플리케이션을 자동으로 적용하는 운영 방식 |
Horizontal Pod Autoscaler (HPA) | CPU/메모리 사용량에 따라 자동으로 Pod 수를 확장/축소하는 Kubernetes 기능 | |
성능 및 안정성 | Circuit Breaker | 장애 전파를 막기 위해 일정 조건에서 요청 차단하는 안정성 패턴 |
Connection Pooling | 네트워크 연결을 재사용하여 성능과 자원 효율성을 개선하는 기술 |
참고 및 출처
- Kubernetes Ingress Controllers 공식 문서
- Kubernetes Ingress 공식 문서
- NGINX Ingress Controller 공식 문서
- NGINX Ingress Controller GitHub 저장소
- Traefik Ingress Controller 공식 문서
- Traefik Ingress Kubernetes Provider
- F5 Ingress Controller 개요
- Ingress-Nightmare 보안 취약점 분석 (Wiz)
- cert-manager 공식 문서
- Ingress Controller vs API Gateway vs Service Mesh
- Gateway API 공식 소개
- 2025년 최고의 Ingress Controller 비교 (Pomerium)
- LINE 엔지니어링 블로그 – 트래픽 관리와 고가용성 인그레스 진화