Load-Balancer erstellen

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:

  • 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.

  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:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-deployment-50001.yaml
    
  3. Achten Sie darauf, dass drei Pods ausgeführt werden:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods --selector=app=products
    
  4. 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 auf nlb 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" gesetzt
    • service.beta.kubernetes.io/aws-load-balancer-type auf nlb 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
    
  5. Erstellen Sie den Service mit kubectl apply:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-lb-service.yaml
    
  6. 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.

  7. 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 von kubectl 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