이 섹션에서는 AWS 서비스를 사용하여 게이트웨이 클러스터에 대한 로드 밸런서를 구현하는 방법에 대한 지침을 제공합니다. 가이드에서는 AWS Elastic Kubernetes Service(EKS) 클러스터 설정부터 시작하여 IAM 설정, 구현, AWS Load Balancer 컨트롤러 배포, 파이프라인 취소 설치 및 검증 단계를 다룹니다.
게이트웨이 클러스터에 AWS ALB를 구현하려면:
EKS 클러스터 설정
AWS에 로그인:
- 오른쪽 상단 모서리에서 EKS 구현, 배포를 위해 원하는 지역을 선택합니다. 드롭다운 메뉴.
Elastic Kubernetes Service(EKS)에 액세스:
- 검색 창에서 EKS 를 검색하고 AWS Elastic Kubernetes Service를 엽니다. 쿠버네티스 클러스터를 관리하는 곳입니다.
클러스터 생성:
Create Cluster [Cluster만들기를] 클릭하고 설정 옵션을 선택합니다.
- 간소화된 설정을 위해 Quick configuration (with EKS Auto Mode) [빠른 구성(EKS 자동 모드 사용)을] 선택하세요.
- 필요한 세부 정보를 제공합니다: 이름, Kubernetes 버전, Cluster IAM 역할, 노드 IAM 역할, VPC 및 서브넷. 역할이 준비되지 않은 경우 AWS에서 제안하는 "권장 역할 생성"을 사용하세요.
클러스터 생성을 시작하려면 Create [만들기]를 클릭하세요. 이렇게 하면 Kubernetes 환경을 위한 기본 인프라가 설정됩니다.
클러스터가 생성된 후 현재 사용자의 액세스 항목을 설정하여 권한을 관리합니다.
ID 및 액세스 관리(IAM) 항목
접근 항목 생성:
- 클러스터에 액세스할 수 있는 사람을 정의하려면 IAM 주체 Amazon 리소스 이름(ARN)을 선택합니다.
- 일반적인 사용자 권한을 위해 Standard IAM Access [표준 IAM 액세스] 유형을 선택하세요.
- 사용자 접근을 설정하기 위해 접근 항목을 만듭니다.
액세스 정책 추가:
다음 정책을 IAM 액세스 항목에 연결하여 필요한 권한을 부여하세요.
AmazonEKSAdminPolicy
AmazonEKSAutoNodePolicy
AmazonEKSClusterAdminPolicy
AmazonEKSEditPolicy
AmazonEKSNetworkingClusterPolicy
AmazonEKSNetworkingPolicy
AmazonEKSViewPolicy
터미널에서 EKS 연결
kubeconfig 업데이트:
다음 명령을 실행합니다.
bash$aws eks update-kubeconfig --region ap-south-1 --name pcg-cluster이 명령은 로컬 Kubernetes 클라이언트가 EKS 클러스터와 상호 작용하도록 구성합니다.
네임스페이스 확인:
다음 명령을 실행합니다.
bash$kubectl get namespaces네임스페이스가 올바르게 설정되었는지 확인하는 것은 클러스터 내에서 리소스를 구성하는 데 중요합니다.
IAM OIDC 공급자 연결:
다음 명령을 실행합니다.
bash$eksctl utils associate-iam-oidc-provider --region=ap-south-1 --cluster=pcg-cluster --approve이 단계는 서비스 계정에 대한 IAM 역할을 활성화하고 보안 및 액세스 제어를 강화하는 데 필요합니다.
AWS ALB에 대한 IAM 역할 생성
AWS ALB 컨트롤러에 대한 IAM 정책 다운로드:
다음 명령을 실행하여 정책을 다운로드하세요.
bash$curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/install/iam_policy.json이 정책은 AWS Load Balancer Controller에 대한 권한을 정의합니다.
IAM 정책 생성:
다음 명령을 실행하여 정책을 만듭니다.
bash$aws iam create-policy \>--policy-name AWSLoadBalancerControllerIAMPolicy \>--policy-document file://iam_policy.json이렇게 하면 역할에 연결할 수 있는 정책이 생성되어 컨트롤러가 로드 밸런서를 관리할 수 있습니다.
IAM 서비스 계정 생성:
my-cluster
클러스터 이름으로,111122223333
계정 ID로 바꾼 후 다음 명령을 실행합니다.bash$eksctl create iamserviceaccount \>--cluster=my-cluster \>--namespace=kube-system \>--name=aws-load-balancer-controller \>--role-name AmazonEKSLoadBalancerControllerRole \>--attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \>--approve이 단계에서는 IAM 정책을 서비스 계정에 연결하여 컨트롤러가 클러스터 내에서 작동할 수 있도록 합니다.
AWS ALB 컨트롤러 생성
Helm 차트 저장소 추가:
다음 명령을 실행하여 Helm 차트 저장소를 추가하세요.
bash$helm repo add eks https://aws.github.io/eks-charts이렇게 하면 AWS Load Balancer Controller Helm 차트가 포함된 저장소가 추가됩니다.
지역 리포지터리 업데이트:
다음 명령을 실행하여 로컬 Helm 저장소를 업데이트하세요.
bash$helm repo update eks이를 통해 구현 및 배포를 위한 최신 버전의 차트를 확보할 수 있습니다.
AWS ALB 컨트롤러 설치:
다음 명령을 실행하여 AWS Load Balancer Controller를 설치합니다.
bash$helm install aws-load-balancer-controller eks/aws-load-balancer-controller \>-n kube-system \>--set clusterName=pcg-cluster \>--set serviceAccount.create=false \>--set serviceAccount.name=aws-load-balancer-controller \>--set vpcId=<your-vpc-id> \>--set region=<your-region><your-vpc-id>
및<your-region>
해당 VPC ID 및 AWS 지역으로 바꾸세요.
설치 확인:
컨트롤러가 올바르게 실행되는지 확인하려면 구현, 배포 상태를 확인하세요.
bash$kubectl get deployment -n kube-system aws-load-balancer-controller출력에는 컨트롤러가 구현하다, 배포하다, 실행 중이라는 내용이 표시되어야 합니다.
차트 버전 확인:
설치된 Helm 차트의 버전을 확인하세요.
bash$helm list -n kube-system이렇게 하면 올바른 버전의 AWS Load Balancer Controller를 사용하고 있는지 확인할 수 있습니다.
파이프라인 설치
파이프라인 설치 위험:
- 쿠버네티스 클러스터 내에서 뉴렐릭 통합 및 에이전트를 구현하고 배포하다 파이프라인 제어에 사용하세요.
- 뉴렐릭에서 제공한 특정 설치 지침을 따르고 기존 설정과 통합되는지 확인하세요.
AWS ALB 수신 리소스 생성:
프로토콜 제한으로 인해 두 개의 별도 수신 리소스를 생성하세요. APM 데이터 수신(HTTP1):
- 뉴렐릭 APM 에이전트 트래픽을 처리합니다.
- HTTP1 프로토콜에 맞게 구성됨
bash$kubectl -n newrelic apply -f apm-ingress.yaml견본
apm-ingress.yaml
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: gateway-albnamespace: newreliclabels:test: testannotations:#kubernetes.io/ingress.class: albalb.ingress.kubernetes.io/tags: owning_team=pipeline-control,service=gateway-alb,environment=test# health check stuffalb.ingress.kubernetes.io/healthcheck-protocol: HTTPalb.ingress.kubernetes.io/healthcheck-port: '13133'alb.ingress.kubernetes.io/healthcheck-path: /health/status# pull target out of ALB after 10 seconds of throwing 503salb.ingress.kubernetes.io/healthcheck-interval-seconds: '5'alb.ingress.kubernetes.io/unhealthy-threshold-count: '2'alb.ingress.kubernetes.io/healthcheck-timeout-seconds: '3'alb.ingress.kubernetes.io/healthy-threshold-count: '2'alb.ingress.kubernetes.io/subnets: subnet-09499a12728c84cc0,subnet-0985931c0c134e164,subnet-00adc734c06241fc0alb.ingress.kubernetes.io/scheme: internal# enables HTTP/2alb.ingress.kubernetes.io/load-balancer-attributes: "routing.http2.enabled=true,idle_timeout.timeout_seconds=60"# sets deregistration_delay.timeout_seconds=10 since we wait 10 seconds to pull V out of LB based on failing health checksalb.ingress.kubernetes.io/target-group-attributes: "deregistration_delay.timeout_seconds=10,slow_start.duration_seconds=30"alb.ingress.kubernetes.io/target-type: "ip"alb.ingress.kubernetes.io/backend-protocol: "HTTP"alb.ingress.kubernetes.io/backend-protocol-version: "HTTP1"spec:ingressClassName: albrules:- http:paths:- path: /v1/logspathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4318- path: /v1/metricspathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4318- path: /v1/tracespathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4318- backend:service:name: pipeline-control-gatewayport:number: 8080path: /pathType: PrefixOpenTelemetry 데이터 수신(HTTP2/gRPC):
- OpenTelemetry 에이전트 트래픽을 처리합니다.
- HTTP2/gRPC 프로토콜에 맞게 구성됨
bash$kubectl -n newrelic apply -f otlp-ingress.yaml견본
otlp-ingress.yaml
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: gateway-alb-otlpnamespace: newreliclabels:test: testannotations:#kubernetes.io/ingress.class: albalb.ingress.kubernetes.io/tags: owning_team=pipeline-control,service=gateway-alb,environment=test# health check stuffalb.ingress.kubernetes.io/healthcheck-protocol: HTTPalb.ingress.kubernetes.io/healthcheck-port: '13133'alb.ingress.kubernetes.io/healthcheck-path: /health/status# pull target out of ALB after 10 seconds of throwing 503salb.ingress.kubernetes.io/healthcheck-interval-seconds: '5'alb.ingress.kubernetes.io/unhealthy-threshold-count: '2'alb.ingress.kubernetes.io/healthcheck-timeout-seconds: '3'alb.ingress.kubernetes.io/healthy-threshold-count: '2'alb.ingress.kubernetes.io/subnets: subnet-09499a12728c84cc0,subnet-0985931c0c134e164,subnet-00adc734c06241fc0alb.ingress.kubernetes.io/scheme: internal# enables HTTP/2alb.ingress.kubernetes.io/load-balancer-attributes: "routing.http2.enabled=true,idle_timeout.timeout_seconds=60"alb.ingress.kubernetes.io/conditions: >[{"field": "http-header","httpHeaderConfig":{"httpHeaderName": "Content-Type", "values":["application/grpc*"]}}]# sets deregistration_delay.timeout_seconds=10 since we wait 10 seconds to pull V out of LB based on failing health checksalb.ingress.kubernetes.io/target-group-attributes: "deregistration_delay.timeout_seconds=10,slow_start.duration_seconds=30"alb.ingress.kubernetes.io/target-type: "ip"alb.ingress.kubernetes.io/backend-protocol: "HTTP"alb.ingress.kubernetes.io/backend-protocol-version: "HTTP2"spec:ingressClassName: albrules:- http:paths:- path: /opentelemetry.proto.collector.logs.v1.LogsService/ExportpathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4317- path: /opentelemetry.proto.collector.metrics.v1.MetricsService/ExportpathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4317- path: /opentelemetry.proto.collector.trace.v1.TraceService/ExportpathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4317- backend:service:name: pipeline-control-gatewayport:number: 8080path: /pathType: Prefix팁
이 접근 방식은 AWS ALB에만 적용됩니다. 다른 cloud 제공자는 여러 프로토콜에 대해 단일 수신 리소스를 지원할 수 있습니다.
유입 리소스 확인:
설정을 확인하기 위해 ingress 리소스를 설명하세요.
bash$kubectl -n newrelic describe ingress gateway-alb
AWS ALB 검증
EC2 > Load Balancers 이동합니다.
- AWS 관리 콘솔에서 EC2 서비스로 이동하여 Load Balancers [부하 분산 장치]를 선택합니다.
- 로드 밸런서가 생성되었고 올바르게 구성되었는지 확인하세요.
리스너 규칙 확인:
- 리스너 규칙을 검토하여 게이트웨이 인스턴스로 트래픽을 적절하게 라우팅하도록 설정되었는지 확인하세요.
부하 테스트 및 최적화
테스트 Traffic 분포:
- 부하 테스트를 수행하여 로드 밸런서가 게이트웨이 인스턴스 전반에 트래픽을 효과적으로 분산하는지 확인합니다.
- 병목현상, 병목지점 또는 최적화 영역을 식별하기 위해 지표 지표를 모니터링합니다.
최적화 설정:
- 테스트 결과에 따라 설정을 조정하여 효율성과 안정성을 개선합니다.
다음 단계
다음으로 AWS ALB에 대한 DNS 및 보안 인증서 설정 에 대해 알아보겠습니다.