Esegui il deployment dei carichi di lavoro con SCTP


Questa pagina spiega come eseguire il deployment di carichi di lavoro che utilizzano il protocollo Stream Control Transmission Protocol (SCTP) sui cluster standard Google Kubernetes Engine (GKE).

SCTP è supportato dalla tecnologia Cilium. Poiché GKE Dataplane V2 è implementato utilizzando Cilium, puoi utilizzare SCTP solo sui cluster in cui è stato abilitato GKE Dataplane V2. Con il supporto di SCTP, puoi abilitare la comunicazione SCTP diretta per il traffico pod-to-pod e pod-to-service. Per saperne di più, consulta Supporto SCTP su Cilium.

Questa pagina è rivolta a operatori e sviluppatori che eseguono il provisioning e la configurazione delle risorse cloud e il deployment di app e servizi. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui si fa riferimento nei contenuti di Google Cloud, consulta la pagina Ruoli utente e attività comuni di GKE Enterprise.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva 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 gcloud components update.

Requisiti e limitazioni

Il supporto di SCTP sui cluster GKE Standard presenta i seguenti requisiti e limitazioni:

  • Il cluster deve eseguire GKE 1.32.2-gke.1297000 o versioni successive.
  • I nodi del cluster devono utilizzare immagini dei nodi Ubuntu. SCTP non è supportato per le immagini Container-Optimized OS.
  • Per attivare il supporto di SCTP, assicurati che le immagini container basate su Ubuntu e il sistema operativo del nodo GKE sottostante siano caricate con il modulo del kernel sctp.
  • Non puoi utilizzare SCTP sui cluster in cui è abilitato il supporto di più reti per i pod.
  • Il tempo di configurazione di un'associazione SCTP può essere più lungo di quello di una connessione TCP. Progetta le tue applicazioni in modo che gestiscano i potenziali ritardi durante la creazione delle associazioni.
  • Per scoprire di più su ciò che Cilium supporta e non supporta con SCTP, consulta la documentazione di Cilium.

Esegui il deployment dei carichi di lavoro con SCTP

Best practice:

Testa a fondo il deployment in un ambiente non di produzione prima di eseguire il deployment dei carichi di lavoro in produzione.

A partire dalla versione 1.32.2-gke.1297000 di GKE, SCTP è abilitato per impostazione predefinita nei cluster che utilizzano GKE Dataplane V2 e immagini dei nodi Ubuntu. Per eseguire il deployment dei workload con SCTP, completa i seguenti passaggi:

  1. Per creare un cluster con GKE Dataplane V2 e immagini Ubuntu, esegui il seguente comando:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --cluster-version=CLUSTER_VERSION \
        --enable-dataplane-v2 \
        --image-type=ubuntu_containerd
    

    Sostituisci i seguenti valori:

    • CLUSTER_NAME: il nome del tuo cluster.
    • CONTROL_PLANE_LOCATION: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.
    • CLUSTER_VERSION: la versione di GKE, che deve essere 1.32.2-gke.1297000 o successive.
  2. Per inserire l'applicazione in un container, assicurati che l'immagine container includa un'applicazione configurata per utilizzare SCTP. Puoi utilizzare qualsiasi applicazione che supporti SCTP, ad esempio un'applicazione personalizzata.

    Di seguito è riportato un esempio di Dockerfile per containerizzare l'applicazione, supponendo che utilizzi Docker:

    FROM ubuntu:latest
    RUN apt-get update && apt-get install -y socat
    
    # Run a simple SCTP echo server.  This command uses socat to listen for
    # incoming SCTP connections on a specified port and echo back any received data.
    # The 'fork' option ensures that a new process is created for each connection.
    # Replace "PORT" below with the desired port number.
    CMD ["socat", "PIPE", "SCTP-LISTEN:PORT,fork"]
    

    Crea l'immagine ed eseguine il push in un registro dei container come Artifact Registry. Per ulteriori informazioni su come funziona questo file, consulta Riferimento a Dockerfile nella documentazione di Docker.

  3. Per creare un deployment e un servizio, salva il seguente manifest come sctp-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: sctp-app
    spec:
     replicas: 1
     selector:
       matchLabels:
         app: sctp-app
     template:
       metadata:
         labels:
           app: sctp-app
       spec:
         containers:
         - name: sctp-container
           image: CONTAINER_IMAGE
           ports:
           - containerPort: PORT
             protocol: SCTP
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sctp-service
    spec:
      selector:
        app: sctp-app
      ports:
      - protocol: SCTP
        port: PORT
        targetPort: PORT
      type: ClusterIP
    

    Sostituisci quanto segue:

    • CONTAINER_IMAGE: l'immagine del container che hai creato nel passaggio precedente.
    • PORT: i numeri di porta SCTP e di porta di destinazione dell'applicazione. Il valore di port e targetPort deve essere lo stesso.
  4. Per applicare il deployment e il servizio, esegui questo comando:

    kubectl apply -f sctp-deployment.yaml
    
  5. Per verificare la connettività SCTP per il servizio, crea un pod all'interno dello stesso cluster ed esegui questo comando:

    kubectl run sctp-client \
     --image=ubuntu:latest \
     --namespace=default \
     -it --rm \
     --command -- bash -c 'apt-get update && apt-get install -y socat && (echo "Hello, SCTP!"; sleep 1) | socat - SCTP:sctp-service:PORT'
    

    L'output è simile al seguente:

    Preparing to unpack .../socat_1.8.0.0-4build3_amd64.deb ...
    Setting up socat (1.8.0.0-4build3) ...
    Hello, SCTP!
    

Risoluzione dei problemi

Se riscontri problemi di connettività SCTP, segui queste indicazioni per determinare l'origine del problema:

  • Controlla i log dei pod. Per controllare i log della tua applicazione per eventuali errori, esegui questo comando:

    kubectl logs POD_NAME
    

    Questi log possono aiutarti a identificare la causa dell'arresto anomalo del pod.

  • Controlla lo stato dell'oggetto servizio SCTP:

    kubectl describe service SCTP_SERVICE_NAME
    
  • Controlla i criteri di rete. Le policy di rete possono limitare il traffico SCTP. Assicurati che i criteri di rete consentano il traffico SCTP necessario per le tue applicazioni.

  • Controlla lo stato di GKE Dataplane V2. Per verificare che GKE Dataplane V2 sia abilitato sul cluster, esegui questo comando:

    kubectl -n kube-system get pods -l k8s-app=cilium -o wide
    

    Verifica che l'output includa pod con il prefisso anetd-. anetd è il controller di rete per GKE Dataplane V2.

  • Per migliorare la velocità effettiva, aumenta i parametri sysctl, net.core.wmem_default e net.core.rmem_default a un valore maggiore, ad esempio 4194304 (4 MB). Per saperne di più, consulta Opzioni di configurazione di Sysctl.

  • Potresti riscontrare problemi se utilizzi Network Address Translation (NAT) con SCTP in GKE. Per saperne di più su ciò che Cilium supporta con SCTP, consulta la documentazione di Cilium.

  • I pacchetti SCTP sono soggetti all'unità massima di trasmissione (MTU) della rete. Assicurati che l'MTU della rete sia sufficiente per il traffico SCTP.

  • Le prestazioni di SCTP possono essere influenzate da fattori quali la latenza di rete, la perdita di pacchetti e l'ottimizzazione del kernel. Monitora il rendimento di SCTP della tua applicazione e modifica le impostazioni in base alle necessità.

Passaggi successivi