Creazione di un bilanciatore del carico

Questo argomento mostra come configurare un bilanciatore del carico AWS Elastic Load Balancer (ELB) con GKE su AWS.

Quando crei un servizio di tipo LoadBalancer, un controller GKE su AWS configura un ELB classico o di rete su AWS.

Puoi anche seguire la guida rapida per creare un ELB classico con accesso esterno dalla Google Cloud console o creare un bilanciatore del carico delle applicazioni (ALB) AWS.

Prima di iniziare

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

  • Installa un servizio di gestione.
  • Crea un cluster utente.
  • Dalla directory anthos-aws, utilizza anthos-gke per passare al contesto del 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.
  • Installa lo strumento da riga di comando curl o uno strumento simile.

Selezionare un bilanciatore del carico esterno o interno

GKE su AWS crea un bilanciatore del carico esterno (nella subnet pubblica) o interno (nella subnet privata) a seconda di un'annotazione alla risorsa LoadBalancer.

Se selezioni un bilanciatore del carico esterno, questo è accessibile dagli indirizzi IP consentiti nei gruppi di sicurezza del pool di nodi e nelle liste di controllo dell'accesso alla rete (ACL)della subnet.

Scegliere 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 bilanciatori del carico, consulta Tipi di bilanciatori del carico nella documentazione di AWS.

Creare un LoadBalancer

Per creare un bilanciatore del carico, crea un deployment ed esegui l'esposizione di questo deployment con un servizio.

  1. Crea il deployment. I container in questo deployment sono in ascolto sulla porta 50001. Salva il seguente file YAML con il nome 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 siano in esecuzione tre pod:

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

    • Un ELB classico nella subnet pubblica
    • Un NLB nella subnet pubblica
    • Un ELB classico nella subnet privata
    • Un NLB nella subnet privata

    Poi, copia il seguente manifest in un file denominato my-lb-service.yaml.

    Classico pubblico

    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

    Per creare un NLB, imposta l'annotazione service.beta.kubernetes.io/aws-load-balancer-type su nlb. Il seguente file 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
    

    Classico privato

    Per creare un LoadBalancer privato, imposta l'annotazione service.beta.kubernetes.io/aws-load-balancer-internal su "true". Il seguente file 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

    Per creare un NLB privato, imposta le annotazioni:

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

    Il seguente file 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 è simile a elb-id.elb.aws-region.amazonaws.com.

  7. Se hai creato un bilanciatore del carico con accesso 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

Risoluzione dei problemi

Se non riesci ad accedere a un endpoint del bilanciatore del carico, prova a aggiungere tag alle subnet.

Passaggi successivi