Questa pagina mostra come assegnare subnet aggiuntive a un cluster nativo di VPC. Le subnet aggiuntive assegnate a un cluster ti consentono di creare nuovi node pool in cui gli indirizzi IPv4 per nodi e pod provengono dagli intervalli di subnet aggiuntivi.
Questa pagina è rivolta agli specialisti di Networking che progettano e realizzano l'architettura di rete per la propria organizzazione. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei Cloud de Confiance by S3NS contenuti, consulta Ruoli e attività comuni degli utenti GKE e attività.
Panoramica
Quando crei un nuovo cluster GKE nativo di VPC, selezioni una subnet predefinita per il cluster. La subnet predefinita del cluster fornisce indirizzi IPv4 per nodi, pod e servizi, come descritto in Intervalli di indirizzi IP per cluster nativi di VPC.
Puoi assegnare fino a otto subnet aggiuntive a un cluster nativo di VPC, consentendo una crescita significativa del cluster. Ogni subnet aggiuntiva appena assegnata viene chiamata subnet non predefinita.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Requisiti e limitazioni
Questa sezione descrive i requisiti e le limitazioni che si applicano quando assegni e utilizzi subnet aggiuntive a un cluster. Devi soddisfare tutti i requisiti prima di assegnare subnet aggiuntive.
- Assicurati che il cluster GKE sia un cluster nativo di VPC che esegue GKE versione 1.30.3-gke.1211000 o successive. I cluster basati su route e i cluster sulle reti legacy non supportano subnet aggiuntive.
- Puoi assegnare fino a otto subnet aggiuntive per cluster.
- Le subnet aggiuntive forniscono solo indirizzi IPv4 per nodi e pod. Le subnet aggiuntive non possono essere utilizzate per fornire indirizzi IPv6 per nodi o pod.
- Solo i nuovi node pool possono utilizzare le subnet aggiuntive, non i node pool esistenti. Per impostazione predefinita, GKE seleziona automaticamente una subnet appropriata per il pool di nodi. Facoltativamente, puoi specificare manualmente una subnet durante la creazione di un pool di nodi.
- Gli intervalli di indirizzi IPv4 secondari della subnet in una subnet non predefinita possono essere utilizzati solo da un singolo cluster.
- Se utilizzi il supporto multi-rete per i pod, gli intervalli di indirizzi IPv4 principali e dei pod di una subnet aggiuntiva non devono sovrapporsi a nessun intervallo CIDR configurato nella configurazione multi-rete. Le subnet aggiuntive che configuri si applicano solo alla rete predefinita. Questa limitazione significa che le interfacce di rete aggiuntive su nodi e pod non possono utilizzare gli indirizzi IP forniti da queste subnet aggiuntive.
- Quando aggiungi una subnet ai cluster con Cloud Service Mesh abilitato, il mesh non può instradare il traffico ai pod nella subnet non predefinita.
Requisiti del bilanciatore del carico per i cluster con subnet aggiuntive
Questa sezione descrive i requisiti del bilanciatore del carico che si applicano quando utilizzi subnet aggiuntive nel cluster. Questi requisiti si applicano ogni volta che crei un Ingress esterno, un gateway esterno o un servizio LoadBalancer esterno.
- Per utilizzare un Ingress esterno, un gateway o un servizio LoadBalancer in un cluster con subnet aggiuntive, il cluster deve eseguire GKE versione 1.33.2-gke.4780000 o successive.
- Gli oggetti Ingress esterni che utilizzano il controller Ingress GKE devono utilizzare il bilanciamento del carico nativo dei container.
- Abilita l'impostazione secondaria GKE per i servizi LoadBalancer interni. L'impostazione secondaria GKE influisce solo sui nuovi servizi LoadBalancer interni. Pertanto, devi eliminare e ricreare tutti i servizi esistenti nel cluster dopo aver abilitato l'impostazione secondaria GKE.
Per creare un bilanciatore del carico di rete passthrough esterno basato su un servizio di backend, i nuovi servizi LoadBalancer esterni devono includere il campo
spec.loadBalancerClassimpostato sunetworking.gke.io/l4-regional-external. Questo campo influisce solo sui nuovi servizi LoadBalancer esterni e non si applica ai servizi LoadBalancer esterni esistenti. Elimina e ricrea tutti i servizi LoadBalancer esterni creati senza il campospec.loadBalancerClass. Questo campo richiede GKE versione 1.33.1-gke.1779000 o successive.Il tipo di backend utilizzato (backend NEG
GCE_VM_IPo backend del gruppo di istanze) dipende dalla versione di GKE quando crei il servizio LoadBalancer esterno. Per ulteriori informazioni, consulta Raggruppamento dei nodi.
Aggiungere una nuova subnet con un intervallo di indirizzi IPv4 dei pod
Crea una nuova subnet e aggiungi un nuovo intervallo di indirizzi IPv4 secondari della subnet. La subnet deve trovarsi nella stessa regione e nella stessa rete VPC del cluster:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK \ --region=REGION \ --range=PRIMARY_RANGE \ --secondary-range=POD_RANGE_NAME=SECONDARY_RANGE \ --enable-private-ip-google-accessSostituisci quanto segue:
SUBNET_NAME: il nome della nuova subnet.NETWORK: il nome della rete VPC che contiene la nuova subnet.REGION: la regione in cui si trova la subnet.PRIMARY_RANGE: l'intervallo IPv4 primario per la nuova subnet, in notazione CIDR. Per ulteriori informazioni, consulta Intervalli di subnet IPv4.POD_RANGE_NAME: un nome per l'intervallo secondario.SECONDARY_RANGE: l'intervallo IPv4 secondario in notazione CIDR. Per gli intervalli validi, consulta Intervalli di subnet IPv4 ranges.
Per ulteriori informazioni, consulta Utilizzare le subnet.
Aggiorna il cluster in modo che utilizzi la subnet aggiuntiva utilizzando gcloud CLI:
gcloud container clusters update CLUSTER_NAME \ --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAMESostituisci quanto segue:
CLUSTER_NAME: il nome del cluster esistente.SUBNET_NAME: il nome della nuova subnet che hai creato.POD_RANGE_NAME: il nome dell'intervallo di indirizzi IPv4 secondari della subnet che vuoi utilizzare per l'intervallo di indirizzi IPv4 dei pod.
Aggiungere una nuova subnet con più intervalli di indirizzi IPv4 dei pod
Crea una nuova subnet in nella stessa regione e nella stessa rete VPC del cluster. Imposta l'intervallo di indirizzi IPv4 primari della subnet su un intervallo di indirizzi IPv4 aggiuntivo per i nodi.
Per ogni intervallo di indirizzi IPv4 dei pod aggiuntivo di cui hai bisogno, aggiungi un nuovo intervallo di indirizzi IPv4 secondari della subnet alla subnet creata nel passaggio precedente.
Aggiorna il cluster in modo che utilizzi la subnet aggiuntiva utilizzando gcloud CLI. L'esempio seguente aggiunge una subnet con due intervalli di indirizzi IPv4 secondari della subnet per i pod.
gcloud container clusters update CLUSTER_NAME \ --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_1 \ --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_2Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster esistente.SUBNET_NAME: il nome della nuova subnet che hai creato.POD_RANGE_NAME_1ePOD_RANGE_NAME_2: i nomi degli intervalli di indirizzi IPv4 secondari della subnet che vuoi utilizzare per gli intervalli di indirizzi IPv4 dei pod.
Verificare le subnet
Per cluster: per visualizzare i dettagli di tutte le subnet associate a un cluster, esegui il seguente comando:
gcloud container clusters describe CLUSTER_NAME
Sostituisci CLUSTER_NAME con il nome del cluster.
L'output è simile al seguente:
ipAllocationPolicy:
additionalIPRangesConfig:
- podIpv4RangeNames:
- pod-range-1
subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets
Per node pool: per visualizzare i dettagli di tutte le subnet associate a un pool di nodi, esegui il seguente comando:
gcloud container node-pools describe POOL_NAME \
--cluster=CLUSTER_NAME \
Sostituisci quanto segue:
POOL_NAME: il nome del pool di nodi.CLUSTER_NAME: il nome del cluster.
L'output è simile al seguente:
name: pool-1
networkConfig:
podRange: pod-range-1
subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets
In che modo i node pool selezionano una subnet
Per impostazione predefinita, quando crei un nuovo pool di nodi e sono disponibili più subnet, GKE seleziona automaticamente una subnet appropriata per il pool di nodi in base ai requisiti per gli indirizzi IP e alla disponibilità di indirizzi IP in tutte le subnet del cluster.
Specificare manualmente una subnet durante la creazione pool di nodi
Per specificare una subnet quando crei un pool di nodi, utilizza il flag --subnetwork con il comando gcloud container node-pools create. La subnet specificata deve essere già assegnata al cluster (come subnet predefinita o come subnet aggiuntiva). Se non specifichi un intervallo IPv4 dei pod, GKE seleziona automaticamente un intervallo secondario disponibile dalla subnet specificata. Se la subnet o l'intervallo di pod specificato non dispone di indirizzi IP disponibili sufficienti per il pool di nodi, GKE restituisce un errore.
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--subnetwork=SUBNET_NAME
Specificare l'intervallo di indirizzi IPv4 dei pod insieme alla subnet
Se la subnet specificata ha più intervalli di indirizzi IPv4 secondari, puoi utilizzare sia il flag --pod-ipv4-range sia il flag --subnetwork per specificare l'intervallo da utilizzare per i pod nel pool di nodi.
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--subnetwork=SUBNET_NAME \
--pod-ipv4-range=POD_RANGE_NAME
Sostituisci quanto segue:
POOL_NAME: un nome per il nuovo pool di nodi.CLUSTER_NAME: il nome del cluster.LOCATION: la regione o la zona del cluster.SUBNET_NAME: il nome o il percorso completo della risorsa della subnet che vuoi utilizzare.POD_RANGE_NAME: il nome dell'intervallo secondario della subnet da utilizzare per i pod in questo pool di nodi.
Rimuovere una subnet non predefinita
La rimozione di una subnet non predefinita da un cluster indica al cluster di non utilizzare più gli intervalli della subnet in nessuno dei node pool del cluster. La rimozione ha i seguenti effetti:
- L'intervallo di indirizzi IPv4 primari della subnet non predefinita non può essere utilizzato per gli intervalli di indirizzi IPv4 dei nodi.
- Gli intervalli IPv4 secondari della subnet nella subnet non predefinita non possono essere utilizzati per gli intervalli IPv4 dei pod.
Prima di rimuovere una subnet non predefinita, devi eliminare tutti i node pool che utilizzano questa subnet. Il primo passo consigliato è impostare lo stato della subnet su draining. Le subnet con stato di draining non verranno prese in considerazione per l'utilizzo da parte dei node pool appena creati. In questo modo, le operazioni del gestore della scalabilità automatica del cluster (come lo scale up del pool di nodi) non selezionano la subnet che intendi rimuovere, senza dover disabilitare la scalabilità automatica per l'intero cluster.
Passaggi per rimuovere una subnet:
- Imposta lo stato della subnet non predefinita su draining. In questo modo, i nuovi node pool non selezionano questa subnet, il che è utile quando abiliti la scalabilità automatica sul cluster.
- Elimina tutti i node pool che utilizzano questa subnet.
- Rimuovi la subnet dal cluster.
Per rimuovere una subnet non predefinita dal cluster, esegui il seguente comando:
gcloud container clusters update CLUSTER_NAME \
--remove-additional-ip-ranges=subnetwork=SUBNET_NAME
Sostituisci quanto segue:
CLUSTER_NAME: il nome del tuo cluster.SUBNET_NAME: il nome della subnet che vuoi rimuovere dal cluster.
Per impostare lo stato di una subnet non predefinita su draining, esegui il seguente comando:
gcloud container clusters update CLUSTER_NAME \
--drain-additional-ip-ranges=subnetwork=SUBNET_NAME
Sostituisci quanto segue:
CLUSTER_NAME: il nome del tuo cluster.SUBNET_NAME: il nome della subnet che vuoi impostare su draining.
Per annullare il draining di una subnet non predefinita, esegui il seguente comando:
gcloud container clusters update CLUSTER_NAME \
--undrain-additional-ip-ranges=subnetwork=SUBNET_NAME
Sostituisci quanto segue:
CLUSTER_NAME: il nome del tuo cluster.SUBNET_NAME: il nome della subnet di cui vuoi annullare il draining.
Dopo aver rimosso una subnet non predefinita dal cluster, puoi eliminare la subnet non predefinita.
Rimuovere un intervallo IPv4 secondario della subnet non predefinita
Quando rimuovi un intervallo IPv4 secondario della subnet non predefinita da un cluster, GKE indica al cluster di non utilizzare questo intervallo per gli intervalli IPv4 dei pod in nessun pool di nodi. Se l'intervallo IPv4 secondario della subnet non predefinita che rimuovi è l'unico intervallo della subnet non predefinita utilizzato da questo cluster, GKE indica anche al cluster di interrompere l'utilizzo dell'indirizzo IPv4 primario di questa subnet per gli indirizzi IPv4 dei nodi.
Prima di rimuovere un intervallo IPv4 secondario della subnet non predefinita, devi eliminare tutti i node pool che utilizzano l'intervallo per gli indirizzi IPv4 dei pod.
Per rimuovere un intervallo IPv4 secondario della subnet non predefinita dal cluster, esegui il seguente comando:
gcloud container clusters update CLUSTER_NAME \
--remove-additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.SUBNET_NAME: il nome della subnet non predefinita.POD_RANGE_NAME: il nome dell'intervallo IPv4 secondario della subnet non predefinita che vuoi rimuovere dal cluster.
Dopo aver rimosso un intervallo IPv4 secondario della subnet non predefinita dal cluster, puoi eliminare l'intervallo IPv4 secondario della subnet non predefinita.
Utilizzare subnet aggiuntive in VPC condiviso
Prima di procedere, assicurati di avere quanto segue:
- Un ambiente VPC condiviso funzionale in cui sono collegati i progetti host e di servizio. Per le istruzioni, consulta Configurare un cluster con VPC condiviso.
- Un cluster GKE in esecuzione nel progetto di servizio.
- Tutte le API necessarie sono abilitate sia nel progetto host sia nel progetto di servizio.
Crea una subnet aggiuntiva nel progetto host nella stessa rete del cluster GKE:
gcloud compute networks subnets create ADDITIONAL_SUBNET_NAME \ --project HOST_PROJECT_ID \ --network shared-net \ --range 172.16.4.0/22 \ --region COMPUTE_REGION \ --secondary-range ADDITIONAL_SUBNET_NAME-services=172.16.16.0/20,ADDITIONAL_SUBNET_NAME-pods=172.20.0.0/14Ottieni il criterio IAM. Per consentire al cluster GKE nel progetto di servizio di accedere a subnet aggiuntive all'interno del VPC condiviso del progetto host, devi configurare le autorizzazioni IAM necessarie. Se le autorizzazioni non sono già configurate, procedi con i passaggi seguenti. Non è necessaria alcuna azione se le autorizzazioni esistono già.
gcloud compute networks subnets get-iam-policy ADDITIONAL_SUBNET_NAME \ --project HOST_PROJECT_ID \ --region COMPUTE_REGIONL'output contiene un campo
etag. Prendi nota del valoreetag.Crea un file denominato ADDITIONAL_SUBNET_NAME-policy.yaml con i seguenti contenuti:
bindings: - members: - serviceAccount:SERVICE_PROJECT_NUM@cloudservices.s3ns-system.iam.gserviceaccount.com - serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns-system.iam.gserviceaccount.com role: roles/compute.networkUser etag: ETAG_STRINGSostituisci
ETAG_STRINGcon il valoreetagche hai annotato in precedenza.Imposta il criterio IAM per la subnet ADDITIONAL_SUBNET_NAME:
gcloud compute networks subnets set-iam-policy ADDITIONAL_SUBNET_NAME \ ADDITIONAL_SUBNET_NAME-policy.yaml \ --project HOST_PROJECT_ID \ --region COMPUTE_REGIONVerifica le subnet e gli intervalli di indirizzi IP secondari utilizzabili, come descritto in shared vpc verify usable subnets.
Aggiorna il cluster VPC condiviso delle subnet aggiuntive:
gcloud container clusters update CLUSTER_NAME \
--project=SERVICE_PROJECT_ID \
--location=CONTROL_PLANE_LOCATION \
--additional-ip-ranges=subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/ADDITIONAL_SUBNET_NAME,pod-ipv4-range=ADDITIONAL_SUBNET_NAME-pods
Sostituisci quanto segue:
- CLUSTER_NAME: il nome del cluster GKE nel progetto di servizio.
- ADDITIONAL_SUBNET_NAME: il nome della subnet aggiuntiva creata nel progetto host (ad es. tier-2).
- HOST_PROJECT_ID: l'ID del progetto host.
- SERVICE_PROJECT_NUM: il nome del progetto di servizio.
- COMPUTE_REGION: la regione in cui si trova la subnet.
In questo modo, puoi utilizzare le subnet aggiuntive in un ambiente VPC condiviso.
Passaggi successivi
- Scopri di più sui cluster nativi di VPC.
- Scopri di più su come aggiungere intervalli di indirizzi IPv4 dei pod.
- Scopri di più sull'ottimizzazione dell'allocazione degli indirizzi IP configurando il numero massimo di pod per nodo.