En este tema, se muestra cómo configurar un balanceador de cargas Elastic (ELB) de AWS con clústeres de Anthos en AWS (GKE en AWS).
Cuando creas un servicio de tipo LoadBalancer
, un controlador de los clústeres de Anthos en AWS configura un ELB clásico o de red en AWS.
También puedes seguir la Guía de inicio rápido para crear un ELB clásico de forma externa desde Google Cloud Console o crear un balanceador de cargas de aplicaciones (ALB) de AWS.
Antes de comenzar
Antes de comenzar a usar clústeres de Anthos alojados en AWS, asegúrate de haber realizado las siguientes tareas:
- Completa los requisitos.
- Instalar un servicio de administración
- Crear un clúster de usuario
- Desde el directorio
anthos-aws
, usaanthos-gke
para cambiar el contexto al clúster de usuario.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Reemplaza CLUSTER_NAME por el nombre de tu clúster de usuario. - Ten instalada la herramienta de línea de comandos de
curl
o una herramienta similar.
Selecciona un balanceador de cargas externo o interno
Los clústeres de Anthos en AWS crean un balanceador de cargas externo (en tu subred pública) o interno (en tu subred privada) según una anotación al recurso LoadBalancer.
Si seleccionas un balanceador de cargas externo, se puede acceder a este mediante las direcciones IP permitidas en los grupos de seguridad del grupo de nodos y las listas de control de acceso (LCA) de red de la subred.
Elige un tipo de balanceador de cargas
Elige si deseas crear un Classic Load Balancer (Classic ELB) o un Network Load Balancer (NLB). Para obtener más información sobre las diferencias entre los tipos de balanceadores de cargas, consulta Tipos de balanceadores de cargas en la documentación de AWS.
Crea un LoadBalancer
Para crear un balanceador de cargas, debes crear una implementación y exponerla con un servicio.
Crea la implementación. Los contenedores de este objeto Deployment escuchan en el puerto 50001. Guarda el siguiente YAML en un archivo llamado
my-deployment-50001.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment-50001 spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: "gcr.io/google-samples/hello-app:2.0" env: - name: "PORT" value: "50001"
Crea el Deployment con
kubectl apply
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-deployment-50001.yaml
Verifica que los tres Pods estén en ejecución:
env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
Crea un Service de tipo
LoadBalancer
para la implementación. Puedes crear un Classic ELB o un Network ELB en la subred pública o en la privada. Elige una de las siguientes opciones:- Un Classic ELB en la subred pública
- Un NLB en la subred pública
- Un Classic ELB en la subred privada
- Un NLB en la subred privada
Luego, copia el siguiente manifiesto a un archivo llamado
my-lb-service.yaml
.Classic público
apiVersion: v1 kind: Service metadata: name: my-lb-service spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
NLB público
Para crear un NLB, configura la anotación
service.beta.kubernetes.io/aws-load-balancer-type
comonlb
. En el siguiente YAML, se incluye esta anotación.apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
Classic privado
Crea un LoadBalancer privado mediante la configuración de la anotación
service.beta.kubernetes.io/aws-load-balancer-internal
como"true"
. En el siguiente YAML, se incluye esta anotación.apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
NLB privado
Para crear un NLB privado, configura las anotaciones de esta manera:
- Configura
service.beta.kubernetes.io/aws-load-balancer-internal
como"true"
. - Configura
service.beta.kubernetes.io/aws-load-balancer-type
comonlb
.
En el siguiente YAML, se incluyen ambas anotaciones.
apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" service.beta.kubernetes.io/aws-load-balancer-type: nlb spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
Crea el Service con
kubectl apply
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-lb-service.yaml
Visualiza el nombre de host del Service con
kubectl get service
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get service my-lb-service \ --output jsonpath="{.status.loadBalancer.ingress..hostname}{'\n'}"
El resultado se parece a
elb-id.elb.aws-region.amazonaws.com
.Si creaste un balanceador de cargas externo y tienes acceso a la subred de VPC pública, puedes conectarte al balanceador de cargas con
curl
. Reemplaza external-ip por la IP del resultado dekubectl get service
del paso anterior.curl external-ip:60000
El resultado se parece al siguiente:
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
Realice una limpieza
Para quitar Service y Deployment, usa kubectl delete
.
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f my-lb-service.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f my-deployment-50001.yaml
Soluciona problemas
Si no puedes acceder a un extremo del balanceador de cargas, intenta etiquetar tus subredes.
Qué sigue
Sigue la guía de inicio rápido para crear un ELB clásico externo desde Google Cloud Console.
Lee la documentación de GKE en Google Cloud sobre la exposición de aplicaciones mediante servicios.