Déployer des charges de travail avec SCTP


Cette page explique comment déployer des charges de travail qui utilisent le protocole SCTP (Stream Control Transmission Protocol) sur des clusters Google Kubernetes Engine (GKE) Standard.

SCTP est compatible avec la technologie Cilium. Étant donné que GKE Dataplane V2 est implémenté à l'aide de Cilium, vous ne pouvez utiliser SCTP que sur les clusters sur lesquels GKE Dataplane V2 a été activé. Grâce à la prise en charge de SCTP, vous pouvez activer la communication SCTP directe pour le trafic entre pods et entre pods et services. Pour en savoir plus, consultez SCTP support on Cilium (Prise en charge de SCTP sur Cilium).

Cette page est destinée aux opérateurs et aux développeurs qui provisionnent et configurent des ressources cloud, et déploient des applications et des services. Pour en savoir plus sur les rôles courants et les exemples de tâches mentionnés dans le contenu Google Cloud, consultez Rôles utilisateur et tâches courantes de GKE Enterprise.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Kubernetes Engine.
  • Activer l'API Google Kubernetes Engine
  • Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande gcloud components update.

Conditions requises et limites

La compatibilité avec SCTP sur les clusters GKE Standard présente les exigences et limites suivantes :

  • Votre cluster doit exécuter GKE version 1.32.2-gke.1297000 ou ultérieure.
  • Les nœuds de cluster doivent utiliser des images de nœud Ubuntu. SCTP n'est pas compatible avec les images Container-Optimized OS.
  • Pour activer la prise en charge de SCTP, assurez-vous que vos images de conteneur basées sur Ubuntu et l'OS du nœud GKE sous-jacent sont chargées avec le module de noyau sctp.
  • Vous ne pouvez pas utiliser SCTP sur les clusters pour lesquels la compatibilité multiréseau des pods est activée.
  • Le temps de configuration d'une association SCTP peut être plus long que celui d'une connexion TCP. Concevez vos applications pour gérer les éventuels retards lors de l'établissement des associations.
  • Pour en savoir plus sur les fonctionnalités SCTP compatibles et non compatibles avec Cilium, consultez la documentation Cilium.

Déployer des charges de travail avec SCTP

Bonne pratique :

Testez minutieusement votre déploiement dans un environnement hors production avant de déployer des charges de travail en production.

À partir de la version 1.32.2-gke.1297000 de GKE, le protocole SCTP est activé par défaut dans les clusters qui utilisent GKE Dataplane V2 et les images de nœuds Ubuntu. Pour déployer des charges de travail avec SCTP, procédez comme suit :

  1. Pour créer un cluster avec GKE Dataplane V2 et des images Ubuntu, exécutez la commande suivante :

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

    Remplacez les valeurs suivantes :

    • CLUSTER_NAME : nom du cluster
    • REGION : région Google Cloud dans laquelle le cluster est créé.
    • CLUSTER_VERSION : version de GKE, qui doit être 1.32.2-gke.1297000 ou ultérieure.
  2. Pour conteneuriser l'application, assurez-vous que votre image de conteneur inclut une application configurée pour utiliser SCTP. Vous pouvez utiliser n'importe quelle application compatible avec SCTP, comme une application personnalisée.

    Voici un exemple de Dockerfile pour conteneuriser l'application, en supposant que vous utilisiez 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"]
    

    Créez et transférez l'image vers un registre de conteneurs tel qu'Artifact Registry. Pour en savoir plus sur le fonctionnement de ce fichier, consultez la documentation de référence sur Dockerfile dans la documentation Docker.

  3. Pour créer un déploiement et un service, enregistrez le fichier manifeste suivant sous le nom 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
    

    Remplacez les éléments suivants :

    • CONTAINER_IMAGE : image de conteneur que vous avez créée à l'étape précédente.
    • PORT : numéros de port SCTP et de port cible de l'application. La valeur de port et de targetPort doit être identique.
  4. Pour appliquer le déploiement et le service, exécutez la commande suivante :

    kubectl apply -f sctp-deployment.yaml
    
  5. Pour vérifier la connectivité SCTP du service, créez un pod dans le même cluster et exécutez la commande suivante :

    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'
    

    Le résultat ressemble à ce qui suit :

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

Dépannage

Si vous rencontrez des problèmes de connectivité SCTP, suivez ces conseils pour identifier la source du problème :

  • Vérifiez les journaux du pod. Pour vérifier si des erreurs se sont produites dans les journaux de votre application, exécutez la commande suivante :

    kubectl logs POD_NAME
    

    Ces journaux peuvent vous aider à identifier la cause du plantage du pod.

  • Vérifiez l'état de l'objet de service SCTP :

    kubectl describe service SCTP_SERVICE_NAME
    
  • Vérifiez vos règles de réseau. Les règles de réseau peuvent limiter le trafic SCTP. Assurez-vous que vos règles de réseau autorisent le trafic SCTP nécessaire pour vos applications.

  • Vérifiez l'état de GKE Dataplane V2. Pour vérifier que GKE Dataplane V2 est activé sur votre cluster, exécutez la commande suivante :

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

    Vérifiez que la sortie inclut les pods portant le préfixe anetd-. anetd est le contrôleur réseau pour GKE Dataplane V2.

  • Pour améliorer le débit, augmentez les paramètres sysctl net.core.wmem_default et net.core.rmem_default à une valeur plus élevée, par exemple 4194304 (4 Mo). Pour en savoir plus, consultez Options de configuration Sysctl.

  • Vous pouvez rencontrer des problèmes si vous utilisez la traduction d'adresses réseau (NAT) avec SCTP dans GKE. Pour en savoir plus sur ce que Cilium prend en charge avec SCTP, consultez la documentation Cilium.

  • Les paquets SCTP sont soumis à l'unité de transmission maximale (MTU) du réseau. Assurez-vous que le MTU de votre réseau est suffisant pour votre trafic SCTP.

  • Les performances de SCTP peuvent être affectées par des facteurs tels que la latence du réseau, la perte de paquets et le réglage du noyau. Surveillez les performances du SCTP de votre application et ajustez les paramètres si nécessaire.

Étapes suivantes