Netzwerklastenausgleich
In diesem Thema erfahren Sie, wie Sie einen L4-Load-Balancer einrichten, der von einem Azure-Standard-Load-Balancer mithilfe von GKE in Azure unterstützt wird .
Wenn Sie einen Dienst vom Typ LoadBalancer erstellen, konfiguriert ein GKE on Azure-Controller einen Azure-Load-Balancer.
Hinweise
- Sie müssen einen Cluster erstellen und
kubectlkonfigurieren, um auf den Cluster zugreifen zu können.
Ö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:
- Wenn angegeben und nicht leer,
cluster.networking.serviceLoadBalancerSubnetId - 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.
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"Erstellen Sie das Deployment mit
kubectl apply:kubectl apply -f my-deployment-50001.yamlAchten Sie darauf, dass drei Pods ausgeführt werden:
kubectl get pods --selector=app=productsErstellen Sie einen Service vom Typ
LoadBalancerfü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: 50001Intern
Sie erstellen einen internen LoadBalancer, indem Sie die Annotation
service.beta.kubernetes.io/azure-load-balancer-internalauf"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: 50001Erstellen Sie den Service mit
kubectl apply:kubectl apply -f my-lb-service.yamlSehen Sie sich den Hostnamen des Service mit
kubectl get servicean.kubectl get service my-lb-serviceDie Ausgabe enthält die Spalte
EXTERNAL-IPmit einer Adresse des Load-Balancers (entweder öffentlich oder privat, je nachdem, wie der Load-Balancer erstellt wurde).Wenn Sie einen öffentlichen Load-Balancer erstellt haben, können Sie mit
curleine Verbindung zum Load-Balancer herstellen. Ersetzen Sie external-ip durch die Adresse aus der Ausgabe vonkubectl get serviceaus dem vorherigen Schritt.curl http://external-ip:60000Die 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