1. Ingress
Ingress란 클러스터 외부에서 클러스터 내부의 service로의 HTTP, HTTPS 경로를 노출시키는 역할을 합니다.
쿠버네티스의 Service가 클러스터 내부에서만 접근 가능한것과 달리 외부에서 kubernetes 클러스터 내부의 service로 접근할 수 있도록 규칙을 정의하는 역할을 합니다.
즉, '이 도메인의 이 경로로 들어오면 어떤 서비스로 보내라'는 규칙을 선언하는 YAML 객체입니다.
Ingress를 사용하지 않는다고 가정할때, 외부 접근에 대한 처리를 위해 NodePort, External IP 등을 이용할 수 있지만 이는 대부분 Layer4에서의 요청을 처리하는 것이며, Ingress는 Layer7에서의 도메인/경로 분기, TLS 관리 등과 같은 규칙을 처리할 수 있습니다.
이는 외부 트래픽에 대한 처리를 어플리케이션 개발 단계에서가 아닌 배포, 운영 단계에서 설정함으로써 복잡성을 줄일 수 있습니다.
2. Ingress, Ingress Controller, Load Balancer
Kubernetes 환경에서 Ingress를 사용하기 위해서는 Ingress 객체(YAML)와 Ingress Controller가 필요합니다.
Ingress는 단순히 규칙(rule, manifest)을 정의하고, 실제 동작은 Ingress Controller가 처리합니다.
Ingress는 보통 다음과 같이 Load Balancer ↔ Ingress Controller ↔ Service ↔ Pod 흐름으로 연결됩니다.

보통 Ingress Controller 앞에 LoadBalancer 타입의 Service가 존재하고, 이 Load Balancer가 외부 IP에 대한 트래픽을 Ingress Controller로 전달합니다.
CSP에서 제공하는 Kubernetes 서비스를 사용했다는 가정 하에, 실제 상황으로 예를 들면 다음과 같은 과정이 일어납니다.
- 사용자가 브라우저에서 https://example.com/home 으로 접속을 시도함
- DNS 조회 후, example.com은 클라우드 LoadBalancer의 Public IP로 resolve 됨
- 클라우드 Porvider가 만든 L4 LoadBalancer가 해당 IP로 들어온 TCP 443 요청을 받음
- LoadBalancer는 Ingress Controller를 노출하는 Service(ingress-nginx-controller) 뒤에 붙음
- 해당 Service는 type이 LoadBalancer로 되어 있어, Provider가 LB를 자동으로 생성해 연결함
- LoadBalancer에서 Ingress Controller Pod로 요청이 전달됨
- Ingress Controller Pod는 위의 요청을 받아 TLS 종료와 라우팅을 처리
- Ingress 리소스에 연겯뢴 Secret에서 인증서/키를 읽어 TLS handshaking 수행
- 클라이언트는 HTTPS 연결을 맺고, Ingress Controller는 내부적으로 HTTP 요청으로 변환 가능
#ingress.yaml
rules:
- host: example.com
http:
paths:
- path: /home
pathType: Prefix
backend:
service:
name: example-service
port:
number: 8080
6. Ingress Controller는 Host=example.com, Path=/home을 확인하고 backend service = example-service:8080을 선택함
7. Ingress Controller는 선택된 Service로 트래픽을 전달함
- example-service는 type이 ClusterIP로 클러스터 내부에서 Pod로 트래픽을 전달하는 가상 IP
- kube-proxy가 Service 뒤에 있는 Pod들을 확인하고, 하나를 선택해 전달함
8. Service가 선택한 Pod의 8080포트로 요청이 들어감
9. 응답은 다시 역순으로 Service → Ingress Controller → LB → 클라이언트로 반환됨
요약하면 다음과 같습니다.
User Browser
↓
[Public DNS: example.com → LB IP]
↓
[Cloud LoadBalancer] (L4: TCP/443]
↓
[Ingress Controller Service: LoadBalancer]
↓
[Ingress Controller Pod (nginx)] (TLS 종료 & Host/Path 기반 L7 라우팅)
↓
[Service: ClusterIP] <-- Pod 선택 (kube-proxy)
↓
[Keycloak Pod:8080]
'개발' 카테고리의 다른 글
| Keycloak으로 시작하는 마이크로서비스 설계(Keycloak, Api Gateway, User, Chat) (0) | 2026.01.29 |
|---|---|
| WireShark로 Application간 네트워킹 분석하기 (0) | 2025.10.24 |
| mutualTLS and java (4) | 2025.08.17 |
| 도메인 기반 디렉토리 구조로 변경하기 (0) | 2024.10.02 |
| WebBrowser의 실행 과정 (0) | 2023.11.15 |