Questa pagina descrive come configurare un bilanciatore del carico L4 con un bilanciatore del carico di rete AWS Elastic (ELB) o un endpoint di Network Load Balancer (NLB).
Per ulteriori informazioni sugli altri tipi di bilanciatori del carico che puoi utilizzare con GKE su AWS, consulta Panoramica del bilanciatore del carico.
Prima di iniziare
- Crea un cluster e configura
kubectl
per la connessione. - Codifica le subnet del bilanciatore del carico del servizio. Questo passaggio è obbligatorio 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 per internet o interno.
Scegli un tipo di bilanciatore del carico
GKE su AWS crea un bilanciatore del carico dei servizi come bilanciatore del carico AWS Classic
Elastic (ELB classico) o NLB. Per impostazione predefinita, GKE su AWS crea un ELB classico. Per creare un bilanciamento del carico di lavoro, imposta l'annotazione service.beta.kubernetes.io/aws-load-balancer-type
su nlb
.
Per ulteriori informazioni sulle differenze tra i tipi di bilanciatore del carico, consulta Tipi di bilanciatore del carico nella documentazione di AWS.
Scegli un bilanciatore del carico interno o rivolto a internet
I bilanciatori del carico dei servizi possono essere per internet (con un nome DNS risolvibile pubblicamente) o interni (accessibili solo all'interno del tuo VPC).
Per impostazione predefinita, i nuovi bilanciatori del carico sono per 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 dalla configurazione rivolta a internet a quella interna, devi eliminare e ricreare il LoadBalancer esistente.
Scegli le subnet
Durante la creazione dei bilanciatori del carico, AWS deve sapere in quali subnet inserirli. Per impostazione predefinita, queste subnet vengono rilevate automaticamente tra quelle nel VPC. Ciò richiede che le subnet abbiano tag specifici. Per dettagli sul rilevamento automatico 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 separato da virgole di ID o nomi di subnet, ad esempio subnet-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, crei un bilanciatore del carico di esempio.
Crea il deployment. I container in questo deployment sono 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"
Crea il deployment con
kubectl apply
:kubectl apply -f my-deployment-50001.yaml
Verifica che siano in esecuzione tre pod:
kubectl get pods --selector=app=products
Crea un servizio di tipo
LoadBalancer
per il tuo deployment.Scegli il tipo di bilanciatore del carico di cui hai bisogno:
- Un ELB classico con connessione a internet
- Un NLB connesso 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 per 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 per internet
Puoi creare un NLB impostando l'annotazione
service.beta.kubernetes.io/aws-load-balancer-type
sunlb
. Il seguente codice 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 interno
Puoi creare un LoadBalancer interno impostando l'annotazione
service.beta.kubernetes.io/aws-load-balancer-internal
su"true"
. Il seguente codice 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
Puoi creare un NLB interno impostando le annotazioni:
- Da
service.beta.kubernetes.io/aws-load-balancer-internal
a"true"
- Da
service.beta.kubernetes.io/aws-load-balancer-type
anlb
Il seguente codice 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
Crea il servizio con
kubectl apply
:kubectl apply -f my-lb-service.yaml
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 il bilanciatore del carico).Se hai creato un bilanciatore del carico per internet, puoi connetterti al bilanciatore del carico con
curl
utilizzando questo 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
```
esegui la 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ù sulla documentazione di GKE su Google Cloud in Esposizione di applicazioni mediante servizi.
Consulta l'elenco completo delle annotazioni supportate.