Questo documento descrive come implementare un modello di rete in modalità flat con il supporto del protocollo BGP (Border Gateway Protocol). Quando implementi un modello di rete con supporto BGP, BGP garantisce dinamicamente che i pod in domini di livello 2 diversi possano comunicare tra loro. Il networking in modalità flat con BGP a volte è chiamato IP flat dinamico.
Per ulteriori informazioni sui modelli di rete a modalità flat, consulta Modelli di rete a schermo piatto e in modalità a isola.
Come implementare una rete in modalità piatta che utilizza BGP
Il networking in modalità flat con BGP viene abilitato quando crei un nuovo cluster. Non puoi abilitare questa funzionalità per un cluster esistente. Una volta attivata questa funzionalità, puoi apportare modifiche ad alcune impostazioni di configurazione.
Per implementare un cluster su un modello di rete in modalità flat con supporto BGP:
Modifica il file di configurazione del cluster:
- Imposta il campo
spec.clusterNetwork.advancedNetworking
sutrue
. Se vuoi abilitare il networking in modalità flat per IPv4, imposta il campo
spec.clusterNetwork.flatIPv4
sutrue
.Per un'alternativa, consulta Cluster a doppio stack (isola IPv4, IP piatto dinamico IPv6), che configura il cluster con networking in modalità flat solo per IPv6.
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: bm namespace: cluster-bm spec: type: user ... clusterNetwork: advancedNetworking: true flatIPv4: true ...
Se
spec.clusterNetwork.flatIPv4
è impostato sutrue
, il campospec.clusterNetwork.pods.cidrBlocks
viene ignorato e può essere omesso. Tuttavia, devi aggiungere un manifestClusterCIDRConfigs
nel file di configurazione del cluster (per nodo, pool di nodi e/o per cluster).- Imposta il campo
Aggiungi un manifest
NetworkGatewayGroup
al file di configurazione del cluster:Specifica gli IP mobili da utilizzare per il peering BGP. Assicurati che il nome della risorsa sia
default
e che lo spazio dei nomi sia lo spazio dei nomi del cluster.--- apiVersion: networking.gke.io/v1 kind: NetworkGatewayGroup metadata: name: default namespace: cluster-bm spec: floatingIPs: - 10.0.1.100 - 10.0.2.100
La risorsa personalizzata
NetworkGatewayGroup
gestisce un elenco di uno o più indirizzi IP mobili. Le sessioni di peering BGP vengono avviate da indirizzi IP mobili specificati nella risorsa personalizzataNetworkGatewayGroup
.Aggiungi un manifest
FlatIPMode
al file di configurazione del cluster:Il nome della risorsa
FlatIPMode
deve esseredefault
e lo spazio dei nomi è lo spazio dei nomi del cluster. Il valorepeerSelector
flatip-peer: "true"
corrisponde alle etichette negli oggetti BGPPeerbgppeer1
ebgppeer2
(definite nel passaggio seguente), quindi entrambi i peer vengono utilizzati per il networking in modalità piatta.Il seguente manifest
FlatIPMode
è per il networking in modalità flat in modalità singola IPv4 con BGP. Per le configurazioni alternative, consulta la sezione Esempi di configurazione.--- apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: FlatIPMode metadata: name: default namespace: cluster-bm spec: enableBGPIPv4: true enableBGPIPv6: false peerSelector: flatip-peer: "true"
Aggiungi uno o più manifest
BGPPeer
al file di configurazione del cluster:Sei tu a scegliere i nomi per le risorse, ma tutte le risorse
BGPPeer
devono trovarsi nello spazio dei nomi del cluster.--- apiVersion: networking.gke.io/v1 kind: BGPPeer metadata: name: bgppeer1 namespace: cluster-bm labels: flatip-peer: "true" spec: localASN: 65001 peerASN: 65000 peerIP: 10.0.1.254 sessions: 2 --- apiVersion: networking.gke.io/v1 kind: BGPPeer metadata: name: bgppeer2 namespace: cluster-bm labels: flatip-peer: "true" spec: localASN: 65001 peerASN: 65000 peerIP: 10.0.2.254 sessions: 2
Aggiungi un manifest
ClusterCIDRConfig
al file di configurazione del cluster:Anche la risorsa
CusterCIDRConfig
deve trovarsi nello spazio dei nomi del cluster.apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: ClusterCIDRConfig metadata: name: cluster-wide-1 namespace: cluster-bm spec: ipv4: cidr: "192.168.0.0/16" perNodeMaskSize: 24
ClusterCIDRConfig è una risorsa personalizzata che specifica gli intervalli CIDR dei pod da allocare ai nodi in modo dinamico. La CNI utilizza gli intervalli CIDR dei pod allocati su un nodo per allocare gli indirizzi IP ai singoli pod in esecuzione sul nodo.
ClusterCIDRConfig
viene utilizzato anche per il networking a doppio stack. Per saperne di più sulla risorsa personalizzataClusterCIDRConfig
, inclusi esempi di utilizzo, consulta Informazioni sulla risorsa personalizzata ClusterCIDRConfig.Crea il cluster:
bmctl create cluster
Per ulteriori informazioni sulla creazione dei cluster, consulta Panoramica della creazione dei cluster.
Se il tuo ambiente supporta BGP multiprotocollo (MP-BGP), le route IPv4 e IPv6 possono essere annunciate su queste sessioni IPv4. Per esempi di diverse configurazioni, inclusi quelli che utilizzano MP-BGP, vedi Esempi di configurazione.
Modifica la configurazione del networking in modalità piatta basata su BGP
Dopo aver creato il cluster configurato per l'utilizzo di un modello di rete in modalità flat con BGP, puoi aggiornare alcune impostazioni di configurazione. Utilizza il file kubeconfig del cluster di amministrazione quando apporti aggiornamenti successivi alle risorse correlate a BGP (NetworkGatewayGroup
, FlatIPMode
e BGPPeer
). Il cluster di amministrazione quindi riconcilia le modifiche al cluster utente. Se modifichi queste risorse direttamente nel cluster utente, il cluster di amministrazione sovrascrive le modifiche nelle riconciliazioni successive.
Configurazioni di esempio
Le seguenti sezioni includono esempi di configurazione del cluster per le diverse varianti del modello di rete in modalità piatta con BGP. I file di configurazione di esempio non sono completi. La maggior parte delle impostazioni del cluster non pertinenti per il networking in modalità flat con BGP è stata omessa.
Cluster IPv4 a stack singolo
Il seguente esempio di file di configurazione del cluster mostra le impostazioni per configurare un cluster IPv4 a stack singolo con networking in modalità flat con BGP:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
services:
cidrBlocks:
- 10.96.0.0/12
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "222.2.0.0/16"
perNodeMaskSize: 24
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: true
enableBGPIPv6: false
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
Cluster a doppio stack (isola IPv4, IP piatto dinamico IPv6)
Il seguente esempio di file di configurazione del cluster mostra le impostazioni per configurare un cluster a doppio stack (IPv4/IPv6) con networking flat con BGP solo per IPv6:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: false
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 CIDR block determines if the cluster is dual-stack
- 2620:0:1000:2630:5:2::/112
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: false
enableBGPIPv6: true
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
Cluster a doppio stack (IPv4 Dynamic Flat IP, IPv6 Dynamic Flat IP)
Il seguente esempio di file di configurazione del cluster mostra le impostazioni per configurare un cluster a doppio stack con networking in modalità flat con BGP:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 CIDR block determines if the cluster is dual-stack
- 2620:0:1000:2630:5:2::/112
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "222.2.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: true
enableBGPIPv6: true
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
Risoluzione dei problemi
Per aiutarti a risolvere i problemi relativi al networking in modalità flat con BGP, questa sezione include istruzioni per controllare la configurazione:
Verifica se viene creato un oggetto
FlatIPModes
nello spazio dei nomi del cluster sul cluster di amministrazione:kubectl get flatipmodes -A --kubeconfig ADMIN_KUBECONFIG
La risposta dovrebbe avere un aspetto simile a questo:
NAMESPACE NAME AGE cluster-bm default 2d17h
Verifica se sul cluster utente viene creato un oggetto
flatipmodes.networking.gke.io
:L'ambito dell'oggetto
flatipmodes.networking.gke.io
è cluster.kubectl get flatipmodes.networking.gke.io --kubeconfig USER_KUBECONFIG
La risposta dovrebbe avere un aspetto simile a questo:
NAME AGE default 2d17h
Scarica le
BGPSessions
risorse per visualizzare le sessioni correnti:kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIG
La risposta dovrebbe avere un aspetto simile a questo:
NAMESPACE NAME LOCAL ASN PEER ASN LOCAL IP PEER IP STATE LAST REPORT kube-system 10.0.1.254-node-01 65500 65000 10.0.1.100 10.0.1.254 Established 2s kube-system 10.0.1.254-node-02 65500 65000 10.0.3.100 10.0.1.254 NotEstablished 2s kube-system 10.0.3.254-node-01 65500 65000 10.0.1.100 10.0.3.254 NotEstablished 2s kube-system 10.0.3.254-node-02 65500 65000 10.0.3.100 10.0.3.254 Established 2s
Scarica le risorse
BGPAdvertisedRoute
per vedere i percorsi attualmente pubblicizzati:kubectl get bgpadvertisedroutes -A --kubeconfig USER_KUBECONFIG
La risposta dovrebbe essere simile alla seguente:
NAMESPACE NAME PREFIX METRIC kube-system route-via-222-22-208-240 222.2.0.0/24 kube-system route-via-222-22-209-240 222.2.1.0/24
I nomi delle route indicano l'hop successivo. Ad esempio,
route-via-222-22-208-240
della risposta dell'esempio precedente indica che l'hop successivo per il prefisso pubblicizzato222.2.0.0/24
è222.22.208.240
.