반응형
Gateway API를 사용한다는 소리도 있으나 아직은 국내에서 그다지 많이 사용하지 않아 Ingress를 중점으로 보는게 좋지 않을까 생각이 듭니다.
"Ingress object를 사용하면 사용하는 로드 밸런서의 수를 줄일 수 있다"는 말은 Kubernetes 클러스터에서 외부 트래픽을 서비스(Pod)로 전달하는 과정에서 Ingress를 활용하면 로드 밸런서의 효율성을 극대화할 수 있다는 의미입니다.
이를 이해하기 위해 Kubernetes의 트래픽 흐름과 Ingress가 제공하는 이점을 살펴보겠습니다.
1. Kubernetes에서 외부 트래픽 처리 방식
a. Service와 LoadBalancer 타입
- Kubernetes에서 LoadBalancer 타입의 Service를 사용하면 클라우드 제공자(AWS, GCP, Azure 등)는 각 Service에 대해 개별적인 외부 로드 밸런서를 프로비저닝합니다.
- 이 로드 밸런서는 클러스터 외부에서 들어오는 트래픽을 해당 Service로 전달합니다.
문제점:
- 여러 Service에 대해 LoadBalancer 타입을 사용하면 Service마다 별도의 로드 밸런서가 생성됩니다.
- 클러스터가 커지고 Service 수가 많아질수록 로드 밸런서 비용 증가와 복잡성 증가가 발생합니다.
b. Ingress를 활용한 단일 로드 밸런서
- Ingress를 사용하면 여러 Service에 대한 트래픽을 하나의 로드 밸런서를 통해 처리할 수 있습니다.
- Ingress Controller는 클러스터에 하나의 외부 로드 밸런서를 생성하고, 이 로드 밸런서를 통해 여러 Service에 트래픽을 전달합니다.
2. Ingress로 로드 밸런서 수를 줄이는 원리
- Ingress Controller:
- Ingress 객체를 관리하는 컴포넌트입니다.
- 클라우드 제공자와 통합되어 하나의 외부 로드 밸런서를 프로비저닝합니다.
- 하나의 공용 IP:
- Ingress Controller가 제공하는 로드 밸런서는 단일 IP 주소를 사용합니다.
- 외부 클라이언트는 이 단일 IP를 통해 클러스터에 접근합니다.
- 트래픽 라우팅:
- Ingress 객체는 트래픽을 URL 경로 또는 호스트 이름 기반으로 여러 Service로 라우팅합니다.
- 예: example.com/api는 Service A로, example.com/web은 Service B로 트래픽 전달.
3. 예시: Ingress로 여러 Service 처리
기존 방식 (LoadBalancer Service):
apiVersion: v1
kind: Service
metadata:
name: service-a
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: app-a
---
apiVersion: v1
kind: Service
metadata:
name: service-b
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: app-b
- 위 구성에서는 Service마다 별도의 로드 밸런서가 생성됩니다.
- 클라우드 제공자의 로드 밸런서 비용이 두 배로 증가.
Ingress 방식:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: service-a
port:
number: 80
- path: /web
pathType: Prefix
backend:
service:
name: service-b
port:
number: 80
- Ingress Controller는 하나의 로드 밸런서를 생성.
- 클라이언트는 example.com이라는 단일 IP를 통해 두 개의 Service에 접근 가능:
- /api → service-a
- /web → service-b
4. Ingress 사용의 장점
- 로드 밸런서 비용 절감:
- 하나의 로드 밸런서를 통해 여러 Service를 처리하므로 비용이 절감됩니다.
- 특히 클라우드 환경(AWS, GCP 등)에서 로드 밸런서 사용 비용이 크게 줄어듭니다.
- 단일 진입점 제공:
- 외부 트래픽이 하나의 진입점(IP 또는 DNS 이름)을 통해 관리됩니다.
- 네트워크 관리와 유지보수가 용이.
- 유연한 트래픽 라우팅:
- URL 경로, 호스트 이름, 쿠키 기반 등 다양한 라우팅 규칙을 설정 가능.
- TLS 지원:
- Ingress를 통해 TLS(SSL) 인증서를 관리하여 보안 트래픽을 처리 가능.
5. 고려해야 할 점
- Ingress Controller 필요:
- Ingress는 기본적으로 Ingress Controller(예: NGINX, Traefik, HAProxy, Istio)가 필요합니다.
- 클러스터에 적합한 컨트롤러를 선택해야 합니다.
- 성능:
- 모든 트래픽이 단일 로드 밸런서를 통해 전달되므로 성능 병목 가능성.
- 클러스터 크기와 트래픽 양에 따라 적절한 컨트롤러 설정이 필요합니다.
- 복잡성 증가:
- 초기 설정이 LoadBalancer 타입 Service보다 복잡할 수 있습니다.
6. 결론
- Kubernetes에서 Ingress를 사용하면 여러 Service에 대해 단일 로드 밸런서를 활용하여 비용과 관리 부담을 줄일 수 있습니다.
- 특히 URL 경로 기반 트래픽 라우팅과 TLS 관리가 필요한 경우, Ingress는 매우 유용한 솔루션입니다.
- 클러스터 규모와 요구 사항에 따라 Ingress를 도입하여 네트워크 효율성을 극대화할 수 있습니다.
반응형
'K8S' 카테고리의 다른 글
[Kubernetes] externalTrafficPolicy와 internalTrafficPolicy (0) | 2024.12.21 |
---|---|
service와 clusterIP의 관계에 대해 알아보자 (0) | 2024.12.21 |
Service와 kube-proxy의 차이 (0) | 2024.12.21 |
CNI, Kube-proxy, Service 의 특징 및 통신과정 (0) | 2024.12.21 |
kube-proxy와 cni의 비교 (0) | 2024.12.21 |
댓글