Equilibrio de carga de la red

Este tema le muestra cómo configurar un equilibrador de carga L4 respaldado por un equilibrador de carga estándar de Azure mediante GKE en Azure.

Cuando se crea un servicio de tipo LoadBalancer , un controlador de GKE en Azure configura un Azure Load Balancer .

Antes de empezar

Seleccionar un balanceador de carga público o privado

Los balanceadores de carga de servicio pueden ser públicos (que tienen direcciones IP públicas de interfaz) o internos (solo se puede acceder a ellos a través de direcciones IP privadas).

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

Selección de subred para balanceadores de carga internos

Al crear un equilibrador de carga interno, GKE en Azure debe seleccionar la subred donde colocarlo. Esta subred predeterminada del equilibrador de carga del servicio 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

Como alternativa, puede especificar la subred que se usará para 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.

Creación de un LoadBalancer de ejemplo

Para crear un equilibrador de carga, cree una implementación y exponga esa implementación con un servicio.

  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. Puede crear un Azure Standard Load Balancer público o interno. Elija una de las siguientes opciones.

    Copie uno de los siguientes manifiestos a 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, configure la anotación service.beta.kubernetes.io/azure-load-balancer-internal /azure-load-balancer-internal` como "true" . El siguiente 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. Cree el servicio con kubectl apply :

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

  7. Si ha creado un balanceador de carga público, puede conectarse a él con curl . Reemplace external-ip con la dirección del resultado de kubectl get service del paso anterior.

    curl http://external-ip:60000
    

    La salida se parece a la siguiente:

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

Limpiando

Para eliminar el servicio y la implementación, use kubectl delete .

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