使用 SCTP 部署工作負載


本頁說明如何在 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 部署工作負載,請完成下列步驟:

  1. 如要建立具有 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 以上版本。
  2. 如要將應用程式容器化,請確保容器映像檔包含已設定使用 SCTP 的應用程式。您可以使用任何支援 SCTP 的應用程式,例如自訂應用程式。

    以下是將應用程式容器化的 Dockerfile 範例 (假設您使用 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"]
    

    建構映像檔並推送至容器登錄檔,例如 Artifact Registry。如要進一步瞭解這個檔案的運作方式,請參閱 Docker 說明文件中的 Dockerfile 參考資料

  3. 如要建立 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 通訊埠和目標通訊埠編號。porttargetPort 的值必須相同。
  4. 如要套用 Deployment 和 Service,請執行下列指令:

    kubectl apply -f sctp-deployment.yaml
    
  5. 如要驗證服務的 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_defaultnet.core.rmem_default 增加為較大的值,例如 4194304 (4 MB)。詳情請參閱「Sysctl 設定選項」。

  • 在 GKE 中使用 SCTP 時,如果搭配網路位址轉譯 (NAT),可能會發生問題。如要進一步瞭解 Cilium 支援的 SCTP 功能,請參閱 Cilium 說明文件

  • SCTP 封包會受到網路最大傳輸單位 (MTU) 的限制。確認網路的 MTU 足以處理 SCTP 流量。

  • SCTP 的效能可能會受到網路延遲、封包遺失和核心調整等因素影響。監控應用程式的 SCTP 效能,並視需要調整設定。

後續步驟