本页面介绍了如何在 Google Kubernetes Engine (GKE) 标准集群中部署使用流控制传输协议 (SCTP) 的工作负载。
Cilium 技术支持 SCTP。由于 GKE Dataplane V2 是使用 Cilium 实现的,因此您只能在已启用 GKE Dataplane V2 的集群中使用 SCTP。借助 SCTP 支持,您可以为 Pod 到 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 节点操作系统已加载
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 的应用,例如自定义应用。
以下是用于将应用容器化的
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 中将网络地址转换 (NAT) 与 SCTP 搭配使用,可能会遇到问题。如需详细了解 Cilium 对 SCTP 的支持,请参阅 Cilium 文档。
SCTP 数据包受网络的最大传输单元 (MTU) 的限制。确保网络的 MTU 足以支持 SCTP 流量。
SCTP 的性能可能会受到网络延迟、丢包和内核调整等因素的影响。监控应用的 SCTP 性能,并根据需要调整设置。
后续步骤
- 如需了解 SCTP 支持,请参阅 Cilium 文档。
- 了解如何在集群上启用 GKE Dataplane V2。