本頁說明如何在 Google Kubernetes Engine (GKE) 標準叢集上,部署使用 Stream Control Transmission Protocol (SCTP) 的工作負載。
Cilium 技術支援 SCTP。由於 GKE Dataplane V2 是使用 Cilium 實作,因此只有啟用 GKE Dataplane V2 的叢集才能使用 SCTP。有了 SCTP 支援,您就能為 Pod 對 Pod 和 Pod 對服務流量啟用直接 SCTP 通訊。詳情請參閱「Cilium 的 SCTP 支援」。
本頁適用於佈建及設定雲端資源,並部署應用程式和服務的營運人員和開發人員。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。 Google Cloud
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
需求條件和限制
GKE Standard 叢集上的 SCTP 支援功能有下列規定和限制:
- 叢集必須執行 GKE 1.32.2-gke.1297000 以上版本。
- 叢集節點必須使用 Ubuntu 節點映像檔。Container-Optimized OS 映像檔不支援 SCTP。
- 如要啟用 SCTP 支援,請確認以 Ubuntu 為基礎的容器映像檔和基礎 GKE 節點 OS 已載入
sctp
核心模組。 - 在啟用 Pod 多網路支援功能的叢集上,您無法使用 SCTP。
- SCTP 關聯的設定時間可能比 TCP 連線的設定時間長。設計應用程式時,請考量建立關聯時可能發生的延遲。
- 如要進一步瞭解 Cilium 支援和不支援的 SCTP 功能,請參閱 Cilium 說明文件。
使用 SCTP 部署工作負載
在將工作負載部署至正式環境前,請先在非正式環境中徹底測試部署作業。
從 GKE 版本 1.32.2-gke.1297000 開始,使用 GKE Dataplane V2 和 Ubuntu 節點映像檔的叢集會預設啟用 SCTP。如要使用 SCTP 部署工作負載,請完成下列步驟:
如要建立具有 GKE Dataplane V2 和 Ubuntu 映像檔的叢集,請執行下列指令:
gcloud container clusters create CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=CLUSTER_VERSION \ --enable-dataplane-v2 \ --image-type=ubuntu_containerd
替換下列值:
CLUSTER_NAME
:叢集名稱。CONTROL_PLANE_LOCATION
:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。CLUSTER_VERSION
:GKE 版本,必須為 1.32.2-gke.1297000 以上版本。
如要將應用程式容器化,請確保容器映像檔包含已設定使用 SCTP 的應用程式。您可以使用任何支援 SCTP 的應用程式,例如自訂應用程式。
以下是將應用程式容器化的
Dockerfile
範例 (假設您使用 Docker):建構映像檔並推送至容器登錄檔,例如 Artifact Registry。如要進一步瞭解這個檔案的運作方式,請參閱 Docker 說明文件中的 Dockerfile 參考資料。
如要建立 Deployment 和 Service,請將下列資訊清單儲存為
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
更改下列內容:
CONTAINER_IMAGE
:您在上一個步驟中建構的容器映像檔。PORT
:應用程式的 SCTP 通訊埠和目標通訊埠編號。port
和targetPort
的值必須相同。
如要套用 Deployment 和 Service,請執行下列指令:
kubectl apply -f sctp-deployment.yaml
如要驗證服務的 SCTP 連線,請在同一叢集中建立 Pod,然後執行下列指令:
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'
輸出結果會與下列內容相似:
Preparing to unpack .../socat_1.8.0.0-4build3_amd64.deb ... Setting up socat (1.8.0.0-4build3) ... Hello, SCTP!
疑難排解
如果 SCTP 連線發生問題,請按照下列指引判斷問題來源:
檢查 Pod 記錄。如要檢查應用程式記錄是否有任何錯誤,請執行下列指令:
kubectl logs POD_NAME
這些記錄有助於找出 Pod 損毀的原因。
檢查 SCTP 服務物件的狀態:
kubectl describe service SCTP_SERVICE_NAME
檢查網路政策。網路政策可以限制 SCTP 流量。 確認網路政策允許應用程式所需的 SCTP 流量。
檢查 GKE Dataplane V2 的狀態。如要確認叢集是否已啟用 GKE Dataplane V2,請執行下列指令:
kubectl -n kube-system get pods -l k8s-app=cilium -o wide
確認輸出內容包含前置字元為
anetd-
的 Pod。anetd 是 GKE Dataplane V2 的網路控制器。如要提高輸送量,請將
sysctl
參數net.core.wmem_default
和net.core.rmem_default
增加為較大的值,例如 4194304 (4 MB)。詳情請參閱「Sysctl 設定選項」。在 GKE 中使用 SCTP 時,如果搭配網路位址轉譯 (NAT),可能會發生問題。如要進一步瞭解 Cilium 支援的 SCTP 功能,請參閱 Cilium 說明文件。
SCTP 封包會受到網路最大傳輸單位 (MTU) 的限制。確認網路的 MTU 足以處理 SCTP 流量。
SCTP 的效能可能會受到網路延遲、封包遺失和核心調整等因素影響。監控應用程式的 SCTP 效能,並視需要調整設定。
後續步驟
- 如要瞭解 SCTP 支援功能,請參閱 Cilium 說明文件。
- 瞭解如何在叢集上啟用 GKE Dataplane V2。