Questa pagina descrive il funzionamento di GKE su AWS con AWS per scegliere le sotto reti per i bilanciatori del carico dei servizi e come taggare le sotto reti da rilevare automaticamente durante la creazione del bilanciatore del carico del servizio.
Perché devi specificare le subnet
Quando crei i bilanciatori del carico, AWS deve sapere in quali subnet inserirli. La subnet determina le zone di disponibilità, gli indirizzi IP e gli endpoint del bilanciatore del carico.
In genere, i bilanciatori del carico vengono allocati a una subnet per ogni zona di disponibilità contenente un pool di nodi. AWS ha bisogno di almeno una subnet disponibile per creare un bilanciatore del carico di rete (NLB) e di almeno due subnet per un bilanciatore del carico delle applicazioni (ALB).
Tutte le subnet AWS sono pubbliche (con IP pubblici e una route al gateway internet del VPC) o private (prive di queste funzionalità). I bilanciatori del carico rivolti a internet devono trovarsi in subnet pubbliche. I bilanciatori del carico interni possono essere collocati in subnet pubbliche o private.
Se non sono disponibili subnet con tag
Se GKE su AWS deve creare un bilanciatore del carico e non sono disponibili sottoreti con tag o con capacità, potrebbe creare il bilanciatore del carico in un'altra sottorete. Per evitare questo problema e controllare le subnet in cui sono posizionati i bilanciatori del carico, devi taggare tutte le subnet.
Rilevamento automatico delle subnet
GKE su AWS rileva automaticamente le subnet da utilizzare per un bilanciatore del carico elencando tutte le subnet della VPC e selezionando fino a una subnet per ogni zona di disponibilità.
Affinché GKE su AWS possa rilevare automaticamente una subnet, quest'ultima deve:
- Essere contrassegnato con
kubernetes.io/role/elb
(per un bilanciatore del carico rivolto a internet) - Essere contrassegnato con
kubernetes.io/role/internal-elb
(per un bilanciatore del carico interno) - Non contenere tag con prefisso
kubernetes.io/cluster/
o contenere il tagkubernetes.io/cluster/CLUSTER_UID
, doveCLUSTER_UID
è l'UID del cluster corrente.
Inoltre, una subnet destinata all'utilizzo con un bilanciatore del carico per internet deve avere una route al gateway internet della VPC.
Se in una zona di disponibilità sono presenti più sottoreti che soddisfano i requisiti del bilanciatore del carico, GKE su AWS le classifica in ordine di ID subnet.
Contrassegna le subnet per l'utilizzo previsto
Affinché GKE su AWS possa rilevare automaticamente una subnet per un bilanciatore del carico, devi applicare uno dei due tag alla subnet per segnalarne la disponibilità. Questi sono:
kubernetes.io/role/elb
: applica questo tag alla tua subnet per contrassegnarla come disponibile per un bilanciatore del carico rivolto a internet. Deve essere una subnet pubblica con una route al gateway internet della tua VPC. Imposta il tag su1
. Per applicare questo tag, esegui il seguente comando:aws ec2 create-tags \ --resources SUBNET_ID \ --tags "Key=kubernetes.io/role/elb,Value=1"
kubernetes.io/role/internal-elb
: applica questo tag alla tua subnet per contrassegnarla come disponibile per un bilanciatore del carico interno. Imposta il valore del tag su1
. Per applicare questo tag, esegui il seguente comando:aws ec2 create-tags \ --resources SUBNET_ID \ --tags Key=kubernetes.io/role/internal-elb,Value=1
Sostituisci quanto segue:
SUBNET_ID
: l'ID della subnet che stai taggando
Dopo aver assegnato alla sottorete un tag kubernetes.io/role
, puoi anche taggarla con uno o più tag kubernetes.io/cluster/CLUSTER_UID
, dove CLUSTER_UID è l'UID di un cluster GKE su AWS.
In questo modo, qualsiasi cluster non elencato in uno di questi tag non potrà rilevare automaticamente la sottorete da utilizzare per i relativi bilanciatori del carico.
Per ulteriori informazioni sul comando aws ec2 create-tags
, consulta la documentazione di Amazon aws ec2 create-tags.
Risoluzione dei problemi
Il problema più comune con la configurazione del bilanciatore del carico è rappresentato dalle sottoreti con tag errati. Ciò può causare la selezione da parte dell'algoritmo di rilevamento automatico delle sottoreti sbagliate. Per diagnosticare e risolvere il problema:
Se stai creando un bilanciatore del carico rivolto a internet, assicurati che esista almeno una subnet pubblica in ciascuna delle zone di disponibilità che contengono un pool di nodi e che le subnet siano contrassegnate con il tag
kubernetes.io/role/elb
.Se stai creando un bilanciatore del carico interno, assicurati che in ciascuna delle zone di disponibilità sia presente almeno una subnet contenente un pool di nodi e che le subnet siano contrassegnate con
kubernetes.io/role/internal-elb
.Verifica se le sottoreti che vuoi rilevare automaticamente hanno tag del tipo
kubernetes.io/cluster/CLUSTER_UID
. Se una subnet contiene uno di questi tag che indicano un cluster, la subnet può essere scoperta automaticamente solo dai cluster denominati. Per risolvere il problema, elimina tutti i tag del nome del cluster (per consentire il rilevamento automatico della sottorete da qualsiasi cluster) o aggiungi un tag del nome del cluster con l'UID del cluster GKE su AWS e un valoreshared
.Controlla la cronologia eventi di Kubernetes con il seguente comando:
kubectl get events -A | grep LoadBalancer
Ad esempio, il messaggio di evento
could not find any suitable subnets for creating the ELB
indica che non è stato possibile rilevare automaticamente sottoreti. Se ricevi questo avviso, assicurati che le subnet e i relativi tag siano corretti e completi.Per elencare le subnet che possono essere rilevate automaticamente per i bilanciatori del carico rivolti a internet, esegui il seguente comando:
aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/elb,Values=*"
Sostituisci
VPC_ID
con l'ID della tua VPC.Per elencare le subnet che possono essere rilevate automaticamente per i bilanciatori del carico interni, esegui:
aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/internal-elb,Values=*"
Passaggi successivi
Scopri di più sul bilanciamento del carico di rete