8.3 인그레스 (Ingress): HTTP/S 트래픽 외부 노출 및 라우팅
앞서 우리는 서비스(Service)의 NodePort나 LoadBalancer 타입을 사용하여 클러스터 외부에서 애플리케이션에 접근하는 방법을 배웠습니다. NodePort는 각 노드의 특정 포트를 열어주지만, 고가용성을 위해서는 별도의 외부 로드 밸런서가 필요하고 포트 관리의 번거로움이 있습니다. LoadBalancer 타입은 클라우드 환경에서 외부 로드 밸런서를 자동으로 프로비저닝해주지만, 각 서비스마다 별도의 로드 밸런서와 공인 IP 주소가 할당되어 비용 부담이 커질 수 있고, 주로 L4(TCP/UDP) 레벨의 로드 밸런싱만 제공한다는 한계가 있습니다.
만약 우리가 여러 개의 HTTP/HTTPS 기반 마이크로서비스들을 운영하고 있고, 이들을 단일 외부 IP 주소와 도메인 이름을 통해 접근하도록 하면서, URL 경로 또는 호스트 이름에 따라 각기 다른 서비스로 지능적으로 라우팅하고 싶다면 어떻게 해야 할까요? 또한, SSL/TLS 암호화와 같은 웹 서비스에 필수적인 기능들을 중앙에서 관리하고 싶다면 어떤 방법이 있을까요?
바로 이러한 요구사항을 충족시키기 위해 쿠버네티스가 제공하는 강력한 기능이 인그레스(Ingress)입니다. 인그레스는 클러스터 외부에서 들어오는 HTTP(S) 요청을 내부의 서비스들로 전달하는 L7(애플리케이션 계층) 로드 밸런서 역할을 하며, 마치 클러스터의 정문에서 방문객(요청)의 목적지(URL 경로, 호스트명)를 확인하고 적절한 안내 데스크(서비스)로 안내하는 똑똑한 안내원과 같습니다. 인그레스는 단순히 트래픽을 전달하는 것을 넘어, 다양한 라우팅 규칙, SSL/TLS 종료, 가상 호스팅 등의 고급 기능을 제공하여 웹 애플리케이션 노출을 훨씬 더 유연하고 효율적으로 관리할 수 있게 해줍니다.
이번 8.3장에서는 쿠버네티스에서 HTTP/S 트래픽을 외부로 노출하고 관리하는 표준적인 방법인 인그레스에 대해 자세히 알아볼 것입니다.
- 먼저 8.3.1 인그레스의 역할과 장점에서는 인그레스가 왜 필요한지, 그리고 LoadBalancer 타입의 서비스와 비교하여 어떤 구체적인 장점들(예: 단일 IP로 다수 서비스 노출, URL 경로 및 호스트 기반의 정교한 L7 라우팅, SSL/TLS 인증서 중앙 관리 및 종료)을 제공하는지 살펴볼 것입니다. 이를 통해 인그레스가 어떻게 웹 서비스 운영의 복잡성과 비용을 줄여주는지 이해하게 될 것입니다.
- 다음으로 8.3.2 인그레스 컨트롤러 (Ingress Controller)에서는 인그레스 리소스에 정의된 규칙들을 실제로 해석하고 적용하여 외부 트래픽을 처리하는 핵심 컴포넌트인 ‘인그레스 컨트롤러’에 대해 알아볼 것입니다. 인그레스 리소스 자체는 단지 ‘규칙의 명세’일 뿐이며, 이 규칙을 실제로 구현하는 것은 별도의 인그레스 컨트롤러 파드(예: Nginx Ingress Controller, Traefik Ingress Controller, HAProxy Ingress 등)입니다. 대표적인 인그레스 컨트롤러들의 종류와 특징을 간략히 소개하고, K3s나 Rancher Desktop과 같은 경량 쿠버네티스 배포판들이 기본적으로 어떤 인그레스 컨트롤러(주로 Traefik)를 내장하고 활용하는지에 대해서도 설명하여, 독자 여러분이 사용하는 환경에서 인그레스를 쉽게 시작할 수 있도록 안내할 것입니다.
- 이어서 8.3.3 인그레스 리소스 정의에서는 인그레스 규칙을 어떻게 YAML 파일로 정의하는지 그 명세 구조를 자세히 살펴볼 것입니다. 특정 호스트 이름이나 URL 경로로 들어오는 요청을 어떤 백엔드 서비스로 전달할지를 정의하는 rules 필드, 그리고 HTTPS 통신을 위한 SSL/TLS 인증서를 어떻게 설정하고 관리하는지를 정의하는 tls 필드 등 인그레스 리소스의 핵심 구성 요소들을 배우게 됩니다.
- 마지막으로 8.3.4 [실습] 인그레스를 이용한 경로 기반 라우팅 설정에서는 직접 두 개의 서로 다른 간단한 웹 애플리케이션(디플로이먼트와 서비스로 구성)을 배포하고, 인그레스 리소스를 생성하여 /a 경로로 들어오는 요청은 첫 번째 애플리케이션으로, /b 경로로 들어오는 요청은 두 번째 애플리케이션으로 라우팅하도록 설정해 볼 것입니다. 그리고 실제로 외부에서 단일 IP 주소(또는 localhost)를 통해 각 경로로 접속하여 라우팅이 올바르게 동작하는지 확인하며 인그레스의 강력한 경로 기반 라우팅 기능을 체감하는 시간을 가질 것입니다.
인그레스는 쿠버네티스에서 웹 기반 마이크로서비스들을 외부 세계에 노출하고 관리하는 데 있어 사실상의 표준으로 자리 잡고 있습니다. 이 장을 통해 인그레스의 개념과 활용법을 확실히 익히신다면, 복잡한 웹 애플리케이션 아키텍처도 쿠버네티스 위에서 훨씬 더 효율적이고 세련된 방식으로 운영할 수 있게 될 것입니다.