En este tema se explica cómo configurar un balanceador de carga elástico (ELB) de AWS con GKE en AWS.
Cuando creas un servicio 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 orientado al exterior desde la consola de Google Cloud o crear un balanceador de carga de aplicaciones (ALB) de AWS.
Antes de empezar
Antes de empezar a usar GKE en AWS, asegúrate de haber completado las siguientes tareas:
- Completa los requisitos previos.
- Instala un servicio de gestión.
- Crea un clúster de usuarios.
- En tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu clúster de usuarios. Sustituye CLUSTER_NAME por el nombre de tu clúster de usuario.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- Tener instalada la herramienta de línea de comandos
curl
u otra similar.
Seleccionar un balanceador de carga externo o interno
GKE on AWS crea un balanceador de carga externo (en tu subred pública) o interno (en tu subred privada) en función de una anotación del recurso LoadBalancer.
Si seleccionas un balanceador de carga externo, se podrá acceder a él mediante las direcciones IP permitidas en los grupos de seguridad del grupo de nodos y en las listas de control de acceso (ACLs) de la red de la subred.
Elegir un tipo de balanceador de carga
Elige si quieres crear un balanceador de carga clásico (Classic ELB) o un balanceador de carga de red (NLB). Para obtener más información sobre las diferencias entre los tipos de balanceadores de carga, consulta la sección Tipos de balanceadores de carga de la documentación de AWS.
Crear un LoadBalancer
Para crear un balanceador de carga, crea un despliegue y expónlo con un servicio.
Crea tu implementación. Los contenedores de esta implementación escuchan en el puerto 50001. Guarda el siguiente archivo YAML con el nombre
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 despliegue con
kubectl apply
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-deployment-50001.yaml
Verifica que se estén ejecutando tres pods:
env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
Crea un servicio de tipo
LoadBalancer
para tu implementación. Puede crear un ELB clásico o de red en su subred pública o privada. Elige una de estas opciones:- Un ELB clásico en la subred pública
- Un balanceador de carga de red en la subred pública
- Un ELB clásico en la subred privada
- Un balanceador de carga de red en la subred privada
A continuación, copia el siguiente manifiesto en un archivo llamado
my-lb-service.yaml
.Classic Public
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 Public
Para crear un balanceador de carga de red, define la anotación
service.beta.kubernetes.io/aws-load-balancer-type
ennlb
. El siguiente archivo YAML 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 Private
Para crear un balanceador de carga privado, define la anotación
service.beta.kubernetes.io/aws-load-balancer-internal
en"true"
. El siguiente archivo YAML 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 Private
Para crear un balanceador de carga de red privado, define las anotaciones:
- De
service.beta.kubernetes.io/aws-load-balancer-internal
a"true"
- De
service.beta.kubernetes.io/aws-load-balancer-type
anlb
El siguiente archivo YAML incluye 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 servicio con
kubectl apply
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-lb-service.yaml
Consulta el nombre de host del servicio con
kubectl get service
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get service my-lb-service \ --output jsonpath="{.status.loadBalancer.ingress..hostname}{'\n'}"
La salida se parece a
elb-id.elb.aws-region.amazonaws.com
.Si has creado un balanceador de carga orientado hacia el exterior y tienes acceso a la subred de VPC pública, puedes conectarte al balanceador de carga con
curl
. Sustituye external-ip por la IP del resultado dekubectl get service
del paso anterior.curl external-ip:60000
La salida es similar a la siguiente:
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
Eliminar los recursos utilizados
Para quitar el servicio y la implementación, 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
Solución de problemas
Si no puedes acceder a un endpoint de balanceador de carga, prueba a etiquetar tus subredes.
Siguientes pasos
Sigue la guía de inicio rápido para crear un ELB clásico orientado al exterior desde la consola de Google Cloud .
Consulta la documentación de GKE en Google Cloud sobre cómo exponer aplicaciones mediante servicios.