인그레스
본 서비스가 제공하는 내용 및 자료가 사실임을 보증하지 않습니다. 시스템은 언제나 실수를 할 수 있습니다. 중요한 의사결정 및 법리적 해석, 금전적 의사결정에 사용하지 마십시오.
인그레스(Ingress)는 쿠버네티스 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이다. 주로 HTTP와 HTTPS 트래픽을 관리하며, 클러스터 외부의 요청을 내부 서비스로 연결하는 라우팅 규칙을 정의한다. 부하 분산, SSL 종료, 이름 기반 가상 호스팅 등의 기능을 제공하여 복잡한 네트워크 트래픽을 효율적으로 제어하는 역할을 수행한다.
개요
인그레스는 쿠버네티스 API를 통해 정의한 규칙에 기반하여 외부 트래픽을 클러스터 내부의 백엔드 서비스에 매핑한다. 이는 URI, 호스트네임, 경로 등 웹 개념을 이해하는 프로토콜 인지형(protocol-aware) 설정 메커니즘을 이용한다. 인그레스는 클러스터 외부에서 접근 가능한 URL을 서비스에 제공하고, 트래픽을 로드 밸런싱하며, SSL/TLS를 종료하고, 이름 기반의 가상 호스팅을 구성하는 데 사용된다.
주요 기능
인그레스는 단순한 서비스 오브젝트보다 세밀한 트래픽 제어 기능을 제공한다.
- 호스트 기반 라우팅: 동일한 IP 주소에서 여러 도메인 이름(예:
foo.example.com,bar.example.com)을 서로 다른 서비스로 연결한다. - 경로 기반 라우팅: URL 경로(예:
/apple,/banana)에 따라 트래픽을 특정 서비스로 분산한다. - TLS/SSL 종료: 인그레스 지점에서 인증서를 관리하여 클라이언트와 인그레스 간의 암호화 통신을 처리하고, 내부 서비스로는 복호화된 트래픽을 전달한다.
구성 요소
인그레스 시스템은 선언적 규칙인 '리소스'와 이를 실제로 실행하는 '컨트롤러'로 나뉜다.
인그레스 리소스
인그레스 리소스는 클러스터 외부에서 내부 서비스로 트래픽을 라우팅하는 규칙을 정의하는 쿠버네티스 오브젝트이다. API 서버에 저장되지만, 리소스 자체만으로는 아무런 동작을 하지 않는다.
인그레스 컨트롤러
인그레스 리소스에 정의된 규칙을 읽어 실제 트래픽을 처리하는 구성 요소이다. 클러스터 내에서 적어도 하나의 인그레스 컨트롤러가 실행 중이어야 인그레스가 정상적으로 동작한다. 주요 컨트롤러로는 NGINX, Traefik, Apache APISIX 등이 있으며, AWS나 GCE 같은 클라우드 공급자도 전용 컨트롤러를 제공한다.
경로 매칭 유형
인그레스는 경로를 매칭할 때 다음과 같은 유형을 지원한다.
- Exact: URL 경로가 정의된 경로와 대소문자를 구분하여 완전히 일치해야 한다.
- Prefix: URL 경로의 접두사가 정의된 경로와 일치하면 매칭된다. 예를 들어
/foo로 설정하면/foo/bar도 매칭 대상에 포함된다.
서비스 노출 방식 비교
애플리케이션을 외부로 노출하는 방법에는 인그레스 외에도 여러 옵션이 존재한다.
| 방식 | 특징 |
|---|---|
| ClusterIP | 클러스터 내부 IP를 사용하여 내부에서만 접근 가능함 |
| NodePort | 각 노드의 특정 포트를 통해 서비스를 외부로 노출함 |
| LoadBalancer | 클라우드 공급자의 로드 밸런서를 사용하여 외부 IP를 할당함 |
| Ingress | 하나의 IP로 여러 서비스를 노출하며, L7 영역의 지능형 라우팅을 제공함 |
현재 상태 및 향후 전망
인그레스 API는 쿠버네티스 v1.19 버전에서 안정화(Stable) 단계에 도달하였다. 현재 인그레스 API는 동결(Frozen)된 상태로, 안정성은 보장되나 향후 새로운 기능 추가나 변경은 이루어지지 않는다. 쿠버네티스 프로젝트는 인그레스를 제거할 계획은 없으나, 보다 확장된 기능을 제공하는 게이트웨이 API(Gateway API) 사용을 권장하고 있다.