Netzwerklastenausgleich

In diesem Thema erfahren Sie, wie Sie mit GKE on Azure einen L4-Load-Balancer einrichten, der von einem Azure Standard-Load-Balancer unterstützt wird .

Wenn Sie einen Dienst vom Typ LoadBalancer erstellen, konfiguriert ein GKE on Azure-Controller einen Azure Load Balancer.

Hinweise

Öffentlichen oder privaten Load-Balancer auswählen

Dienst-Load-Balancer können entweder öffentlich – mit öffentlichen Frontend-IP-Adressen – oder intern sein – nur über private IP-Adressen zugänglich.

Standardmäßig sind neue Dienste öffentlich. Zum Erstellen eines internen Load-Balancers legen Sie für die Annotation service.beta.kubernetes.io/azure-load-balancer-internal in Ihrem Manifest den Wert "true" fest.

Subnetz für interne Load-Balancer auswählen

Beim Erstellen eines internen Load-Balancers muss GKE on Azure das Subnetz auswählen, in dem der Load-Balancer platziert werden soll. Dieses standardmäßige Subnetz für den Dienst-Load-Balancer wird aus den Erstellungsparametern des Clusters so ausgewählt:

  1. Wenn angegeben und nicht leer, cluster.networking.serviceLoadBalancerSubnetId
  2. Andernfalls cluster.controlPlane.subnetId.

Alternativ können Sie das für einen bestimmten Load-Balancer zu verwendende Subnetz angeben, indem Sie dem Dienst die Annotation service.beta.kubernetes.io/azure-load-balancer-internal-subnet hinzufügen. Der Wert für diese Annotation ist der Name des Subnetzes.

Beispiel-LoadBalancer erstellen

Sie erstellen einen Load-Balancer, indem Sie ein Deployment erstellen und dieses mit einem Service verfügbar machen.

  1. Erstellen Sie Ihr Deployment. Container in diesem Deployment überwachen Port 50001. Speichern Sie den folgenden YAML-Code in einer Datei mit dem Namen 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. Erstellen Sie das Deployment mit kubectl apply:

    kubectl apply -f my-deployment-50001.yaml
    
  3. Achten Sie darauf, dass drei Pods ausgeführt werden:

    kubectl get pods --selector=app=products
    
  4. Erstellen Sie einen Service vom Typ LoadBalancer für Ihr Deployment. Sie können einen öffentlichen oder internen Azure-Standard-Load-Balancer erstellen. Wählen Sie eine der folgenden Optionen aus:

    Kopieren Sie eines der folgenden Manifeste in eine Datei mit dem Namen my-lb-service.yaml.

    Öffentlich

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

    Intern

    Sie erstellen einen internen LoadBalancer, indem Sie die Annotation service.beta.kubernetes.io/azure-load-balancer-internal auf "true" setzen. Der folgende YAML-Code enthält diese Annotation. 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. Erstellen Sie den Service mit kubectl apply:

    kubectl apply -f my-lb-service.yaml
    
  6. Sehen Sie sich den Hostnamen des Service mit kubectl get service an.

    kubectl get service my-lb-service
    

    Die Ausgabe enthält die Spalte EXTERNAL-IP mit einer Adresse des Load-Balancers (entweder öffentlich oder privat, je nachdem, wie der Load-Balancer erstellt wurde).

  7. Wenn Sie einen öffentlichen Load-Balancer erstellt haben, können Sie mit curl eine Verbindung zum Load-Balancer herstellen. Ersetzen Sie external-ip durch die Adresse aus der Ausgabe von kubectl get service aus dem vorherigen Schritt.

    curl http://external-ip:60000
    

    Die Ausgabe sollte so aussehen:

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

Bereinigen

Entfernen Sie den Dienst und das Deployment mit kubectl delete.

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