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.

    Pública

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

    Interno

    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