GKE multi-networking ti consente di connettere i tuoi carichi di lavoro a più reti VPC. Puoi esporre questi pod multirete a client interni o esterni utilizzando un servizio Kubernetes di type: LoadBalancer.
GKE esegue il provisioning di un bilanciatore del carico L4 per il servizio che invia il traffico ai pod su una rete secondaria specificata. Google Cloud
Questo documento spiega come GKE implementa i servizi LoadBalancer per i pod multi-rete. Vengono descritte la configurazione, le funzionalità e
le limitazioni richieste della funzionalità.
Come funzionano i servizi LoadBalancer multi-rete
Per esporre un carico di lavoro multirete, crei un Service di type:
LoadBalancer. Questo servizio deve includere un selettore speciale che ha come target i pod
in base alla rete della loro interfaccia secondaria. Aggiungi anche un'annotazione per specificare se creare un bilanciatore del carico interno o esterno.
L'etichetta networking.gke.io/network nel selettore filtra gli endpoint in base alla rete. In questo modo, il bilanciatore del carico invia il traffico solo alle interfacce del pod
connesse alla rete specificata.
Servizio LoadBalancer interno
Per creare un bilanciatore del carico interno, aggiungi l'annotazione networking.gke.io/load-balancer-type: "Internal" al manifest del servizio. L'esempio seguente mostra un servizio che crea un bilanciatore del carico interno per indirizzare i pod sulla rete dmz:
apiVersion: v1
kind: Service
metadata:
name: web-app-internal-lb
namespace: default
annotations:
networking.gke.io/load-balancer-type: "Internal"
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
networking.gke.io/network: dmz
app: web-app
type: LoadBalancer
Servizio LoadBalancer esterno
Per creare un bilanciatore del carico di rete esterno basato su un servizio di backend, aggiungi l'annotazione
cloud.google.com/l4-rbs: enabled al manifest del servizio. L'esempio
seguente mostra un servizio che crea un bilanciatore del carico esterno per
i pod di destinazione sulla rete dmz:
apiVersion: v1
kind: Service
metadata:
name: web-app-external-lb
namespace: default
annotations:
cloud.google.com/l4-rbs: enabled
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
networking.gke.io/network: dmz
app: web-app
type: LoadBalancer
Configurazione di pod e rete
I pod devono avere un'interfaccia nella rete a cui è destinato il servizio LoadBalancer. Devi anche configurare il routing all'interno del pod in modo che possa rispondere correttamente alle richieste sull'interfaccia di rete appropriata.
Puoi configurare il routing dei pod in uno dei seguenti modi:
Imposta un'interfaccia predefinita: utilizza l'annotazione
networking.gke.io/default-interfacesul pod per impostare l'interfaccia di rete secondaria come route predefinita.Configura il routing basato su policy: utilizza un
initContainercon la funzionalitàNET_ADMINper configurare le regole di routing all'interno del pod.
L'esempio seguente mostra un manifest Deployment per i pod con un'interfaccia
sulla rete dmz. Il set di annotazioni networking.gke.io/default-interface imposta l'interfaccia dmz (eth1) come percorso predefinito.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
labels:
app: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
annotations:
networking.gke.io/default-interface: 'eth1'
networking.gke.io/interfaces: |-
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName": "eth1","network": "dmz"}
]
spec:
containers:
- name: whereami
image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1
ports:
- containerPort: 8080
Verifica degli endpoint multirete
GKE utilizza un controller dedicato,
multinet-endpointslice-controller.gke.io, per gestire gli endpoint per
i servizi multirete. Questo controller crea oggetti EndpointSlice per i tuoi
servizi multirete. Gli indirizzi IP in questi oggetti EndpointSlice appartengono
alla rete secondaria specificata nel selettore del servizio.
Se un bilanciatore del carico non ha backend integri, esamina EndpointSlice per il
servizio per verificare che il controller abbia selezionato gli indirizzi IP dei pod corretti. Se EndpointSlice non ha endpoint, verifica che le etichette del selettore del servizio corrispondano ai pod in esecuzione e che il selettore networking.gke.io/network corrisponda alla rete dei pod.
Limitazioni
I servizi multi-rete LoadBalancer presentano le seguenti limitazioni:
- I bilanciatori del carico interni richiedono l'impostazione secondaria di GKE.
- I bilanciatori del carico basati su pool di destinazione o gruppi di istanze non sono supportati.
- I servizi che utilizzano
externalTrafficPolicy: Clusternon sono supportati. - I servizi non possono scegliere come target i pod
hostNetwork. - Il networking IPv6 e dual stack non è supportato.
- Non puoi modificare la rete di un servizio esistente.
- Sono supportate solo le reti di livello 3.
Passaggi successivi
- Scopri come eseguire il deployment di servizi multi-rete seguendo la guida per l'utente dei servizi multi-rete.
- Consulta la Guida per l'utente di GKE Multi-Network per informazioni su come preparare i VPC e creare un cluster GKE con reti aggiuntive.