1. Load Balancer 유형
1) 하드웨어 로드밸런서
- 하드웨어 로드 밸런싱은 전용 하드웨어 장비를 통해 부하를 분산한다.
- 하드웨어 장비로 로드밸런싱을 할 경우 가격이 비싸지만 좋은 성능을 제공한다.
- 주요 제조사로는 F5 Networks, Citrix, A10 Networks 등이 있다.
2) 소프트웨어 로드밸런서
- 서버에 설치되는 소프트웨어로, 하드웨어 로드밸런서에 비해 비교적 저렴한 비용으로 구성할 수 있다.
- 가상 머신, 컨테이너, 물리적 서버 등에서 실행 가능하다.
- 예시
- HAProxy
- 고성능의 오픈 소스 로드밸런서로, TCP 및 HTTP 기반 로드밸런싱을 지원한다.
- Nginx
- 웹 서버로 유명하지만, 로드밸런서로도 사용 가능하며, 가벼우면서도 높은 성능을 제공한다.
- HTTP, HTTPS, TCP 로드밸런싱을 지원한다.
- HAProxy
3) 클라우드 로드밸런서
- 클라우드 서비스 제공 업체가 제공하는 로드밸런서다.
- 클라우드 플랫폼에 통합되어 스케일링 및 관리가 용이하며, 사용량에 따라 비용이 가변적이다.
- 대표적인 클라우드 로드밸런서로는 AWS ELB, Azure Load Balancer, GCP Load Balancer 등이 있다.
2. Nginx Ingress
1) Nginx Ingress란?
Nginx Ingress는 Kubernetes 환경에서 동작하는 Ingress Controller 중 하나로, 클러스터 외부에서 내부로 들어오는 HTTP 및 HTTPS 트래픽을 관리하고 분배하는 역할을 수행하는 소프트웨어다. 이를 통해 여러 서비스에 대한 라우팅, 부하 분산, SSL 종료 등을 구성할 수 있다.
2) Nginx Ingress의 주요 특징
- HTTP/HTTPS 트래픽 관리
- 클러스터 외부에서 들어오는 HTTP/HTTPS 트래픽을 관리하고, 서비스로 라우팅한다.
- 라우팅 및 경로 기반 분기
- 도메인 기반, 경로 기반으로 트래픽을 여러 서비스로 라우팅할 수 있다.
- 부하 분산
- 여러 Pod에 대한 부하를 분산하여 가용성을 향상시킨다.
- SSL/TLS 종료
- SSL/TLS 암호화 및 해독을 수행하고, 클러스터 내부로는 암호화되지 않은 트래픽을 전달할 수 있다.
- 기본 및 사용자 정의 설정
- Nginx Ingress는 다양한 기본 설정을 제공하며, 사용자는 필요에 따라 추가적인 Nginx 설정을 적용할 수 있다.
3. Helm을 사용하여 Nginx Ingress 설치
1) Chocolatey 설치 (Windows)
2) Helm 설치
# From Chocolatey (Windows)
choco install kubernetes-helm
# From Apt (Debian/Ubuntu)
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
3) nginx ingress 설치
※ 사전에 Kubernetes 구성 및 클러스터 연결이 수행되어야 한다.
NAMESPACE=ingress-basic
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx \
--create-namespace \
--namespace $NAMESPACE \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
--set controller.replicaCount=2 \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal"=true \
--set controller.service.externalTrafficPolicy=Local
클러스터의 컨테이너에 대한 요청에 대해 클라이언트 원본 IP 유지를 사용하도록 설정하려면 --set controller.service.externalTrafficPolicy=Local을 Helm 설치 명령에 추가한다. 클라이언트 원본 IP가 X-Forwarded-For 아래의 요청 헤더에 저장된다. 클라이언트 원본 IP 유지가 활성화된 수신 컨트롤러를 사용하는 경우 TLS 통과는 작동하지 않는다.
참고
'Container > Kubernetes' 카테고리의 다른 글
[Kubernetes] AKS 클러스터 노드 접속 방법 (0) | 2024.03.07 |
---|---|
[AKS] Azure Key Vault Provider for Secrets Store CSI Driver 테스트 (0) | 2024.01.22 |
[Kubernetes] Network Policy 개념 및 적용 방법 (0) | 2024.01.09 |
[Kubernetes] Docker 및 Container 개념 정리 (1) | 2024.01.04 |
[Kubernetes] 서로 다른 Namespace에 있는 서비스로 Nginx Ingress 설정 (0) | 2024.01.02 |