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
- Sie müssen einen Cluster erstellen und
kubectl
konfigurieren, 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.yaml
Achten Sie darauf, dass drei Pods ausgeführt werden:
kubectl get pods --selector=app=products
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
Erstellen Sie den Service mit
kubectl apply
:kubectl apply -f my-lb-service.yaml
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).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 vonkubectl 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