In diesem Thema wird gezeigt, wie Sie einen AWS Elastic Load Balancer (ELB) mit GKE on AWS einrichten.
Wenn Sie einen Dienst vom Typ LoadBalancer
erstellen, konfiguriert ein GKE on AWS-Controller einen klassischen oder Netzwerk ELB in AWS.
Sie können auch der Kurzanleitung folgen, um extern das ELB von der Google Cloud Console aus zu erstellen oder einen AWS-Anwendungs-Load-Balancer (ALB) zu erstellen.
Hinweise
Bevor Sie GKE on AWS verwenden, müssen die folgenden Bedingungen erfüllt sein:
- Erfüllen Sie die Voraussetzungen.
- Der Verwaltungsdienst muss installiert sein.
- Nutzercluster erstellen
- Verwenden Sie im
anthos-aws
-Verzeichnisanthos-gke
, um den Kontext zu Ihrem Nutzercluster zu wechseln. Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Nutzerclusters.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- Sie haben das
curl
-Befehlszeilentool oder ein ähnliches Tool installiert.
Externen oder internen Load-Balancer auswählen
GKE in 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 unter 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
Fehlerbehebung
Wenn Sie nicht auf einen Load-Balancer-Endpunkt zugreifen können, versuchen Sie, Ihre Subnetze zu taggen.
Weitere Informationen
Folgen Sie der Kurzanleitung, um extern ein klassisches ELB aus der Google Cloud Console zu erstellen.
Lesen Sie die Google Cloud Dokumentation zu GKE on Google Cloud unter Anwendungen über Dienste verfügbar machen.