Auf dieser Seite wird erläutert, wie Sie Arbeitslasten, die das Stream Control Transmission Protocol (SCTP) verwenden, in GKE-Standardclustern (Google Kubernetes Engine) bereitstellen.
SCTP wird von der Cilium-Technologie unterstützt. Da GKE Dataplane V2 mit Cilium implementiert wird, können Sie SCTP nur in Clustern verwenden, die mit GKE Dataplane V2 aktiviert wurden. Mit SCTP-Unterstützung können Sie die direkte SCTP-Kommunikation für Pod-zu-Pod- und Pod-zu-Dienst-Traffic aktivieren. Weitere Informationen finden Sie unter SCTP-Unterstützung in Cilium.
Diese Seite richtet sich an Betreiber und Entwickler, die Cloud-Ressourcen bereitstellen und konfigurieren sowie Apps und Dienste bereitstellen. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die in Google Cloud-Inhalten verwiesen wird, finden Sie unter Häufig verwendete GKE Enterprise-Nutzerrollen und -Aufgaben.
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
Anforderungen und Einschränkungen
Für die SCTP-Unterstützung in GKE Standard-Clustern gelten die folgenden Anforderungen und Einschränkungen:
- Auf Ihrem Cluster muss die GKE-Version 1.32.2-gke.1297000 oder höher ausgeführt werden.
- Clusterknoten müssen Ubuntu-Knoten-Images verwenden. SCTP wird für Container-Optimized OS-Images nicht unterstützt.
- Damit SCTP unterstützt wird, muss das
sctp
-Kernelmodul in Ihre Ubuntu-basierten Container-Images und das zugrunde liegende GKE-Knotenbetriebssystem geladen werden. - Sie können SCTP nicht in Clustern verwenden, die für die Unterstützung mehrerer Netzwerke für Pods aktiviert sind.
- Die Einrichtungszeit für eine SCTP-Verbindung kann länger dauern als die Einrichtungszeit für eine TCP-Verbindung. Entwickeln Sie Ihre Anwendungen so, dass sie potenzielle Verzögerungen beim Herstellen von Verbindungen bewältigen können.
- Weitere Informationen dazu, was Cilium mit SCTP unterstützt und was nicht, finden Sie in der Cilium-Dokumentation.
Arbeitslasten mit SCTP bereitstellen
Testen Sie Ihre Bereitstellung gründlich in einer Nicht-Produktionsumgebung, bevor Sie Arbeitslasten in der Produktion bereitstellen.
Ab der GKE-Version 1.32.2-gke.1297000 ist SCTP standardmäßig in Clustern aktiviert, die GKE Dataplane V2 und Ubuntu-Knoten-Images verwenden. Führen Sie die folgenden Schritte aus, um Arbeitslasten mit SCTP bereitzustellen:
Führen Sie den folgenden Befehl aus, um einen Cluster mit GKE Dataplane V2 und Ubuntu-Images zu erstellen:
gcloud container clusters create CLUSTER_NAME \ --region=REGION \ --cluster-version=CLUSTER_VERSION \ --enable-dataplane-v2 \ --image-type=ubuntu_containerd
Ersetzen Sie die folgenden Werte:
CLUSTER_NAME
: Der Name Ihres Clusters.REGION
: Die Google Cloud Region, in der der Cluster erstellt wird.CLUSTER_VERSION
: die GKE-Version, die mindestens 1.32.2-gke.1297000 sein muss.
Wenn Sie die Anwendung containerisieren möchten, muss Ihr Container-Image eine Anwendung enthalten, die für die Verwendung von SCTP konfiguriert ist. Sie können jede Anwendung verwenden, die SCTP unterstützt, z. B. eine benutzerdefinierte Anwendung.
Im Folgenden finden Sie ein Beispiel für ein
Dockerfile
zum Containerisieren der Anwendung, sofern Sie Docker verwenden:Erstellen Sie das Image und übertragen Sie es per Push in eine Container Registry wie Artifact Registry. Weitere Informationen zur Funktionsweise dieser Datei finden Sie in der Docker-Dokumentation unter Dockerfile reference.
Speichern Sie zum Erstellen einer Bereitstellung und eines Dienstes das folgende Manifest als
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
Ersetzen Sie Folgendes:
CONTAINER_IMAGE
: Das Container-Image, das Sie im vorherigen Schritt erstellt haben.PORT
: die SCTP-Port- und Zielportnummern der Anwendung. Der Wert fürport
undtargetPort
muss identisch sein.
Führen Sie den folgenden Befehl aus, um das Deployment und den Dienst anzuwenden:
kubectl apply -f sctp-deployment.yaml
Um die SCTP-Verbindung für den Dienst zu prüfen, erstellen Sie einen Pod im selben Cluster und führen Sie den folgenden Befehl aus:
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'
Die Ausgabe sieht etwa so aus:
Preparing to unpack .../socat_1.8.0.0-4build3_amd64.deb ... Setting up socat (1.8.0.0-4build3) ... Hello, SCTP!
Fehlerbehebung
Wenn Probleme mit der SCTP-Verbindung auftreten, können Sie anhand dieser Anleitung die Ursache des Problems ermitteln:
Pod-Logs prüfen Führen Sie den folgenden Befehl aus, um die Logs Ihrer Anwendung auf Fehler zu prüfen:
kubectl logs POD_NAME
Mithilfe dieser Logs können Sie die Ursache des Pod-Absturzes ermitteln.
Prüfen Sie den Status des SCTP-Dienstobjekts:
kubectl describe service SCTP_SERVICE_NAME
Überprüfen Sie Ihre Netzwerkrichtlinien. Netzwerkrichtlinien können SCTP-Traffic einschränken. Achten Sie darauf, dass Ihre Netzwerkrichtlinien den erforderlichen SCTP-Traffic für Ihre Anwendungen zulassen.
Status von GKE Dataplane V2 prüfen Führen Sie den folgenden Befehl aus, um zu prüfen, ob GKE Dataplane V2 in Ihrem Cluster aktiviert ist:
kubectl -n kube-system get pods -l k8s-app=cilium -o wide
Prüfen Sie, ob die Ausgabe Pods mit dem Präfix
anetd-
enthält. anetd ist der Netzwerkcontroller für GKE Dataplane V2.Um den Durchsatz zu verbessern, erhöhen Sie die
sysctl
-Parameternet.core.wmem_default
undnet.core.rmem_default
auf einen größeren Wert, z. B. 4194304 (4 MB). Weitere Informationen finden Sie unter Sysctl-Konfigurationsoptionen.Bei der Verwendung von Network Address Translation (NAT) mit SCTP in GKE können Probleme auftreten. Weitere Informationen dazu, was Cilium mit SCTP unterstützt, finden Sie in der Cilium-Dokumentation.
SCTP-Pakete unterliegen der maximalen Übertragungseinheit (Maximum Transmission Unit, MTU) des Netzwerks. Die MTU Ihres Netzwerks muss für Ihren SCTP-Traffic ausreichen.
Die Leistung von SCTP kann durch Faktoren wie Netzwerklatenz, Paketverlust und Kernel-Optimierung beeinträchtigt werden. Behalten Sie die Leistung des SCTP Ihrer Anwendung im Blick und passen Sie die Einstellungen bei Bedarf an.
Nächste Schritte
- Informationen zur SCTP-Unterstützung finden Sie in der Cilium-Dokumentation.
- GKE Dataplane V2 in Ihrem Cluster aktivieren