Crear un balanceador de carga de red

En esta página se describe cómo configurar un balanceador de carga L4 con un endpoint de AWS Elastic Load Balancer (ELB) o Network Load Balancer (NLB).

Para obtener más información sobre los otros tipos de balanceadores de carga que puedes usar con GKE en AWS, consulta la descripción general de los balanceadores de carga.

Esta página está dirigida a especialistas en redes que quieran instalar, configurar y ofrecer asistencia para equipos de redes. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles y tareas de usuario habituales de GKE.

Antes de empezar

Elegir un tipo de balanceador de carga

GKE on AWS crea un balanceador de carga de servicio como un balanceador de carga elástico clásico (Classic ELB) o un balanceador de carga de red (NLB) de AWS. De forma predeterminada, GKE on AWS crea un ELB clásico. Para crear un balanceador de carga de red, asigna el valor nlb a la anotación service.beta.kubernetes.io/aws-load-balancer-type. 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.

Elegir un balanceador de carga orientado a Internet o interno

Los balanceadores de carga de servicio pueden estar orientados a Internet (con un nombre de DNS que se pueda resolver públicamente) o ser internos (solo se puede acceder a ellos desde tu VPC).

De forma predeterminada, los nuevos balanceadores de carga se dirigen a Internet. Para crear un balanceador de carga interno, defina la anotación service.beta.kubernetes.io/aws-load-balancer-internal en "true" en su manifiesto.

No puedes aplicar la anotación aws-load-balancer-internal a un servicio que ya tengas. Para cambiar entre configuraciones orientadas a Internet e internas, debes eliminar y volver a crear el LoadBalancer.

Elige tus subredes

Al crear balanceadores de carga, AWS necesita saber en qué subredes colocarlos. De forma predeterminada, estas subredes se detectan automáticamente entre las subredes de la VPC. Para ello, las subredes deben tener etiquetas específicas. Para obtener información sobre la detección automática y el etiquetado de subredes, consulta Subredes de balanceador de carga.

También puede especificar subredes de balanceadores de carga con una anotación. Para ello, añada la anotación service.beta.kubernetes.io/aws-load-balancer-subnets al servicio. El valor de esta anotación es una lista de IDs de subredes o nombres de subredes separados por comas. Por ejemplo, subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef.

Crear un balanceador de carga de ejemplo

Para crear un servicio de tipo LoadBalancer, debes crear un despliegue y exponerlo con un servicio. En el siguiente ejemplo, se crea un balanceador de carga de muestra.

  1. 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"
    
  2. Crea el despliegue con kubectl apply:

    kubectl apply -f my-deployment-50001.yaml
    
  3. Verifica que se estén ejecutando tres pods:

    kubectl get pods --selector=app=products
    
  4. Crea un servicio de tipo LoadBalancer para tu implementación.

  5. Decide qué tipo de balanceador de carga necesitas:

    • Un ELB clásico orientado a Internet
    • Un balanceador de carga de red orientado a Internet
    • Un ELB clásico interno
    • Un balanceador de carga de red interno

    Elige la pestaña que se ajuste a tus necesidades y copia el manifiesto en un archivo llamado my-lb-service.yaml.

    Classic con acceso a Internet

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    Balanceador de carga de red orientado a Internet

    Para crear un balanceador de carga de red, defina la anotación service.beta.kubernetes.io/aws-load-balancer-type en nlb. 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
    

    Internal Classic

    Para crear un balanceador de carga interno, debe definir 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
    

    Balanceador de carga de red interno

    Para crear un balanceador de carga de red interno, define las siguientes anotaciones:

    • De service.beta.kubernetes.io/aws-load-balancer-internal a "true"
    • De service.beta.kubernetes.io/aws-load-balancer-type a nlb

    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
    
  6. Crea el servicio con kubectl apply:

    kubectl apply -f my-lb-service.yaml
    
  7. Consulta la dirección del servicio con kubectl get service.

    kubectl get service my-lb-service
    

    El resultado incluirá una columna EXTERNAL-IP con la dirección del balanceador de carga (pública o privada, según cómo se haya creado).

  8. Si has creado un balanceador de carga accesible desde Internet, puedes conectarte a él con curl mediante el siguiente comando:

    curl http://EXTERNAL_IP:60000
    

    Sustituye EXTERNAL_IP por la dirección de la columna EXTERNAL-IP del paso anterior.

La salida es similar a la siguiente:

```none
Hello, world!
Version: 2.0.0
Hostname: my-deployment-50001-84b6dc5555-zmk7q
```

Eliminar los recursos utilizados

Para eliminar el servicio y la implementación, usa el comando kubectl delete:

kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml

Pasos siguientes