쿠버네티스 (Kubernetes) 주요 개념 인그레스(Ingress)
쿠버네티스에서 인그레스(Ingress)는 클러스터 외부에서 내부 서비스로의 HTTP(S) 트래픽을 제어하기 위한 리소스입니다. 서비스(Service)는 파드 집합에 대한 네트워크 접근을 클러스터 내부에서 추상화하지만, 인그레스는 주로 외부와 클러스터 내부의 연결 지점을 설정하기 위해 사용합니다.
1. 인그레스(Ingress)란?
- 정의
HTTP/HTTPS 요청을 특정 서비스로 라우팅할 수 있도록, 도메인(호스트명)·경로 기반의 규칙을 정의하는 객체입니다. - 필요성
- 여러 서비스가 있을 경우, 각 서비스마다 NodePort나 LoadBalancer를 생성해 외부에 노출하는 방식은 관리가 복잡해질 수 있음
- 인그레스를 사용하면 단일 진입점을 통해 트래픽 분산, SSL 종료, 경로 기반/호스트 기반 라우팅 등을 간단하게 구성 가능
2. 인그레스 동작 방식
- 인그레스 객체(Ingress Resource)
- 라우팅 규칙, 도메인(호스트), 경로(path) 등을 선언합니다.
- 예:
example.com/foo
→foo-service
,example.com/bar
→bar-service
- 인그레스 컨트롤러(Ingress Controller)
- 인그레스 리소스를 실제로 해석하고, HTTP/HTTPS 트래픽을 적절한 서비스로 라우팅하는 역할을 담당합니다.
- 대표적으로 NGINX Ingress Controller, HAProxy, Traefik, Istio Gateway(Istio 사용 시) 등이 있으며, 클러스터에 설치·운영해야 합니다.
- 서비스(Service)
- 인그레스 컨트롤러가 실제 트래픽을 넘겨줄 대상입니다(주로 ClusterIP 타입).
- 인그레스는 서비스의 ‘프록시’ 역할을 수행한다고 볼 수 있습니다.
3. 인그레스 규칙(Ingress Rules)
3.1 호스트 기반 라우팅(Host-based Routing)
- 예)
example.com
도메인으로 들어오는 요청은service-A
로,test.com
은service-B
로 연결
rules:
- host: example.com
http:
paths:
- path: /
backend:
service:
name: service-example
port:
number: 80
3.2 경로 기반 라우팅(Path-based Routing)
- 예)
example.com/foo
→service-foo
,example.com/bar
→service-bar
rules:
- host: example.com
http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: service-foo
port:
number: 80
- path: /bar
pathType: Prefix
backend:
service:
name: service-bar
port:
number: 80
pathType:
Prefix
,Exact
,ImplementationSpecific
등을 지정해 경로 매칭 방식을 정의할 수 있습니다.
4. TLS(HTTPS) 설정
- 인그레스는 TLS(SSL) 인증서를 연동해 HTTPS 트래픽을 처리할 수 있습니다.
- 쿠버네티스 시크릿(Secret)에 SSL 인증서·키를 저장한 뒤, 인그레스 리소스의
tls
필드에서 해당 시크릿을 참조합니다.
tls:
- hosts:
- example.com
secretName: example-tls
5. 인그레스 컨트롤러(Ingress Controller)와의 관계
- 인그레스 리소스 생성
kubectl apply -f ingress.yaml
과 같이 YAML 매니페스트를 통해 인그레스 규칙 선언
- 인그레스 컨트롤러
- 클러스터 내에 설치된 인그레스 컨트롤러(NGINX 등)가 이 인그레스 리소스를 “감시(Watch)”하고 있음
- 인그레스 리소스에 정의된 호스트/경로 정보를 기반으로 역방향 프록시(Reverse Proxy) 설정을 자동 업데이트
- 클라이언트의 요청 처리
- 도메인에 대한 요청이 인그레스 컨트롤러로 들어오면, 컨트롤러가 적절한 서비스로 라우팅
- 서비스는 내부 파드로 트래픽을 분산 처리 (파드가 변경되어도 서비스가 자동 관리)
6. 장점 및 한계
장점
- 단일 진입점
- 여러 서비스에 대해 NodePort나 LoadBalancer를 각각 생성할 필요 없이, 인그레스를 통해 한 번에 외부 노출 가능
- 유연한 라우팅 정책
- 호스트 기반, 경로 기반, 여러 수준의 트래픽 제어(SSL, 인증 등)
- 확장성
- NGINX, HAProxy, Traefik 등 다양한 컨트롤러를 사용할 수 있으며, 오토스케일링 환경에도 쉽게 대응
한계
- 인그레스 컨트롤러 설치가 필수
- 기본 쿠버네티스 배포에 인그레스 컨트롤러가 자동으로 포함되어 있지 않은 경우, 별도로 배포해야 함
- 네트워크 복잡성
- 인그레스 뒤에 서비스가 있고, 서비스 뒤에 파드가 있어 이중·삼중 프록시 구조가 생길 수 있음
- L7(HTTP/HTTPS) 중심
- HTTP(S) 이외의 TCP/UDP 트래픽은 인그레스가 직접 처리하지 못하고, 다른 방식을 사용해야 함(예: Service의 NodePort, LoadBalancer 설정 등)
7. 간단한 예시
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-web-service
port:
number: 80
example.com
으로 들어오는 모든 요청(/
)은my-web-service
로 보내집니다.- 실제 SSL 인증, 복잡한 경로 설정, 여러 호스트 설정 등은 추가 필드로 확장 가능합니다.
8. 요약
- 인그레스(Ingress)는 쿠버네티스 클러스터 내부 서비스를 HTTP/HTTPS 트래픽으로 노출하기 위한 핵심 리소스입니다.
- 인그레스 컨트롤러가 인그레스 정의를 읽어 역방향 프록시(Reverse Proxy) 설정을 자동화하고, 외부에서 들어오는 요청을 해당 서비스로 라우팅합니다.
- 호스트·경로 기반의 유연한 라우팅, SSL 종단(HTTPS 지원) 등을 통해 단일 진입점에서 다양한 내부 서비스를 관리할 수 있습니다.
- 반드시 인그레스 컨트롤러를 설치해야 하며, L7 레벨의 HTTP/HTTPS 트래픽에 특화된 방식임을 유의해야 합니다.
이로써 인그레스를 활용하면, 쿠버네티스 환경에서 다양한 웹 서비스를 간편하게 외부로 노출하고 관리할 수 있습니다.
댓글남기기