Funzionalità di networking di Distributed Cloud

Questa pagina descrive le funzionalità di networking di Google Distributed Cloud, tra cui subnet, sessioni di peering BGP e bilanciamento del carico.

Abilita l'API Distributed Cloud Edge Network

Prima di poter configurare il networking di Distributed Cloud, devi abilitare l'API Distributed Cloud Edge Network. Per farlo, completa i passaggi descritti in questa sezione.

Console

  1. Nella console Google Cloud , vai alla pagina API Distributed Cloud Edge Network.

    Abilitare l'API

  2. Fai clic su Attiva.

gcloud

Utilizza il seguente comando:

gcloud services enable edgenetwork.googleapis.com

Configura il networking di Distributed Cloud

Questa sezione descrive come configurare i componenti di rete di Distributed Cloud.

Una tipica configurazione di rete per Distributed Cloud consiste nei seguenti passaggi:

  1. (Facoltativo) Inizializza la configurazione di rete della zona di destinazione, se necessario.

  2. Creare una rete.

  3. Crea una o più subnet all'interno della rete.

  4. Stabilisci sessioni di peering BGP in direzione nord con i router PE utilizzando i collegamenti di interconnessione corrispondenti.

  5. Stabilisci sessioni di peering BGP in direzione sud con i pod che eseguono i tuoi carichi di lavoro utilizzando le subnet corrispondenti.

  6. (Facoltativo) Stabilisci sessioni di peering BGP di loopback per l'alta disponibilità.

  7. Testa la configurazione.

  8. Collega i tuoi pod alla rete.

(Facoltativo) Inizializza la configurazione di rete della zona Distributed Cloud

Devi inizializzare la configurazione di rete della tua zona Distributed Cloud nei seguenti casi:

  • Subito dopo l'installazione dell'hardware Distributed Cloud presso la tua sede.
  • Hai eseguito l'upgrade alla versione 1.3.0 o successive di Distributed Cloud in un deployment Distributed Cloud esistente, ma non hai partecipato all'anteprima privata dell'API Distributed Cloud Edge Network.

L'inizializzazione della configurazione di rete di una zona crea un router predefinito denominato default e una rete predefinita denominata default. Configura anche il router default per il peering con tutte le interconnessioni richieste quando hai ordinato l'hardware Distributed Cloud creando i collegamenti di interconnessione corrispondenti. Questa configurazione fornisce alla tua implementazione di Distributed Cloud una connettività uplink di base alla tua rete locale.

L'inizializzazione della configurazione di rete di una zona è una procedura una tantum. Per istruzioni complete, vedi Inizializzare la configurazione di rete di una zona.

Crea una rete

Per creare una nuova rete, segui le istruzioni riportate in Creare una rete. Devi anche creare almeno una subnet all'interno della rete per consentire ai nodi Distributed Cloud di connettersi alla rete.

Crea una o più subnet

Per creare una subnet, segui le istruzioni riportate in Creare una subnet. Devi creare almeno una subnet nella tua rete per consentire ai nodi di accedere alla rete. La VLAN corrispondente a ogni subnet che crei è disponibile automaticamente per tutti i nodi nella zona.

Definisci sessioni di peering BGP in direzione nord

Quando crei una rete e le relative subnet, queste sono locali alla zona Distributed Cloud. Per attivare la connettività in uscita, devi stabilire almeno una sessione di peering BGP in direzione nord tra la rete e i router di peering perimetrali.

Per stabilire una sessione di peering BGP in direzione nord:

  1. Elenca gli interconnessioni disponibili nella tua zona e poi seleziona l'interconnessione di destinazione per questa sessione di peering.

  2. Crea uno o più allegati di interconnessione sull'interconnessione selezionata. Gli allegati di interconnessione collegano il router che crei nel passaggio successivo all'interconnessione selezionata.

  3. Crea un router. Questo router instrada il traffico tra l'interconnessione e la tua rete utilizzando i collegamenti di interconnessione che hai creato nel passaggio precedente.

  4. Aggiungi un'interfaccia al router per ogni collegamento di interconnessione che hai creato in precedenza in questa procedura. Per ogni interfaccia, utilizza l'indirizzo IP dello switch top-of-rack (ToR) corrispondente nel rack Distributed Cloud. Per le istruzioni, vedi Stabilire una sessione di peering in direzione nord.

  5. Aggiungi un peer per ogni interfaccia creata sul router nel passaggio precedente.

Stabilisci sessioni di peering BGP in uscita

Per attivare la connettività in entrata ai tuoi carichi di lavoro dalla tua rete locale, devi stabilire una o più sessioni di peering BGP in uscita tra i router di peering edge e la subnet a cui appartengono i tuoi pod. L'indirizzo IP del gateway per ogni subnet è l'indirizzo IP dello switch ToR corrispondente nel rack Distributed Cloud.

Per stabilire una sessione di peering BGP in direzione sud:

  1. Aggiungi un'interfaccia al router nella rete di destinazione per ogni subnet che vuoi eseguire il provisioning con connettività in entrata. Per istruzioni, vedi Stabilire una sessione di peering in uscita.

  2. Aggiungi un peer per ogni interfaccia creata sul router nel passaggio precedente.

(Facoltativo) Stabilisci sessioni di peering BGP di loopback

Per abilitare la connettività ad alta disponibilità tra i tuoi carichi di lavoro e la tua rete locale, puoi stabilire una sessione di peering BGP di loopback tra il pod di destinazione e entrambi gli switch ToR nel rack Distributed Cloud. Una sessione di peering loopback stabilisce due sessioni di peering indipendenti per il pod, una con ciascun switch ToR.

Per stabilire una sessione di peering BGP di loopback:

  1. Aggiungi un'interfaccia di loopback al router nella rete di destinazione. Per istruzioni, vedi Stabilire una sessione di peering di loopback.

  2. Aggiungi un peer per l'interfaccia di loopback.

Test della configurazione

Per testare la configurazione dei componenti di rete che hai creato, segui questi passaggi:

  1. Controlla lo stato operativo della rete.

  2. Controlla lo stato del provisioning di ogni subnet.

  3. Controlla lo stato di attività delle interconnessioni.

  4. Controlla lo stato operativo degli allegati di interconnessione.

  5. Controlla lo stato operativo del router.

Connettere i pod alla rete

Per connettere i tuoi Pod alla rete e configurare le funzioni di rete avanzate, segui le istruzioni riportate in Operatore di funzioni di rete.

Bilanciamento del carico

Distributed Cloud viene fornito con una soluzione di bilanciamento del carico di rete in bundle basata su MetalLB in modalità Layer 2. Puoi utilizzare questa soluzione per esporre i servizi eseguiti nella tua zona Distributed Cloud al mondo esterno utilizzando indirizzi IP virtuali (VIP) nel seguente modo:

  1. L'amministratore di rete pianifica la topologia di rete e specifica la subnet dell'indirizzo IPv4 virtuale richiesta quando ordina Distributed Cloud. Google configura l'hardware Distributed Cloud di conseguenza prima della consegna. Tieni presente quanto segue:
    • Questa subnet VIP è condivisa tra tutti i cluster Kubernetes in esecuzione all'interno della zona Distributed Cloud.
    • Una route per la subnet VIP richiesta viene pubblicizzata tramite le sessioni BGP tra la zona Distributed Cloud e la tua rete locale.
    • Il primo (ID rete), il secondo (gateway predefinito) e l'ultimo (indirizzo di broadcast) indirizzo della subnet sono riservati per la funzionalità di base del sistema. Non assegnare questi indirizzi ai pool di indirizzi delle configurazioni di MetalLB.
    • Ogni cluster deve utilizzare un intervallo VIP separato che rientri nella subnet VIP configurata.
  2. Quando crei un cluster nella tua zona Distributed Cloud, l'amministratore del cluster specifica i pool di indirizzi di pod e servizi ClusterIP utilizzando la notazione CIDR. L'amministratore di rete fornisce la subnet VIP LoadBalancer appropriata all'amministratore del cluster.
  3. Dopo la creazione del cluster, l'amministratore del cluster configura i pool VIP corrispondenti. Per i cluster del control plane remoto, devi modificare il ConfigMap metallb-config nello spazio dei nomi metallb-system utilizzando il comando kubectl edit o kubectl replace. Non utilizzare il comando kubectl apply perché Distributed Cloud sovrascrive le modifiche se lo fai.

    Il seguente esempio illustra una configurazione di questo tipo:

    # metallb-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      namespace: metallb-system
      name: metallb-config
    data:
      config: |
        address-pools:
        - name: default
          protocol: layer2
          addresses:
          - 192.168.1.2-192.168.1.254
    

    Per i cluster del control plane locale, devi specificare i pool VIP utilizzando il flag --external-lb-ipv4-address-pools quando crei il cluster. Per maggiori informazioni, vedi Modalità di sopravvivenza.

  4. L'amministratore del cluster crea i servizi LoadBalancerKubernetes� appropriati.

I nodi Distributed Cloud in un singolo pool di nodi condividono un dominio di livello 2 comune e sono quindi anche nodi del bilanciatore del carico MetalLB. I nodi del control plane Distributed Cloud che vengono eseguiti su Google Cloud non funzionano come nodi del bilanciatore del carico.

Ingresso di Distributed Cloud

Oltre al bilanciamento del carico, Distributed Cloud supporta anche le risorse Kubernetes Ingress. Una risorsa Ingress Kubernetes controlla il flusso di traffico HTTP(S) verso i servizi Kubernetes eseguiti sui tuoi cluster Distributed Cloud. L'esempio seguente mostra una risorsa Ingress tipica:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - http:
      paths:
      - backend:
          service:
            name: my-service
            port:
              number: 80
        path: /foo
        pathType: Prefix

Se configurato, il traffico di rete passa attraverso il servizio istio-ingress, a cui per impostazione predefinita viene assegnato un indirizzo IP casuale dai pool VIP specificati nella configurazione di MetalLB. Puoi selezionare un indirizzo IP specifico o un indirizzo IP virtuale dalla configurazione di MetalLB utilizzando il campo loadBalancerIP nella definizione del servizio istio-ingress. Ad esempio:

apiVersion: v1
kind: Service
metadata:
  labels:
    istio: ingress-gke-system
    release: istio
  name: istio-ingress
  namespace: gke-system
spec:
  loadBalancerIP: <targetLoadBalancerIPaddress>

Disattiva la risorsa Distributed Cloud Ingress predefinita

Per impostazione predefinita, quando crei un cluster Distributed Cloud, Distributed Cloud configura automaticamente il servizio istio-ingress per il cluster. Hai la possibilità di creare un cluster Distributed Cloud senza il servizio istio-ingress. Per farlo, segui questa procedura.

gcloud

  1. Crea un file di configurazione YAML denominato SystemsAddonConfig.yaml con il seguente contenuto:

    systemAddonsConfig:
     ingress:
       disabled: true
    
  2. Passa il file SystemsAddonConfig.yaml utilizzando il flag --system-addons-config nel comando di creazione del cluster. Per utilizzare questa funzionalità, devi utilizzare la versione gcloud alpha. Ad esempio:

    gcloud alpha edge-cloud container clusters create MyGDCECluster1 --location us-west1 \
        --system-addons-config=SystemsAddonConfig.yaml
    

    Per saperne di più sulla creazione di un cluster Distributed Cloud, consulta Crea un cluster.

API

  1. Aggiungi i seguenti contenuti JSON al payload JSON nella richiesta di creazione del cluster:

    "systemAddonConfig" {
       "ingress" {
               "disabled": true
       }
    }
    
  2. Invia la richiesta di creazione del cluster come descritto in Creare un cluster.

Supporto SCTP

Distributed Cloud supporta Stream Control Transmission Protocol (SCTP) sull'interfaccia di rete principale per il networking interno ed esterno. Il supporto SCTP include i tipi di servizio NodePort, LoadBalancer e ClusterIP. I pod possono utilizzare SCTP per comunicare con altri pod e risorse esterne. L'esempio seguente illustra come configurare IPERF come servizio ClusterIP utilizzando SCTP:

apiVersion: v1
kind: Pod
metadata:
  name: iperf3-sctp-server-client
  labels:
    app.kubernetes.io/name: iperf3-sctp-server-client
spec:
  containers:
  - name: iperf3-sctp-server
    args: ['-s', '-p 31390']
    ports:
      - containerPort: 31390
        protocol: SCTP
        name: server-sctp
  - name: iperf3-sctp-client
    ...

---

apiVersion: v1
kind: Service
metadata:
  name: iperf3-sctp-svc
spec:
  selector:
    app.kubernetes.io/name: iperf3-sctp-server-client
  ports:
    - port: 31390
      protocol: SCTP
      targetPort: server-sctp

Moduli kernel SCTP

A partire dalla versione 1.5.0, Distributed Cloud configura il modulo kernel sctp Edge OS come caricabile. In questo modo puoi caricare i tuoi stack di protocolli SCTP nello spazio utente del kernel.

Inoltre, Distributed Cloud carica i seguenti moduli nel kernel per impostazione predefinita:

Nome modulo Nome configurazione
fou CONFIG_NET_FOU
nf_conntrack_proto_gre CONFIG_NF_CT_PROTO_GRE
nf_conntrack_proto_sctp CONFIG_NF_CT_PROTO_SCTP
inotify CONFIG_INOTIFY_USER
xt_redirect CONFIG_NETFILTER_XT_TARGET_REDIRECT
xt_u32 CONFIG_NETFILTER_XT_MATCH_U32
xt_multiport CONFIG_NETFILTER_XT_MATCH_MULTIPORT
xt_statistic CONFIG_NETFILTER_XT_MATCH_STATISTIC
xt_owner CONFIG_NETFILTER_XT_MATCH_OWNER
xt_conntrack CONFIG_NETFILTER_XT_MATCH_CONNTRACK
xt_mark CONFIG_NETFILTER_XT_MARK
ip6table_mangle CONFIG_IP6_NF_MANGLE
ip6_tables CONFIG_IP6_NF_IPTABLES
ip6table_filter CONFIG_IP6_NF_FILTER
ip6t_reject CONFIG_IP6_NF_TARGET_REJECT
iptable_mangle CONFIG_IP_NF_MANGLE
ip_tables CONFIG_IP_NF_IPTABLES
iptable_filter CONFIG_IP_NF_FILTER

ClusterDNS risorsa

Distributed Cloud supporta la risorsa Google Distributed Cloud ClusterDNS per configurare i server dei nomi upstream per domini specifici utilizzando la sezione spec.domains. Per ulteriori informazioni sulla configurazione di questa risorsa, consulta spec.domains.

Passaggi successivi