Esegui il deployment dei carichi di lavoro con SCTP

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

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 SCTP, puoi abilitare la comunicazione SCTP diretta per il traffico da pod a pod e da pod a servizio. Per saperne di più, consulta Supporto SCTP su Cilium.

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

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita 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 il gcloud components update comando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.

Requisiti e limitazioni

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

  • Sul cluster deve essere in esecuzione GKE 1.32.2-gke.1297000 o versioni successive.
  • I nodi del cluster devono utilizzare Ubuntu. SCTP non è supportato per le immagini Container-Optimized OS.
  • Per abilitare il supporto SCTP, assicurati che le immagini container basate su Ubuntu e il sistema operativo del nodo GKE sottostante siano caricati con il modulo kernel sctp.
  • Il tempo di configurazione per un'associazione SCTP può essere più lungo del tempo di configurazione per una connessione TCP. Progetta le tue applicazioni in modo che gestiscano i potenziali ritardi durante la creazione delle associazioni.
  • Per saperne 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:

Esegui un test approfondito del deployment in un ambiente non di produzione prima di eseguire il deployment dei carichi di lavoro in produzione.

A partire da GKE 1.32.2-gke.1297000, SCTP è abilitato per impostazione predefinita nei cluster che utilizzano GKE Dataplane V2 e immagini dei nodi Ubuntu. Per eseguire il deployment dei carichi di lavoro con SCTP, segui questi 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 località 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 GKE, che deve essere 1.32.2-gke.1297000 o versioni successive.
  2. Per containerizzare l'applicazione, assicurati che l'immagine container includa un'applicazione configurata per l'utilizzo di 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 tu 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 container come Artifact Registry. Per saperne di più su come funziona questo file, consulta il 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 container che hai creato nel passaggio precedente.
    • PORT: i numeri di porta SCTP e porta di destinazione dell'applicazione. Il valore di port e targetPort deve essere lo stesso.
  4. Per applicare il deployment e il servizio, esegui il seguente comando:

    kubectl apply -f sctp-deployment.yaml
    
  5. Per verificare la connettività SCTP per il servizio, crea un pod nello stesso cluster ed esegui il seguente 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 dell'applicazione per eventuali errori, esegui il seguente comando:

    kubectl logs POD_NAME
    

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

  • Controlla lo stato dell'oggetto del servizio SCTP:

    kubectl describe service SCTP_SERVICE_NAME
    
  • Controlla le policy di rete. Le policy di rete possono limitare il traffico SCTP. Assicurati che le policy 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 il seguente comando:

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

    Verifica che l'output includa i 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 NAT (Network Address Translation) 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'MTU (Maximum Transmission Unit) della rete. Assicurati che l'MTU della rete sia sufficiente per il traffico SCTP.

  • Il rendimento di SCTP può essere influenzato 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 esigenze.

Passaggi successivi