> For the complete documentation index, see [llms.txt](https://booiljung.gitbook.io/booil-jung/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://booiljung.gitbook.io/booil-jung/docs/_9990/__-will-delete/kubernetes/1200-core-concepts/800-ingress.md).

# Kubernetes: 인그레스(Ingress)

#### 인그레스(Ingress)의 개요

Kubernetes에서 인그레스(Ingress)는 클러스터 외부에서 내부 서비스로 HTTP 및 HTTPS 트래픽을 라우팅하는 리소스를 말한다. 인그레스는 단순한 서비스(Service) 오브젝트와 달리, 트래픽의 라우팅 규칙을 정의할 수 있는 기능을 제공하여, 복잡한 트래픽 관리 요구 사항을 충족시킨다. 인그레스는 L7 로드 밸런싱을 통해 HTTP(S) 경로 기반 라우팅, 호스트 기반 라우팅, TLS 종료(TLS termination) 등의 기능을 제공한다.

#### 인그레스와 서비스의 차이점

서비스(Service)는 클러스터 내에서 Pod의 집합을 외부에서 접근 가능하게 하거나, 클러스터 내 다른 Pod들이 접근할 수 있도록 하는 Kubernetes 리소스다. 서비스의 유형 중 LoadBalancer 타입은 클라우드 제공자의 로드 밸런서를 생성하여 외부 트래픽을 서비스로 라우팅할 수 있지만, 이는 HTTP 및 HTTPS 트래픽을 세분화하여 관리하기에는 한계가 있다.

반면, 인그레스는 외부 트래픽에 대해 보다 세밀한 제어를 가능하게 한다. 예를 들어, 하나의 도메인에 대해 여러 경로를 정의하고, 각 경로에 대해 서로 다른 서비스로 트래픽을 라우팅할 수 있다. 인그레스는 기본적으로 L7(애플리케이션 계층) 로드 밸런싱을 지원하며, 여러 도메인에 대해 다수의 애플리케이션을 호스팅하는 경우 매우 유용하다.

#### 인그레스의 주요 구성 요소

* **인그레스 리소스(Ingress Resource)**: 인그레스 리소스는 Kubernetes 오브젝트로서, 클러스터 외부에서 내부 서비스로 트래픽을 라우팅하는 규칙을 정의한다. 이는 기본적으로 URL 경로와 호스트 기반의 라우팅 규칙을 정의할 수 있으며, 여러 가지 백엔드 서비스로 트래픽을 분배할 수 있다.
* **인그레스 컨트롤러(Ingress Controller)**: 인그레스 컨트롤러는 인그레스 리소스를 해석하고, 실제 트래픽 라우팅을 수행하는 역할을 한다. Kubernetes 자체에는 인그레스 컨트롤러가 포함되어 있지 않으며, NGINX, Traefik, HAProxy 등 다양한 서드파티 인그레스 컨트롤러가 존재한다. 각 인그레스 컨트롤러는 서로 다른 기능과 성능을 제공하며, 환경에 맞는 컨트롤러를 선택하여 사용한다.
* **TLS/SSL 관리**: 인그레스는 TLS 종료를 지원하여 HTTPS 트래픽을 처리할 수 있다. 이를 위해 인그레스 리소스에 TLS 비밀(Secret)을 정의하고, 인그레스 컨트롤러가 이를 사용하여 HTTPS 요청을 처리하게 된다. TLS 종료는 클라이언트와 인그레스 컨트롤러 간의 통신을 암호화하여 보안성을 높이는 데 필수적이다.

#### 인그레스 리소스의 구조와 설정

인그레스 리소스는 주로 호스트와 경로 기반의 라우팅 규칙을 포함한다. 이를 통해 다양한 트래픽 라우팅 시나리오를 정의할 수 있다.

* **호스트 기반 라우팅(Host-Based Routing)**: 인그레스 리소스는 특정 호스트에 대한 트래픽을 특정 서비스로 라우팅할 수 있다. 예를 들어, `foo.example.com` 도메인으로 들어오는 모든 요청을 서비스 A로 라우팅하고, `bar.example.com` 도메인은 서비스 B로 라우팅할 수 있다.
* **경로 기반 라우팅(Path-Based Routing)**: 호스트와 상관없이 요청 URL의 경로에 따라 트래픽을 라우팅할 수 있다. 예를 들어, `example.com/foo`는 서비스 A로, `example.com/bar`는 서비스 B로 트래픽을 보낼 수 있다.
* **백엔드 서비스(Backend Service)**: 인그레스 리소스는 정의된 라우팅 규칙에 따라 트래픽을 전달할 백엔드 서비스를 지정한다. 각 서비스는 Kubernetes의 클러스터 내에서 동작하며, 인그레스 리소스는 클러스터 외부로부터 들어오는 트래픽을 해당 서비스로 라우팅한다.
* **TLS 설정(TLS Configuration)**: 인그레스 리소스는 TLS 비밀(Secret)을 참조하여 HTTPS 트래픽을 처리할 수 있다. 이 비밀은 도메인에 대한 인증서와 개인 키를 포함하며, 인그레스 컨트롤러가 이를 사용하여 TLS 종료를 수행한다.

#### 인그레스 컨트롤러의 작동 원리

인그레스 컨트롤러는 인그레스 리소스를 감시하고, 해당 리소스의 설정에 따라 외부 트래픽을 적절한 서비스로 라우팅한다. 인그레스 컨트롤러는 Kubernetes API 서버와 통신하여 인그레스 리소스의 상태를 지속적으로 확인하고, 변경 사항이 있을 경우 이를 반영하여 라우팅 규칙을 업데이트한다.

* **NGINX 인그레스 컨트롤러**: 가장 널리 사용되는 인그레스 컨트롤러 중 하나로, NGINX를 기반으로 한다. NGINX 인그레스 컨트롤러는 뛰어난 성능과 확장성을 제공하며, 다양한 커스터마이징 옵션을 지원한다.
* **Traefik 인그레스 컨트롤러**: Traefik은 Kubernetes 환경에 특화된 인그레스 컨트롤러로, 자동화된 라우팅 및 설정 기능을 강조한다. 특히 마이크로서비스 아키텍처에 최적화되어 있으며, 동적 라우팅과 메트릭스 수집을 지원한다.
* **HAProxy 인그레스 컨트롤러**: 고성능 로드 밸런싱과 프록시 기능을 제공하는 HAProxy를 기반으로 하는 인그레스 컨트롤러이다. 매우 세밀한 트래픽 제어가 가능하며, 다양한 고급 기능을 지원한다.

#### 인그레스와 네트워크 정책의 통합

Kubernetes 인그레스는 네트워크 정책과 통합되어 보다 강력한 보안 모델을 제공할 수 있다. 네트워크 정책을 통해 인그레스에 도달하는 트래픽을 제어하고, 특정 트래픽만 허용하거나 차단할 수 있다.

* **네트워크 정책(Network Policies)**: 네트워크 정책은 Kubernetes 클러스터 내에서 Pod 간의 트래픽을 제어하는 규칙을 정의한다. 이를 통해 인그레스에서 들어오는 트래픽에 대해 세밀한 접근 제어가 가능하다.
* **보안 그룹과의 연계**: 클라우드 환경에서는 인그레스 컨트롤러가 클라우드 제공자의 보안 그룹과 연계되어 동작할 수 있다. 이를 통해 인그레스 트래픽의 출입을 보다 강력하게 관리할 수 있다.

#### 인그레스의 확장성과 모니터링

인그레스는 다양한 방식으로 확장 가능하며, 모니터링을 통해 성능과 안정성을 유지할 수 있다.

* **수평 확장(Horizontal Scaling)**: 인그레스 컨트롤러는 수평 확장을 통해 성능을 향상시킬 수 있다. 여러 인그레스 컨트롤러 인스턴스를 실행하여 트래픽 부하를 분산시키고, 클러스터 내에서 높은 가용성을 유지할 수 있다.
* **모니터링 및 로깅**: 인그레스 컨트롤러의 상태를 모니터링하고, 트래픽 패턴을 분석하기 위해 메트릭스를 수집할 수 있다. Prometheus와 Grafana와 같은 도구를 사용하여 인그레스 트래픽을 실시간으로 모니터링하고, 성능 문제를 조기에 감지할 수 있다.
* **로드 밸런싱 알고리즘**: 인그레스 컨트롤러는 다양한 로드 밸런싱 알고리즘을 지원하여, 트래픽을 효율적으로 분산시킬 수 있다. 라운드 로빈, 최소 연결 수, IP 해시 등을 사용하여 트래픽 분배를 최적화할 수 있다.

***

관련 자료:

* Kubernetes Documentation: Ingress, Kubernetes.io. <https://kubernetes.io/docs/concepts/services-networking/ingress/>
* NGINX Ingress Controller Documentation, NGINX. <https://docs.nginx.com/nginx-ingress-controller/>
* The Complete Guide to Kubernetes Ingress, Traefik Labs. <https://doc.traefik.io/traefik/routing/providers/kubernetes-ingress/>
* Michael Hausenblas and Stefan Schimanski, Programming Kubernetes, O'Reilly Media, 2019.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://booiljung.gitbook.io/booil-jung/docs/_9990/__-will-delete/kubernetes/1200-core-concepts/800-ingress.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
