Crea un bilanciatore del carico di rete

Questa pagina descrive come configurare un bilanciatore del carico L4 con un endpoint AWS Elastic Load Balancer (ELB) o Network Load Balancer (NLB).

Per saperne di più sugli altri tipi di bilanciatori del carico che puoi utilizzare con GKE su AWS, consulta la Panoramica dei bilanciatori del carico.

Questa pagina è rivolta agli esperti di Networking che vogliono installare, configurare e supportare le apparecchiature di rete. Per scoprire di più sui ruoli comuni e sugli esempi di attività a cui facciamo riferimento nei Google Cloud contenuti, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.

Prima di iniziare

Scegli un tipo di bilanciatore del carico

GKE su AWS crea un bilanciatore del carico del servizio come bilanciatore del carico elastico (ELB) o NLB classico di AWS. Per impostazione predefinita, GKE su AWS crea un ELB classico. Per creare un NLB, imposta l'annotazione service.beta.kubernetes.io/aws-load-balancer-type su nlb. Per ulteriori informazioni sulle differenze tra i tipi di bilanciatori del carico, consulta Tipi di bilanciatori del carico nella documentazione di AWS.

Scegli un bilanciatore del carico interno o solo per internet

I bilanciatori del carico dei servizi possono essere rivolti a internet (con un nome DNS risolvibile pubblicamente) o interni (accessibili solo all'interno del VPC).

Per impostazione predefinita, i nuovi bilanciatori del carico sono rivolti a internet. Per creare un bilanciatore del carico interno, imposta l'annotazione service.beta.kubernetes.io/aws-load-balancer-internal su "true" nel manifest.

Non puoi applicare l'annotazione aws-load-balancer-internal a un servizio esistente. Per passare da una configurazione interna a una per internet e viceversa, devi eliminare e ricreare il bilanciatore del carico esistente.

Scegli le subnet

Quando crei i bilanciatori del carico, AWS deve sapere in quali subnet posizionarli. Per impostazione predefinita, queste subnet vengono rilevate automaticamente tra le subnet della VPC. Ciò richiede che le subnet abbiano tag specifici. Per informazioni dettagliate sull'auto-discovery e sul tagging delle subnet, consulta Subnet del bilanciatore del carico.

In alternativa, puoi specificare le subnet del bilanciatore del carico con un'annotazione aggiungendo l'annotazione service.beta.kubernetes.io/aws-load-balancer-subnets al Service. Il valore di questa annotazione è un elenco separato da virgole di ID o nomi di subnet, ad esempiosubnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef.

Crea un bilanciatore del carico di esempio

Puoi creare un servizio di tipo LoadBalancer creando un deployment ed esponendolo con un servizio. Nell'esempio seguente viene creato un bilanciatore del carico di esempio.

  1. Crea il tuo deployment. I container in questo deployment rimangono in ascolto sulla porta 50001. Salva il seguente codice 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:

    kubectl apply -f my-deployment-50001.yaml
    
  3. Verifica che siano in esecuzione tre pod:

    kubectl get pods --selector=app=products
    
  4. Crea un servizio di tipo LoadBalancer per il tuo deployment.

  5. Decidi il tipo di bilanciatore del carico di cui hai bisogno:

    • Un bilanciatore del carico classico rivolto a internet
    • Un NLB con accesso a internet
    • Un bilanciatore del carico classico interno
    • Un NLB interno

    Scegli la scheda che soddisfa i tuoi requisiti e copia il file manifest al suo interno in un file denominato my-lb-service.yaml.

    Chat classica con accesso a internet

    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 con accesso a internet

    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
    

    Versione classica interna

    Puoi creare un bilanciatore del carico interno impostando 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 interno

    Per creare un NLB interno, imposta 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 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
    
  6. Crea il servizio con kubectl apply:

    kubectl apply -f my-lb-service.yaml
    
  7. Visualizza l'indirizzo del servizio con kubectl get service.

    kubectl get service my-lb-service
    

    L'output includerà una colonna EXTERNAL-IP con un indirizzo del bilanciatore del carico (pubblico o privato, a seconda di come è stato creato).

  8. Se hai creato un bilanciatore del carico per internet, puoi connetterti al bilanciatore del carico con curl utilizzando il seguente comando:

    curl http://EXTERNAL_IP:60000
    

    Sostituisci EXTERNAL_IP con l'indirizzo della colonna EXTERNAL-IP nel passaggio precedente.

L'output è simile al seguente:

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

Pulizia

Per rimuovere il servizio e il deployment, utilizza il comando kubectl delete:

kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml

Passaggi successivi