Balanceo de carga de red

En este tema se explica cómo configurar un balanceador de carga de nivel 4 respaldado por un balanceador de carga estándar de Azure mediante GKE en Azure .

Cuando creas un servicio de tipo LoadBalancer, un controlador de GKE en Azure configura un balanceador de carga de Azure.

Antes de empezar

Seleccionar un balanceador de carga público o privado

Los balanceadores de carga de servicio pueden ser públicos (con IPs de frontend públicas) o internos (solo se puede acceder a ellos a través de IPs privadas).

De forma predeterminada, un servicio nuevo es público. Para crear un balanceador de carga interno, debe definir la anotación service.beta.kubernetes.io/azure-load-balancer-internal en "true" en su manifiesto.

Elegir una subred para los balanceadores de carga internos

Al crear un balanceador de carga interno, GKE en Azure debe elegir la subred en la que se colocará el balanceador de carga. Esta subred del balanceador de carga de servicio predeterminado 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. De lo contrario, cluster.controlPlane.subnetId

También puede especificar la subred que se va a usar en un balanceador de carga determinado añadiendo la anotación service.beta.kubernetes.io/azure-load-balancer-internal-subnet al servicio. El valor de esta anotación es el nombre de la subred.

Crear un LoadBalancer de ejemplo

Para crear un balanceador de carga, crea un despliegue y expónlo con un servicio.

  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. Puede crear un balanceador de carga 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úblico

    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

    Para crear un balanceador de carga interno, debe definir la anotación service.beta.kubernetes.io/azure-load-balancer-internal en "true". El siguiente archivo YAML 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 servicio con kubectl apply:

    kubectl apply -f my-lb-service.yaml
    
  6. 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).

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

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

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