쿠버네티스의 인그레스 컨트롤러
인그레스 컨트롤러는 쿠버네티스에서 외부 트래픽(HTTP/HTTPS)을 클러스터 내부의 서비스로 라우팅하는 역할을 담당하는 컴포넌트임.
이는 인그레스 리소스(Ingress Resource)와 함께 작동하며, 클러스터 외부에서 클러스터 내부의 애플리케이션에 접근하기 위한 고급 트래픽 관리 기능을 제공함.
Ingress와 Ingress Controller의 개념
1. Ingress
쿠버네티스의 리소스 타입 중 하나로, HTTP/HTTPS 트래픽의 라우팅 규칙을 정의함.
클라이언트 요청을 특정 서비스로 라우팅하기 위해 호스트 기반 또는 경로 기반 규칙을 지정할 수 있음.
예를 들어, 특정 도메인(example.com)이나 경로(/api, /blog)로 들어오는 요청을 각각 다른 서비스로 전달하도록 정의할 수 있음.
2. Ingress Controller
Ingress 리소스에 정의된 규칙을 해석하고 트래픽을 적절히 라우팅하는 실제 구현체임.
쿠버네티스 클러스터에 배포되며, HTTP/HTTPS 요청을 처리하기 위해 동작하는 네트워크 프록시 또는 로드 밸런서 역할을 함.
예를 들어, NGINX, HAProxy, Traefik, Contour, Istio 등 다양한 인그레스 컨트롤러가 있음.
Ingress Controller의 주요 기능
1. HTTP/HTTPS 라우팅
도메인 이름과 경로 기반으로 요청을 다양한 서비스로 라우팅함.
example.com/api → api-service
example.com/blog → blog-service
2. SSL/TLS 지원
HTTPS를 사용하여 안전한 통신을 제공함.
TLS 인증서를 인그레스 리소스에 통합하거나, 컨트롤러에서 자동으로 Let's Encrypt 인증서를 생성할 수 있음.
3. 로드 밸런싱
서비스의 여러 Pod로 요청을 분산함.
IP 해싱, 라운드 로빈, 가중치 기반 분산 등의 로드 밸런싱 알고리즘을 지원함.
4. 백엔드 헬스 체크
서비스의 Pod 상태를 주기적으로 확인하고, 비정상 Pod로의 요청을 차단함.
5. 리라이트 및 리다이렉션
요청 경로를 수정하거나 HTTPS로 강제 리다이렉션할 수 있음.
6. 미들웨어 및 플러그인
인증, 인가, 속도 제한, 캐싱, 요청 헤더 수정 등 다양한 네트워크 필터링 및 처리 기능을 제공함.
7. 동적 업데이트
Ingress 리소스의 변경 사항을 실시간으로 감지하고 라우팅 규칙을 동적으로 업데이트함.
Ingress Controller의 동작 방식
1. Ingress 리소스 정의
사용자는 Ingress 오브젝트를 정의하여 트래픽 라우팅 규칙을 지정함.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /blog
pathType: Prefix
backend:
service:
name: blog-service
port:
number: 80
2. Ingress 컨트롤러 설치
클러스터에 Ingress Controller를 배포함.
대부분의 컨트롤러는 Helm Chart나 YAML 매니페스트로 설치할 수 있음.
# 예: NGINX Ingress Controller 설치
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx
3. 컨트롤러가 Ingress 리소스 해석
Ingress Controller는 클러스터의 Ingress 리소스를 감지하고 라우팅 규칙을 구성함.
이를 기반으로 HTTP/HTTPS 요청이 지정된 서비스로 전달됨.
4. 외부 로드 밸런서 연결
클라우드 환경에서는 Ingress Controller 앞단에 외부 로드 밸런서를 구성하여 외부 트래픽을 수신함.
On-Premise 환경에서는 MetalLB 또는 NodePort/HostPort를 사용함.
Ingress Controller 주요 종류
1. NGINX Ingress Controller
가장 널리 사용되는 컨트롤러 중 하나로, 고성능 HTTP 프록시와 로드 밸런서를 제공함.
특징 1. 경량화, 안정성
특징 2. 커스텀 설정을 위한 다양한 어노테이션
특징 3. 동적 재구성 지원
2. Traefik
클라우드 네이티브 라우터로 설계되었으며, 설치와 사용이 간단함.
특징 1. HTTP/HTTPS, TCP 라우팅 지원
특징 2. 자동화된 Let's Encrypt 인증서 생성
특징 3. 대시보드 및 헬스 체크 기능 제공
3. HAProxy Ingress
고성능 로드 밸런싱 기능을 제공하며, 트래픽 처리량이 중요한 워크로드에 적합함.
특징 1. 동적 업데이트
특징 2. TLS 종료 및 SNI 지원
특징 3. 세부적인 트래픽 제어
4. Contour
Envoy 기반의 인그레스 컨트롤러로, 최신 HTTP 프로토콜 지원과 확장성이 뛰어남.
특징 1. gRPC 기반 API
특징 2. HTTP/2 및 gRPC 라우팅 지원
특징 3. 고급 인증 기능
5. Istio Gateway
서비스 메시 솔루션인 Istio의 일부로, L7 트래픽을 관리함.
특징 1. 세분화된 트래픽 제어
특징 2. A/B 테스트, 카나리아 배포 지원
특징 3. 서비스 메시와의 통합
Ingress Controller 설치 시 고려사항
1. 트래픽 유형
HTTP/HTTPS 트래픽만 처리하는지, TCP/UDP와 같은 L4 트래픽도 지원해야 하는지 확인함.
2. 확장성과 성능
워크로드의 트래픽 패턴에 따라 선택함.
고성능이 요구된다면 HAProxy나 Envoy 기반 컨트롤러를 고려함.
3. 클라우드 또는 On-Premise 환경
클라우드 제공 서비스(LB)와의 통합이 중요하다면 NGINX나 Traefik이 적합함.
On-Premise 환경에서는 MetalLB와 조합하거나 직접적인 로드 밸런싱 구성을 설정함.
4. TLS 관리
자동 인증서 관리가 필요한 경우 Traefik이나 Cert-Manager와의 통합을 지원하는 컨트롤러를 선택함.
5. 커스텀 설정
컨트롤러마다 제공하는 커스텀 설정(예: NGINX의 어노테이션)을 검토함.
Ingress Controller 정리
Ingress Controller는 쿠버네티스에서 HTTP/HTTPS 트래픽을 효과적으로 관리하고, 애플리케이션 서비스 간 라우팅을 간소화하는 데 필수적인 컴포넌트임.
다양한 Ingress Controller 중에서 워크로드의 특성과 운영 환경에 따라 적합한 솔루션을 선택하면, 안정적이고 효율적인 트래픽 관리를 구현할 수 있음.
'Operating System > Kubernetes' 카테고리의 다른 글
[Kubernetes] CoreDNS 개념 (0) | 2024.12.27 |
---|---|
[Kubernetes] NodeSelector 개념 (0) | 2024.12.27 |
[Kubernetes] Airflow Github Oauth 연동시 Github 설정 (0) | 2024.12.27 |
[Kubernetes] podDisruptionBudget 개념 (0) | 2024.12.27 |
[Kubernetes] Airflow의 Executor 종류 (1) | 2024.12.26 |