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 specialisti di networking che vogliono installare, configurare e supportare le apparecchiature di rete. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei Google Cloud contenuti, consulta Ruoli e attività comuni degli utenti GKE.
Prima di iniziare
- Crea un cluster
e configura
kubectlper connetterti. - Tagga le subnet del bilanciatore del carico del servizio. Questa operazione è necessaria per l'individuazione automatica delle subnet.
- Decidi se hai bisogno di un ELB classico o di rete.
- Decidi se hai bisogno di un bilanciatore del carico interno o rivolto a internet.
Scegli un tipo di bilanciatore del carico
GKE su AWS crea un bilanciatore del carico del servizio come AWS Classic Elastic Load Balancer (Classic ELB) o NLB. 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 saperne di più 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 rivolto a internet
I bilanciatori del carico del servizio 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'service.beta.kubernetes.io/aws-load-balancer-internal
annotazione su "true" nel manifest.
Non puoi applicare l'annotazione aws-load-balancer-internal a un servizio esistente. Per passare da una configurazione rivolta a internet a una interna, devi eliminare e ricreare il LoadBalancer esistente.
Scegli le subnet
Quando crei i bilanciatori del carico, AWS deve sapere in quali subnet inserirli. Per impostazione predefinita, queste subnet vengono rilevate automaticamente tra le subnet del VPC. Per questo, le subnet devono avere tag specifici. Per i dettagli sull'individuazione automatica 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 servizio. Il valore di questa annotazione è un elenco di ID subnet o nomi di subnet separati da virgole, ad esempio subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef.
Crea un bilanciatore del carico di esempio
Crea un servizio di tipo LoadBalancer creando un deployment ed esponendolo con un servizio. Nell'esempio seguente, crei un bilanciatore del carico di esempio.
Crea il deployment. I container in questo deployment sono in ascolto sulla 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"Crea il deployment con
kubectl apply:kubectl apply -f my-deployment-50001.yamlVerifica che siano in esecuzione tre pod:
kubectl get pods --selector=app=productsCrea un servizio di tipo
LoadBalancerper il deployment.Decidi il tipo di bilanciatore del carico di cui hai bisogno:
- Un ELB classico rivolto a internet
- Un NLB rivolto a internet
- Un ELB classico interno
- Un NLB interno
Scegli la scheda che corrisponde ai tuoi requisiti e copia il manifest al suo interno in un file denominato
my-lb-service.yaml.Classico rivolto 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: 50001NLB rivolto a internet
Crea un NLB impostando l'annotazione
service.beta.kubernetes.io/aws-load-balancer-typesunlb. 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: 50001Classico interno
Crea un LoadBalancer interno impostando l'annotazione
service.beta.kubernetes.io/aws-load-balancer-internalsu"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: 50001NLB interno
Crea un NLB interno impostando le annotazioni:
service.beta.kubernetes.io/aws-load-balancer-internalsu"true"service.beta.kubernetes.io/aws-load-balancer-typesunlb
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: 50001Crea il servizio con
kubectl apply:kubectl apply -f my-lb-service.yamlVisualizza l'indirizzo del servizio con
kubectl get service.kubectl get service my-lb-serviceL'output includerà una colonna
EXTERNAL-IPcon l'indirizzo del bilanciatore del carico (pubblico o privato a seconda di come è stato creato).Se hai creato un bilanciatore del carico rivolto a internet, puoi connetterti al bilanciatore del carico con
curlutilizzando il seguente comando:curl http://EXTERNAL_IP:60000Sostituisci
EXTERNAL_IPcon 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
Scopri di più su GKE su Google Cloud documentazione su esposizione delle applicazioni utilizzando i servizi.
Consulta l'elenco completo delle annotazioni supportate.