In diesem Thema erfahren Sie, wie Sie einen AWS Elastic Load Balancer (ELB) mit Anthos-Clustern in AWS (GKE in AWS) einrichten.
Wenn Sie einen Dienst vom Typ LoadBalancer
erstellen, konfiguriert ein Anthos-Cluster auf dem AWS-Controller ein klassisches oder Netzwerk-ELB. für AWS.
Sie können auch die Kurzanleitung verwenden, um über die Google Cloud Console einen extern klassischen Classic ELB zu erstellen oder AWS Application Load Balancer (ALB) zu erstellen.
Hinweis
Bevor Sie Anthos-Cluster auf AWS verwenden, führen Sie die folgenden Aufgaben aus:
- Sie haben dafür gesorgt, dass die Voraussetzungen erfüllt sind.
- Der Verwaltungsdienst muss installiert sein.
- Nutzercluster erstellen
- Verwenden Sie im Verzeichnis
anthos-aws
anthos-gke
, um den Kontext zu Ihrem Nutzercluster zu wechseln.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Ersetzen Sie CLUSTER_NAME durch den Nutzerclusternamen. - Sie haben das
curl
-Befehlszeilentool oder ein ähnliches Tool installiert.
Externen oder internen Load-Balancer auswählen
Anthos-Cluster on AWS erstellt eine externe (in Ihrem öffentlichen Subnetz) oder einen internen Load-Balancer (in Ihrem privaten Subnetz) basierend auf einer Anmerkung zur Load-Balancer-Ressource.
Wenn Sie einen externen Load-Balancer auswählen, ist er über die IP-Adressen zugänglich, die in den Sicherheitsgruppen des Knotenpools und der Netzwerkzugriffssteuerung des Subnetzes zulässig sind Listen (ACLs)
Load-Balancer-Typ wählen
Wählen Sie aus, ob Sie einen Classic Load Balancer (Classic ELB) oder einen Network Load Balancer (NLB) erstellen möchten. Weitere Informationen zu den Unterschieden zwischen den Load-Balancer-Typen finden Sie in der AWS-Dokumentation zu Load-Balancer-Typen.
Load-Balancer 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
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-deployment-50001.yaml
Achten Sie darauf, dass drei Pods ausgeführt werden:
env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
Erstellen Sie einen Service vom Typ
LoadBalancer
für Ihr Deployment. Sie können einen Classic oder Network ELB im öffentlichen oder privaten Subnetz erstellen. Wählen Sie eine der folgenden Optionen aus:- Classic ELB im öffentlichen Subnetz
- NLB im öffentlichen Subnetz
- Classic ELB im privaten Subnetz
- NLB im privaten Subnetz
Kopieren Sie dann das folgende Manifest in eine Datei mit dem Namen
my-lb-service.yaml
.Classic ö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
NLB öffentlich
Sie erstellen einen NLB, indem Sie die Annotation
service.beta.kubernetes.io/aws-load-balancer-type
aufnlb
setzen. Der folgende YAML-Code enthält diese Annotation.apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
Classic privat
Sie erstellen einen privaten LoadBalancer, indem Sie die Annotation
service.beta.kubernetes.io/aws-load-balancer-internal
auf"true"
setzen. Der folgende YAML-Code enthält diese Annotation.apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
NLB privat
Sie erstellen einen privaten NLB, indem Sie die Annotationen festlegen:
service.beta.kubernetes.io/aws-load-balancer-internal
auf"true"
gesetztservice.beta.kubernetes.io/aws-load-balancer-type
aufnlb
gesetzt
Der folgende YAML-Code enthält beide Annotationen.
apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" service.beta.kubernetes.io/aws-load-balancer-type: nlb spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
Erstellen Sie den Service mit
kubectl apply
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-lb-service.yaml
Sehen Sie sich den Hostnamen des Service mit
kubectl get service
an.env HTTPS_PROXY=http://localhost:8118 \ kubectl get service my-lb-service \ --output jsonpath="{.status.loadBalancer.ingress..hostname}{'\n'}"
Die Ausgabe ähnelt
elb-id.elb.aws-region.amazonaws.com
.Wenn Sie einen extern ausgerichteten Load-Balancer erstellt und Zugriff auf das öffentliche VPC-Subnetz haben, können Sie mit
curl
eine Verbindung zum Load-Balancer herstellen. Ersetzen Sie external-ip durch die IP-Adresse aus der Ausgabe vonkubectl get service
aus dem vorherigen Schritt.curl 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
.
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f my-lb-service.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f my-deployment-50001.yaml
Problembehebung
Wenn Sie nicht auf einen Load-Balancer-Endpunkt zugreifen können, versuchen Sie, Ihre Subnetze zu taggen.
Nächste Schritte
Folgen Sie der Kurzanleitung, um einen klassischen ELB aus der Google Cloud Console zu erstellen.
Lesen Sie die Dokumentation zu GKE on Google Cloud unter Anwendungen über Services verfügbar machen.