Creazione di un Elastic Load Balancer (ELB)

Questo argomento mostra come configurare un bilanciatore del carico AWS Elastic (ELB) con i cluster Anthos su AWS (GKE su AWS).

Quando crei un servizio di tipo LoadBalancer, un cluster Anthos sul controller AWS configura un'ELB classica o di rete su AWS.

Puoi anche seguire la guida rapida per creare un ELB classico esterno rivolto da Google Cloud Console o creare un bilanciatore del carico dell'applicazione AWS (ALB).

Prima di iniziare

Prima di iniziare a utilizzare i cluster Anthos su AWS, assicurati di aver eseguito le seguenti attività:

  • Installa un servizio di gestione.
  • Crea un cluster utente.
  • Dalla tua directory anthos-aws, utilizza anthos-gke per cambiare contesto al tuo cluster utente.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Sostituisci CLUSTER_NAME con il nome del cluster utente.
  • Avere installato lo strumento a riga di comando curl o uno strumento simile.

Selezione di un bilanciatore del carico esterno o interno

I cluster Anthos su AWS creano un bilanciatore del carico esterno (nella subnet pubblica) o interno (nella subnet privata) in base a un'annotazione per la risorsa LoadBalancer.

Se selezioni un bilanciatore del carico esterno, questo sarà accessibile dagli indirizzi IP consentiti nei gruppi di sicurezza dei pool di nodi e dagli elenchi di controllo di accesso alla rete (ACL) di subnet.

Scelta di un tipo di bilanciatore del carico

Scegli se vuoi creare un bilanciatore del carico classico (ELB classico) o un bilanciatore del carico di rete (NLB). Per ulteriori informazioni sulle differenze tra i tipi di bilanciatore del carico, consulta la sezione Tipi di bilanciatore del carico nella documentazione di AWS.

Creazione di un bilanciatore del carico

Puoi creare un bilanciatore del carico creando un deployment ed esponendolo con un servizio.

  1. Crea il tuo deployment. I container in questo deployment ascoltano la porta 50001. Salva il seguente YAML in un file denominato 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. Crea il deployment con kubectl apply:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-deployment-50001.yaml
    
  3. Verifica che tre pod siano in esecuzione:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods --selector=app=products
    
  4. Crea un servizio di tipo LoadBalancer per il tuo deployment. Puoi creare un ELB di rete classico o di rete sulla tua subnet pubblica o privata. Scegli una delle seguenti opzioni:

    • Un'ELB classica nella subnet pubblica
    • Un NLB sulla subnet pubblica
    • Un file ELB classico nella subnet privata
    • Un NLB sulla subnet privata

    Copia quindi il manifest seguente in un file denominato my-lb-service.yaml.

    Pubblico classico

    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 Pubblico

    Puoi creare un NLB impostando l'annotazione service.beta.kubernetes.io/aws-load-balancer-type su nlb. Il seguente YAML include questa annotazione.

    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
    

    Privato classico

    Puoi creare un LoadBalancer privato impostando l'annotazione service.beta.kubernetes.io/aws-load-balancer-internal su "true". Il seguente YAML include questa annotazione.

    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 privato

    Puoi creare un NLB privato impostando le annotazioni:

    • Da service.beta.kubernetes.io/aws-load-balancer-internal a "true"
    • Da service.beta.kubernetes.io/aws-load-balancer-type a nlb

    Il seguente YAML include entrambe le annotazioni.

    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. Crea il servizio con kubectl apply:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-lb-service.yaml
    
  6. Visualizza il nome host del servizio con kubectl get service.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get service my-lb-service \
      --output jsonpath="{.status.loadBalancer.ingress..hostname}{'\n'}"
    

    L'output assomiglia a elb-id.elb.aws-region.amazonaws.com.

  7. Se hai creato un bilanciatore del carico rivolto all'esterno e hai accesso alla subnet VPC pubblica, puoi connetterti al bilanciatore del carico con curl. Sostituisci external-ip con l'IP dell'output di kubectl get service del passaggio precedente.

    curl external-ip:60000
    

    L'output è simile al seguente:

    Hello, world!
    Version: 2.0.0
    Hostname: my-deployment-50001-84b6dc5555-zmk7q
    

Pulizia

Per rimuovere il servizio e il deployment, utilizza 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

Risolvere i problemi

Se non riesci ad accedere a un endpoint del bilanciatore del carico, prova a codificare le subnet.

Passaggi successivi