AWS Load Balancer Controller Annotations
개요
- 목표: istio-ingressgateway의 로드밸런서를 CLB에서 NLB로 변경
- 배경: Istio Helm Chart 설치 시 기본적으로 istio-ingressgateway는 AWS CLB로 설정됨
주의사항
- 교차 영역 로드밸런싱을 활성화해야 함
- AWS NLB는 Kubernetes에서 Alpha 기능으로, 프로덕션 환경에서 사용 시 주의 필요
- Kubernetes Bug #69264로 인해, 동일한 영역에서 Istio를 실행하는 두 개 이상의 Kubernetes 클러스터에서 AWS NLB 사용이 제한될 수 있음
NLB 설정 방법
Istio Gateway의 Helm 차트 values.yaml 파일에서 service 섹션을 수정하여 NLB 설정을 추가할 수 있습니다.
service:
annotations:
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
service.beta.kubernetes.io/aws-load-balancer-type: external
service.beta.kubernetes.io/aws-load-balancer-attributes: load_balancing.cross_zone.enabled=true
type: LoadBalancer
이미 설치된 Istio를 업그레이드하면서 NLB 설정을 적용할 수 있습니다.
helm upgrade istio-ingressgateway -n istio-system ./istio-charts/gateway -f custom-values.yaml
추가 설명
- annotations 없이 type이 LoadBalancer인 경우: CLB 생성
- 위 annotations 추가 후 type이 LoadBalancer인 경우: NLB 생성
- aws-load-balancer-nlb-target-type: ip: NLB가 파드 IP를 직접 대상으로 사용
- aws-load-balancer-scheme: internet-facing: 인터넷 연결 NLB 생성 (내부용은 internal)
- aws-load-balancer-type: external: AWS Load Balancer Controller 관리 외부 로드밸런서 사용
- load_balancing.cross_zone.enabled=true: 교차 영역 로드밸런싱 활성화
[참고]Annotations options
istio-ingressgateway 서비스에 다음 annotations를 추가하여 프로덕션 환경에 적합한 설정을 할 수 있습니다:
metadata:
annotations:
# SSL 인증서 설정
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: <ACM-인증서-ARN>
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
service.beta.kubernetes.io/aws-load-balancer-ssl-negotiation-policy: "ELBSecurityPolicy-TLS13-1-2-2021-06"
# 보안 그룹 설정 (트래픽 제한)
service.beta.kubernetes.io/load-balancer-source-ranges: "10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
# 교차 영역 로드 밸런싱
service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
# 액세스 로그 활성화
service.beta.kubernetes.io/aws-load-balancer-access-log-enabled: "true"
service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-name: "<your-s3-bucket>"
service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-prefix: "ingress-logs"
# 헬스 체크 설정
service.beta.kubernetes.io/aws-load-balancer-healthcheck-protocol: "HTTP"
service.beta.kubernetes.io/aws-load-balancer-healthcheck-port: "15021"
service.beta.kubernetes.io/aws-load-balancer-healthcheck-path: "/healthz/ready"
service.beta.kubernetes.io/aws-load-balancer-healthcheck-interval: "10"
service.beta.kubernetes.io/aws-load-balancer-healthcheck-timeout: "5"
service.beta.kubernetes.io/aws-load-balancer-healthcheck-healthy-threshold: "2"
service.beta.kubernetes.io/aws-load-balancer-healthcheck-unhealthy-threshold: "2"
# 추가 리소스 태그
service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: "Environment=prod,Project=istio"
# 타겟 그룹 속성: 등록 취소 지연 시간을 조정하여 연결 드레이닝을 최적화합니다.
service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: deregistration_delay.timeout_seconds=30
'Cloud-native > Istio' 카테고리의 다른 글
[Istio]Configuring istio-ingressgateway with AWS ALB (0) | 2024.09.15 |
---|---|
[Istio]Install istio(istio-base, istio-gateway, istiod) with helm charts (0) | 2024.09.15 |
[Istio]Traffic Management - 무슨 일이 발생하는 건가?(envoy xDS Sync 이해하기) (0) | 2023.05.06 |
[Istio]Traffic Management - Request Routing(동적 요청 라우팅 구성하기) (0) | 2023.05.06 |
[Istio]Traffic Management - Overview (0) | 2023.05.06 |