Crear un balanceador de carga de red

Esta página describe cómo configurar un balanceador de carga L4 con un punto final de AWS Elastic Load Balancer (ELB) o de Network Load Balancer (NLB).

Para obtener más información sobre otros tipos de balanceadores de carga que puede utilizar con GKE en AWS, consulte Descripción general del balanceador de carga .

Esta página está dirigida a especialistas en redes que desean instalar, configurar y dar soporte a equipos de red. Para obtener más información sobre roles comunes y ejemplos de tareas que mencionamos en Google Cloud contenido, consulte Roles y tareas de usuario comunes de GKE Enterprise .

Antes de empezar

Elija un tipo de balanceador de carga

GKE en AWS crea un balanceador de carga de servicio como un balanceador de carga elástico clásico de AWS (ELB clásico) o un balanceador de carga no lineal (NLB). De forma predeterminada, GKE en AWS crea un ELB clásico. Para crear un NLB, configure la anotación service.beta.kubernetes.io/aws-load-balancer-type como nlb . Para obtener más información sobre las diferencias entre los tipos de balanceadores de carga, consulte Tipos de balanceadores de carga en la documentación de AWS.

Elija un balanceador de carga interno o con acceso a Internet

Los balanceadores de carga de servicio pueden estar orientados a Internet (con un nombre DNS que se puede resolver públicamente) o ser internos (solo accesibles dentro de su VPC).

De forma predeterminada, los nuevos balanceadores de carga están conectados a internet. Para crear un balanceador de carga interno, configure la anotación service.beta.kubernetes.io/aws-load-balancer-internal como "true" en su manifiesto.

No se puede aplicar la anotación aws-load-balancer-internal a un servicio existente. Para cambiar entre la configuración interna y la configuración con conexión a internet, debe eliminar y volver a crear el LoadBalancer existente.

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. Esto requiere que las subredes tengan etiquetas específicas. Para obtener más información sobre el autodescubrimiento y el etiquetado de subredes, consulte Subredes de balanceadores de carga .

Como alternativa, puede especificar subredes del balanceador de carga con una anotación. Para ello, agregue la anotación ` service.beta.kubernetes.io/aws-load-balancer-subnets aws-load-balancer-subnets` al servicio. El valor de esta anotación es una lista de ID o nombres de subred 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, se crea una implementación y se expone con un servicio. En el siguiente ejemplo, se crea un balanceador de carga de ejemplo.

  1. Crea tu implementación. Los contenedores de esta implementación 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"
    
  2. Cree la implementación con kubectl apply :

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

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

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

    • Un ELB clásico orientado a Internet
    • Un NLB con acceso a Internet
    • Un ELB clásico interno
    • Un NLB interno

    Seleccione la pestaña que coincida con sus requisitos y copie el manifiesto dentro de ella a un archivo llamado my-lb-service.yaml .

    Clásico 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
    

    NLB con acceso a Internet

    Para crear un balanceador de carga de red (NLB), configure la anotación service.beta.kubernetes.io/aws-load-balancer-type aws-load-balancer-type` como nlb . El siguiente 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
    

    Clásico interno

    Para crear un LoadBalancer interno, configure la anotación service.beta.kubernetes.io/aws-load-balancer-internal como "true" . El siguiente 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 interno

    Puedes crear un NLB interno configurando las anotaciones:

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

    El siguiente 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. Cree el servicio con kubectl apply :

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

    kubectl get service my-lb-service
    

    La salida incluirá una columna EXTERNAL-IP con una dirección del balanceador de carga (pública o privada dependiendo de cómo se creó el balanceador de carga).

  8. Si ha creado un balanceador de carga con acceso a Internet, puede conectarse al balanceador de carga con curl usando el siguiente comando:

    curl http://EXTERNAL_IP:60000
    

    Reemplace EXTERNAL_IP con la dirección de la columna EXTERNAL-IP en el paso anterior.

La salida se parece a la siguiente:

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

Limpiando

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

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

Próximos pasos