En este tema, se muestra cómo configurar un balanceador de cargas elástico (ELB) de AWS con GKE on AWS.
Cuando creas un Service de tipo LoadBalancer
, un controlador de GKE 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 la consola de Google Cloud o crear un balanceador de cargas de aplicaciones (ALB) de AWS.
Antes de comenzar
Antes de comenzar a usar GKE on AWS, completa las siguientes tareas:
- Completar los requisitos
- Instalar un servicio de administración
- Crear un clúster de usuario
- Desde tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu 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
GKE en AWS crea 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 acerca de 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 la consola de Google Cloud.
Lee la documentación de GKE en Google Cloud sobre la exposición de aplicaciones mediante servicios.