Questo argomento mostra come configurare un bilanciatore del carico AWS Elastic (ELB) con GKE su AWS.
Quando crei un servizio di tipo LoadBalancer
, un controller GKE su AWS
configura un controller
versione classica o
rete
ELB su AWS.
Puoi anche seguire la Guida rapida per creare un ELB classico rivolto all'esterno dalla console Google Cloud 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à:
- Completa i prerequisiti.
- Installa un servizio di gestione.
- Crea un cluster utente.
- Dalla directory
anthos-aws
, utilizzaanthos-gke
per cambiare contesto al 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 tuo cluster utente. - Installa lo strumento a riga di comando
curl
o uno strumento simile.
Selezione di 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, vi potrai accedere mediante gli indirizzi IP consentiti nei gruppi di sicurezza del pool di nodi e negli elenchi di controllo dell'accesso (ACL) di rete della subnet.
Scelta del 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 Tipi di bilanciatore del carico nella documentazione di AWS.
Creazione di un LoadBalancer
Per creare un bilanciatore del carico, devi creare un deployment ed esponerlo con un servizio.
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
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-deployment-50001.yaml
Verifica che siano in esecuzione tre pod:
env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
Crea un servizio di tipo
LoadBalancer
per il tuo deployment. Puoi creare un ELB classico o di rete sulla tua subnet pubblica o privata. Scegli una delle seguenti opzioni.- Un ELB classico sulla subnet pubblica
- Un NLB sulla subnet pubblica
- Un ELB classico nella subnet privata
- Un NLB sulla subnet privata
Quindi copia il seguente manifest 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
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
Privata classica
Puoi creare un LoadBalancer privato 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 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
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
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-lb-service.yaml
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
.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 dikubectl 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
esegui la 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 eseguire il tagging delle subnet.
Passaggi successivi
Segui la Guida rapida per creare un ELB classico rivolto all'esterno dalla console Google Cloud.
Leggi la documentazione di GKE su Google Cloud relativa all'esposizione di applicazioni mediante servizi.