Balanceo de cargas de red

En este tema, se muestra cómo configurar un balanceador de cargas L4 respaldado por un balanceador de cargas estándar de Azure a través de GKE en Azure.

Cuando se crea un Service de tipo LoadBalancer, un controlador de GKE en Azure configura un balanceador de cargas de Azure.

Antes de comenzar

Selecciona un balanceador de cargas público o privado

Los balanceadores de cargas de Service pueden ser públicos, con IP de frontend públicas, o internos, a los que solo se puede acceder a través de IP privadas.

De forma predeterminada, un Service nuevo es público. Para crear un balanceador de cargas interno, establece la anotación service.beta.kubernetes.io/azure-load-balancer-internal en "true" en tu manifiesto.

Elige una subred para balanceadores de cargas internos

Cuando se crea un balanceador de cargas interno, GKE en Azure debe elegir la subred en la que se colocará el balanceador de cargas. Esta subred predeterminada del balanceador de cargas de Service se elige a partir de los parámetros de creación del clúster de la siguiente manera:

  1. Si se especifica y no está vacío, cluster.networking.serviceLoadBalancerSubnetId
  2. En caso contrario, cluster.controlPlane.subnetId

Como alternativa, puedes especificar la subred que se usará para un balanceador de cargas determinado; para esto agrega la anotación service.beta.kubernetes.io/azure-load-balancer-internal-subnet al Service. El valor de esta anotación es el nombre de la subred.

Crea un LoadBalancer de ejemplo

Para crear un balanceador de cargas, debes crear una implementación y exponerla con un servicio.

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

    kubectl apply -f my-deployment-50001.yaml
  3. Verifica que los tres Pods estén en ejecución:

    kubectl get pods --selector=app=products
  4. Crea un Service de tipo LoadBalancer para la implementación. Puedes crear un balanceador de cargas estándar de Azure que sea público o interno. Elige una de las siguientes opciones.

    Copia uno de los siguientes manifiestos en un archivo llamado my-lb-service.yaml.

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

    Crea un LoadBalancer interno configurando la anotación service.beta.kubernetes.io/azure-load-balancer-internal como "true". En el siguiente YAML, se incluye esta anotación.yaml apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001

  5. Crea el Service con kubectl apply:

    kubectl apply -f my-lb-service.yaml
  6. Visualiza la dirección de host del Service con kubectl get service.

    kubectl get service my-lb-service

    El resultado incluirá una columna EXTERNAL-IP con una dirección del balanceador de cargas (público o privado según cómo se creó el balanceador de cargas).

  7. Si creaste un balanceador de cargas público, puedes conectarte a él con curl. Reemplaza external-ip por la dirección del resultado de kubectl get service del paso anterior.

    curl http://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.

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