Esta sección proporciona instrucciones para implementar un equilibrador de carga para su clúster de puerta de enlace mediante los servicios de AWS. A partir de la configuración de un clúster AWS Elastic Kubernetes Service (EKS), la guía cubre la configuración de IAM, la implementación del controlador de balanceador de carga AWS , la instalación del control de pipelines y los pasos de validación.
Para implementar AWS ALB para su clúster de puerta de enlace:
- Configurar el clúster EKS
- Configurar roles y políticas de IAM
- Conectar EKS
- Crear un rol de IAM para AWS ALB
- Crear un controlador ALB de AWS
- Instalación de control de tuberías
- Validar AWS ALB
- Probar y optimizar la carga
Configurar el clúster EKS
Inicie sesión en AWS:
- Seleccione la región deseada para la implementación de EKS desde la esquina desplegable superior derecha.
Acceso al servicio Elastic Kubernetes (EKS):
- Busque EKS en el cuadro de búsqueda de AWS y abra el servicio Elastic Kubernetes. Aquí es donde gestionarás tu clúster de Kubernetes.
Crear clúster:
Haga clic en Create Cluster y seleccione las opciones de configuración:
- Elija Quick configuration (with EKS Auto Mode) para una configuración optimizada.
- Proporcione los detalles necesarios: nombre, versión Kubernetes , rol de IAM Cluster , rol de IAM del nodo, VPC y subredes. Si los roles no están listos, emplee "Crear rol recomendado" sugerido por AWS.
Haga clic en Create para iniciar la creación del clúster. Esto configura la infraestructura fundamental para su entorno de Kubernetes.
Una vez creado el clúster, configure entradas de acceso para que el usuario actual gestione las licencias.
Entradas de gestión de identidad y acceso (IAM)
Crear entrada de acceso:
- Seleccione su nombre de recurso de Amazon (ARN) principal de IAM para definir quién puede acceder al clúster.
- Elija el tipo de Standard IAM Access para las licencias de usuario típicos.
- Cree la entrada de acceso para establecer el acceso del usuario.
Agregar políticas de acceso:
Anexe las siguientes políticas a la entrada de acceso de IAM para otorgar las licencias necesarias:
AmazonEKSAdminPolicy
AmazonEKSAutoNodePolicy
AmazonEKSClusterAdminPolicy
AmazonEKSEditPolicy
AmazonEKSNetworkingClusterPolicy
AmazonEKSNetworkingPolicy
AmazonEKSViewPolicy
Conectar EKS desde la terminal
Actualizar kubeconfig:
Ejecute el siguiente comando:
bash$aws eks update-kubeconfig --region ap-south-1 --name pcg-clusterEste comando configura su cliente Kubernetes local para interactuar con el clúster EKS.
Comprobar espacio de nombres:
Ejecute el siguiente comando:
bash$kubectl get namespacesVerifique que los espacios de nombres estén configurados correctamente, lo cual es crucial para organizar los recursos dentro del clúster.
Proveedor asociado de IAM OIDC:
Ejecute el siguiente comando:
bash$eksctl utils associate-iam-oidc-provider --region=ap-south-1 --cluster=pcg-cluster --approveEste paso es necesario para habilitar roles de IAM para cuentas de servicio, mejorando la seguridad y el control de acceso.
Crear un rol de IAM para AWS ALB
Descargar la política de IAM para el controlador ALB de AWS:
Ejecute el siguiente comando para descargar la política:
bash$curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/install/iam_policy.jsonEsta política define licencias para el controlador de AWS Load Balancer.
Crear política de IAM:
Ejecute el siguiente comando para crear la política:
bash$aws iam create-policy \>--policy-name AWSLoadBalancerControllerIAMPolicy \>--policy-document file://iam_policy.jsonEsto crea una política que se puede asociar a los roles, lo que permite que el controlador gestione los balanceadores de carga.
Crear una cuenta de servicio IAM:
Reemplace
my-cluster
con el nombre de su clúster y111122223333
con el ID de su cuenta, luego ejecute el siguiente comando: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 \>--approveEste paso vincula la política de IAM a una cuenta de servicio, lo que permite que el controlador opere dentro del clúster.
Crear un controlador ALB de AWS
Agregar repositorio de gráficos Helm :
Ejecute el siguiente comando para agregar el repositorio de gráficos de Helm :
bash$helm repo add eks https://aws.github.io/eks-chartsEsto agrega el repositorio que contiene el AWS Helm gráfico del controlador Load Balancer.
Actualizar el repositorio local:
Ejecute el siguiente comando para actualizar su repositorio local Helm :
bash$helm repo update eksEsto garantiza que tenga la última versión de los gráficos para la implementación.
Instalar el controlador AWS ALB:
Ejecute el siguiente comando para instalar el controlador de balanceador de carga de AWS:
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>Reemplace
<your-vpc-id>
y<your-region>
con su ID de VPC y región de AWS específicas.
Verificar la instalación:
Verifique el estado de implementación para cerciorar de que el controlador se esté ejecutando correctamente:
bash$kubectl get deployment -n kube-system aws-load-balancer-controllerLa salida debe mostrar que el controlador está desplegado y ejecutar.
Comprobar la versión del gráfico:
Verifique la versión del gráfico Helm instalado:
bash$helm list -n kube-systemEsto garantiza que esté empleando la versión correcta del controlador de AWS Load Balancer.
Instalación de control de tuberías
Instalar Control de tuberías:
- Emplee la integración y agente New Relic para implementar Control de pipelines dentro de su clúster de Kubernetes.
- Siga las instrucciones específicas proporcionadas por New Relic para la instalación, cerciorar de que se integre con su configuración existente.
Crear recursos de ingreso de AWS ALB:
Cree dos recursos de ingreso separados debido a las limitaciones del protocolo. Ingreso de datos APM (HTTP1):
- Maneja el tráfico del agente New Relic APM
- Configurado para el protocolo HTTP1
bash$kubectl -n newrelic apply -f apm-ingress.yamlMuestra
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: PrefixIngreso de datos de OpenTelemetry (HTTP2/gRPC):
- Maneja el tráfico del agente OpenTelemetry
- Configurado para el protocolo HTTP2/gRPC
bash$kubectl -n newrelic apply -f otlp-ingress.yamlMuestra
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: PrefixSugerencia
Este enfoque es específico de AWS ALB. Es posible que otros proveedores cloud admitan un único recurso de ingreso para múltiples protocolos.
Comprobar recurso de ingreso:
Describe el recurso de ingreso para verificar su configuración:
bash$kubectl -n newrelic describe ingress gateway-alb
Validar AWS ALB
Vaya a EC2 > Load Balancers:
- En la consola de administración de AWS, vaya al servicio EC2 y seleccione Load Balancers.
- Verifique que el balanceador de carga se creó y esté configurado correctamente.
Comprobar las reglas del oyente:
- Revise las reglas de escucha para cerciorar de que estén configuradas para enrutar el tráfico adecuadamente a su instancia de puerta de enlace.
Probar y optimizar la carga
Distribución Traffic de prueba:
- Realice pruebas de carga para garantizar que el balanceador de carga distribuya eficazmente el tráfico entre las instancias de puerta de enlace.
- Monitoree el rendimiento métrico para identificar cualquier cuello de botella o áreas de optimización.
Optimizar configuración:
- Ajuste la configuración según los resultados de las pruebas para mejorar la eficiencia y la confiabilidad.
Próximo paso
A continuación, aprenderá a configurar certificados de seguridad y DNS para AWS ALB.