En esta página se explica cómo desplegar cargas de trabajo que usan el protocolo de control de transmisión de flujo (SCTP) en clústeres estándar de Google Kubernetes Engine (GKE).
SCTP es compatible con la tecnología Cilium. Como GKE Dataplane V2 se implementa con Cilium, solo puedes usar SCTP en clústeres que tengan habilitado GKE Dataplane V2. Con la compatibilidad con SCTP, puedes habilitar la comunicación SCTP directa para el tráfico de pod a pod y de pod a servicio. Para obtener más información, consulta Compatibilidad con SCTP en Cilium.
Esta página está dirigida a operadores y desarrolladores que aprovisionan y configuran recursos en la nube, y despliegan aplicaciones y servicios. Para obtener más información sobre los roles habituales y las tareas de ejemplo que se mencionan en el contenido, consulta Roles y tareas habituales de los usuarios de GKE. Google Cloud
Antes de empezar
Antes de empezar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
Requisitos y limitaciones
La compatibilidad con SCTP en clústeres estándar de GKE tiene los siguientes requisitos y limitaciones:
- Tu clúster debe ejecutar la versión 1.32.2-gke.1297000 de GKE o una posterior.
- Los nodos del clúster deben usar imágenes de nodo de Ubuntu. SCTP no es compatible con las imágenes de Container-Optimized OS.
- Para habilitar la compatibilidad con SCTP, asegúrate de que tus imágenes de contenedor basadas en Ubuntu y el sistema operativo del nodo de GKE subyacente tengan cargado el módulo del kernel
sctp
. - No puedes usar SCTP en clústeres que tengan habilitada la compatibilidad con varias redes para pods.
- El tiempo de configuración de una asociación SCTP puede ser mayor que el de una conexión TCP. Diseña tus aplicaciones para que puedan gestionar posibles retrasos mientras se establecen las asociaciones.
- Para obtener más información sobre lo que admite y no admite Cilium con SCTP, consulta la documentación de Cilium.
Desplegar cargas de trabajo con SCTP
Prueba a fondo tu implementación en un entorno que no sea de producción antes de implementar cargas de trabajo en producción.
A partir de la versión 1.32.2-gke.1297000 de GKE, SCTP está habilitado de forma predeterminada en los clústeres que usan GKE Dataplane V2 e imágenes de nodo de Ubuntu. Para implementar cargas de trabajo con SCTP, sigue estos pasos:
Para crear un clúster con GKE Dataplane V2 e imágenes de Ubuntu, ejecuta el siguiente comando:
gcloud container clusters create CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=CLUSTER_VERSION \ --enable-dataplane-v2 \ --image-type=ubuntu_containerd
Sustituye los siguientes valores:
CLUSTER_NAME
: el nombre de tu clúster.CONTROL_PLANE_LOCATION
: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.CLUSTER_VERSION
: la versión de GKE, que debe ser la 1.32.2-gke.1297000 o una posterior.
Para contenerizar la aplicación, asegúrate de que tu imagen de contenedor incluya una aplicación configurada para usar SCTP. Puedes usar cualquier aplicación que admita SCTP, como una aplicación personalizada.
A continuación, se muestra un ejemplo de
Dockerfile
para empaquetar la aplicación en un contenedor, suponiendo que usas Docker:Crea y envía la imagen a un registro de contenedores como Artifact Registry. Para obtener más información sobre cómo funciona este archivo, consulta la referencia de Dockerfile en la documentación de Docker.
Para crear un Deployment y un Service, guarda el siguiente manifiesto como
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
Haz los cambios siguientes:
CONTAINER_IMAGE
: la imagen del contenedor que has creado en el paso anterior.PORT
: los números de puerto SCTP y de puerto de destino de la aplicación. Los valores deport
ytargetPort
deben ser iguales.
Para aplicar el Deployment y el Service, ejecuta el siguiente comando:
kubectl apply -f sctp-deployment.yaml
Para verificar la conectividad SCTP del servicio, crea un pod en el mismo clúster y ejecuta el siguiente comando:
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'
El resultado debería ser similar al siguiente:
Preparing to unpack .../socat_1.8.0.0-4build3_amd64.deb ... Setting up socat (1.8.0.0-4build3) ... Hello, SCTP!
Solución de problemas
Si tienes problemas con la conectividad SCTP, sigue estas instrucciones para determinar el origen del problema:
Consulta los registros de pods. Para comprobar si hay errores en los registros de tu aplicación, ejecuta el siguiente comando:
kubectl logs POD_NAME
Estos registros pueden ayudarte a identificar la causa del fallo del pod.
Comprueba el estado del objeto de servicio SCTP:
kubectl describe service SCTP_SERVICE_NAME
Comprueba tus políticas de red. Las políticas de red pueden restringir el tráfico SCTP. Asegúrate de que tus políticas de red permitan el tráfico SCTP necesario para tus aplicaciones.
Comprueba el estado de GKE Dataplane V2. Para comprobar que GKE Dataplane V2 está habilitado en tu clúster, ejecuta el siguiente comando:
kubectl -n kube-system get pods -l k8s-app=cilium -o wide
Comprueba que la salida incluya pods con el prefijo
anetd-
. anetd es el controlador de redes de GKE Dataplane V2.Para mejorar el rendimiento, aumente los parámetros
sysctl
net.core.wmem_default
ynet.core.rmem_default
a un valor mayor, por ejemplo, 4194304 (4 MB). Para obtener más información, consulta Opciones de configuración de Sysctl.Puede que tengas problemas si usas la traducción de direcciones de red (NAT) con SCTP en GKE. Para obtener más información sobre lo que admite Cilium con SCTP, consulta la documentación de Cilium.
Los paquetes SCTP están sujetos a la unidad máxima de transmisión (MTU) de la red. Asegúrate de que la MTU de tu red sea suficiente para tu tráfico SCTP.
El rendimiento de SCTP puede verse afectado por factores como la latencia de la red, la pérdida de paquetes y la optimización del kernel. Monitoriza el rendimiento de la SCTP de tu aplicación y ajusta la configuración según sea necesario.
Siguientes pasos
- Consulta información sobre la compatibilidad con SCTP en la documentación de Cilium.
- Consulta cómo habilitar GKE Dataplane V2 en tu clúster.