このページでは、Google Kubernetes Engine(GKE)Standard クラスタに Stream Control Transmission Protocol(SCTP)を使用するワークロードをデプロイする方法について説明します。
SCTP は Cilium テクノロジーでサポートされています。GKE Dataplane V2 は Cilium を使用して実装されているため、SCTP は GKE Dataplane V2 で有効になっているクラスタでのみ使用できます。SCTP のサポートにより、Pod 間トラフィックと Pod と Service 間のトラフィックで直接 SCTP 通信を有効にできます。詳細については、Cilium での SCTP サポートをご覧ください。
このページは、クラウド リソースのプロビジョニングと構成、アプリとサービスのデプロイを行うオペレーターとデベロッパーを対象としています。 Google Cloudのコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。
始める前に
作業を始める前に、次のことを確認してください。
- 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 \ --region=REGION \ --cluster-version=CLUSTER_VERSION \ --enable-dataplane-v2 \ --image-type=ubuntu_containerd
次の値を置き換えます。
CLUSTER_NAME
: クラスタの名前。REGION
: クラスタが作成される Google Cloud リージョン。CLUSTER_VERSION
: GKE バージョン。1.32.2-gke.1297000 以降にする必要があります。
アプリケーションをコンテナ化するには、コンテナ イメージに SCTP を使用するように構成されたアプリケーションが含まれていることを確認します。カスタム アプリケーションなど、SCTP をサポートする任意のアプリケーションを使用できます。
Docker を使用することを前提として、アプリケーションをコンテナ化する
Dockerfile
の例を次に示します。イメージをビルドして push する。Artifact Registry などのコンテナ レジストリに push します。このファイルの動作については、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
Service の 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 Service オブジェクトのステータスを確認します。
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 を有効にする方法を確認する。