Bilanciamento del carico di rete

Questo argomento mostra come configurare un bilanciatore del carico L4 supportato da un bilanciatore del carico Azure Standard utilizzando GKE su Azure .

Quando crei un servizio di tipo LoadBalancer, un controller GKE on Azure configura un bilanciatore del carico Azure.

Prima di iniziare

Selezione di un bilanciatore del carico pubblico o privato

I bilanciatori del carico dei servizi possono essere pubblici, con indirizzi IP frontend pubblici, o interni, accessibili solo tramite indirizzi IP privati.

Per impostazione predefinita, un nuovo servizio è pubblico. Per creare un bilanciatore del carico interno, imposta l'annotazione service.beta.kubernetes.io/azure-load-balancer-internal su "true" nel manifest.

Scelta della subnet per i bilanciatori del carico interni

Quando crei un bilanciatore del carico interno, GKE su Azure deve scegliere la sottorete in cui posizionarlo. Questa subnet del bilanciatore del carico del servizio predefinita viene scelta dai parametri di creazione del cluster come segue:

  1. Se specificato e non vuoto, cluster.networking.serviceLoadBalancerSubnetId
  2. In caso contrario, cluster.controlPlane.subnetId

In alternativa, puoi specificare la sottorete da utilizzare per un determinato bilanciatore del carico aggiungendo l'annotazione service.beta.kubernetes.io/azure-load-balancer-internal-subnet al servizio. Il valore di questa annotazione è il nome della subnet.

Creazione di un LoadBalancer di esempio

Per creare un bilanciatore del carico, devi creare un deployment e esporlo con un servizio.

  1. Crea il tuo deployment. I container in questo deployment rimangono in ascolto sulla porta 50001. Salva il seguente codice YAML in un file denominato 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 il deployment con kubectl apply:

    kubectl apply -f my-deployment-50001.yaml
    
  3. Verifica che siano in esecuzione tre pod:

    kubectl get pods --selector=app=products
    
  4. Crea un servizio di tipo LoadBalancer per il tuo deployment. Puoi creare un bilanciatore del carico Azure Standard pubblico o interno. Scegli una delle seguenti opzioni.

    Copia uno dei seguenti manifest in un file denominato my-lb-service.yaml.

    Pubblico

    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

    Puoi creare un bilanciatore del carico interno impostando l'annotazione service.beta.kubernetes.io/azure-load-balancer-internal su "true". Il seguente file YAML include questa annotazione. 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 il servizio con kubectl apply:

    kubectl apply -f my-lb-service.yaml
    
  6. Visualizza l'indirizzo del servizio con kubectl get service.

    kubectl get service my-lb-service
    

    L'output includerà una colonna EXTERNAL-IP con un indirizzo del bilanciatore del carico (pubblico o privato, a seconda di come è stato creato).

  7. Se hai creato un bilanciatore del carico pubblico, puoi connetterti al bilanciatore del carico con curl. Sostituisci external-ip con l'indirizzo dell'output di kubectl get service del passaggio precedente.

    curl http://external-ip:60000
    

    L'output è simile al seguente:

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

Pulizia

Per rimuovere il servizio e il deployment, utilizza kubectl delete.

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