Implementa il modello di rete in modalità flat con il supporto di BGP

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 il supporto di BGP, BGP garantisce dinamicamente che i pod in domini di livello 2 diversi possano comunicare tra loro. La rete in modalità flat con BGP è a volte chiamata IP flat dinamico.

Per saperne di più sui modelli di rete in modalità piatta, consulta Modelli di rete in modalità piatta e in modalità isola.

Come implementare una rete in modalità flat che utilizza BGP

La modalità di rete flat con BGP viene attivata quando crei un nuovo cluster. Non puoi attivare questa funzionalità per un cluster esistente. Una volta attivata questa funzionalità, puoi apportare modifiche ad alcune impostazioni di configurazione.

Per implementare un cluster in un modello di rete in modalità flat con supporto BGP:

  1. Modifica il file di configurazione del cluster:

    • Imposta il campo spec.clusterNetwork.advancedNetworking su true.
    • Se vuoi attivare la modalità di rete flat per IPv4, imposta il spec.clusterNetwork.flatIPv4 campo su true.

      Per un'alternativa, consulta Cluster a doppio stack (isola IPv4, IP dinamico piatto IPv6), che configura il cluster con la modalità di rete 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
      ...
    

    Quando spec.clusterNetwork.flatIPv4 è impostato su true, il campo spec.clusterNetwork.pods.cidrBlocks viene ignorato e può essere omesso. Tuttavia, devi aggiungere un manifest ClusterCIDRConfigs nel file di configurazione del cluster (per nodo, per pool di nodi e/o per cluster).

  2. Aggiungi un manifest NetworkGatewayGroup al file di configurazione del cluster:

    Specifica gli IP flottanti 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 dagli indirizzi IP mobili specificati nella risorsa personalizzata NetworkGatewayGroup.

  3. Aggiungi un manifest FlatIPMode al file di configurazione del cluster:

    Il nome della risorsa FlatIPMode deve essere default e lo spazio dei nomi è lo spazio dei nomi del cluster. Il valore peerSelector flatip-peer: "true" corrisponde alle etichette negli oggetti BGPPeer bgppeer1 e bgppeer2 (definiti nel passaggio successivo), pertanto entrambi i peer vengono utilizzati per la rete in modalità flat.

    Il seguente manifest FlatIPMode è per la rete IPv4 in modalità flat e con stack singolo con BGP. Per configurazioni alternative, consulta 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"
    
  4. Aggiungi uno o più manifest BGPPeer al file di configurazione del cluster:

    Scegli i nomi delle risorse, ma tutte le risorse BGPPeer devono essere 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
    
  5. Aggiungi un manifest ClusterCIDRConfig al file di configurazione del cluster:

    La risorsa CusterCIDRConfig deve trovarsi anche 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 dinamicamente ai nodi. 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 ulteriori informazioni sulla risorsa personalizzata ClusterCIDRConfig, inclusi esempi di utilizzo, consulta Informazioni sulla risorsa personalizzata ClusterCIDRConfig.

  6. Crea il cluster:

    bmctl create cluster
    

    Per ulteriori informazioni sulla creazione di cluster, consulta la panoramica della creazione di cluster.

    Se il tuo ambiente supporta BGP multiprotocollo (MP-BGP), i route IPv4 e IPv6 possono essere pubblicizzati tramite queste sessioni IPv4. Per esempi di configurazioni diverse, inclusi esempi che utilizzano MP-BGP, consulta Esempi di configurazione.

Modificare la configurazione di networking in modalità flat basata su BGP

Dopo aver creato il cluster configurato per utilizzare un modello di rete in modalità flat con BGP, alcune impostazioni di configurazione possono essere aggiornate. 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 poi 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 diverse varianti del modello di rete in modalità flat con BGP. I file di configurazione di esempio non sono completi. La maggior parte delle impostazioni del cluster non pertinenti alla modalità flat la rete con BGP è stata omessa.

Cluster IPv4 a stack singolo

Il seguente esempio di file di configurazione del cluster mostra le impostazioni per la configurazione di un cluster IPv4 a stack singolo con la modalità di rete 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 dual-stack (isola IPv4, IP statico dinamico IPv6)

Il seguente esempio di file di configurazione del cluster mostra le impostazioni per la configurazione di un cluster a doppio stack (IPv4/IPv6) con la modalità di rete 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 la configurazione di un cluster dual-stack con la modalità di rete 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 alla rete in modalità flat con BGP, questa sezione include istruzioni per controllare la configurazione:

  1. Verifica se è stato creato un oggetto FlatIPModes nello spazio dei nomi del cluster sul cluster amministrativo:

    kubectl get flatipmodes -A --kubeconfig ADMIN_KUBECONFIG
    

    La risposta dovrebbe essere simile alla seguente:

    NAMESPACE                 NAME      AGE
    cluster-bm                default   2d17h
    
  2. Verifica se è stato creato un oggetto flatipmodes.networking.gke.io nel cluster dell'utente:

    L'oggetto flatipmodes.networking.gke.io ha ambito cluster.

    kubectl get flatipmodes.networking.gke.io --kubeconfig USER_KUBECONFIG
    

    La risposta dovrebbe essere simile alla seguente:

    NAME      AGE
    default   2d17h
    
  3. Per visualizzare le sessioni correnti, ottieni le risorse BGPSessions:

    kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIG
    

    La risposta dovrebbe essere simile alla seguente:

    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
    
  4. Consulta le risorse BGPAdvertisedRoute per visualizzare 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 nella risposta di esempio precedente indica che l'hop successivo per il prefisso pubblicizzato 222.2.0.0/24 è 222.22.208.240.