En esta página, se explica cómo implementar cargas de trabajo que usan el Protocolo de transmisión de control (SCTP) en clústeres estándar de Google Kubernetes Engine (GKE).
SCTP es compatible con la tecnología de Cilium. Dado que GKE Dataplane V2 se implementa con Cilium, solo puedes usar SCTP en los clústeres que se habilitaron con GKE Dataplane V2. Con la compatibilidad con SCTP, puedes habilitar la comunicación directa con SCTP para el tráfico de Pod a Pod y de Pod a Service. 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 de la nube, y que implementan apps y servicios. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que se hace referencia en el contenido de Trusted Cloud by S3NS, consulta Tareas y roles comunes de los usuarios de GKE.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta
gcloud components update
para obtener la versión más reciente.
Requisitos y limitaciones
La compatibilidad con SCTP en los clústeres de GKE Standard 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 nodos 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 SO del nodo de GKE subyacente se carguen con el módulo del kernel
sctp
. - No puedes usar SCTP en clústeres habilitados con compatibilidad de 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 controlar posibles demoras mientras se establecen las asociaciones.
- Para obtener más información sobre lo que Cilium admite y no admite con SCTP, consulta la documentación de Cilium.
Implementa cargas de trabajo con SCTP
Prueba tu implementación de forma exhaustiva 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 y las imágenes de nodos de Ubuntu. Para implementar cargas de trabajo con SCTP, completa los siguientes pasos:
Para crear un clúster con imágenes de Ubuntu y GKE Dataplane V2, 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
Reemplaza los siguientes valores:
CLUSTER_NAME
: El nombre de tu clúster.CONTROL_PLANE_LOCATION
: Es 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 1.32.2-gke.1297000 o posterior.
Para crear un contenedor de la aplicación, asegúrate de que la imagen del 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 un
Dockerfile
para crear un contenedor para la aplicación, suponiendo que usas Docker:Compila 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
Reemplaza lo siguiente:
CONTAINER_IMAGE
: Es la imagen del contenedor que compilaste en el paso anterior.PORT
: Son los números de puerto SCTP y de puerto de destino de la aplicación. El valor deport
ytargetPort
debe ser el mismo.
Para aplicar el Deployment y el Service, ejecuta el siguiente comando:
kubectl apply -f sctp-deployment.yaml
Para verificar la conectividad de SCTP del servicio, crea un Pod dentro del 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 es similar a este:
Preparing to unpack .../socat_1.8.0.0-4build3_amd64.deb ... Setting up socat (1.8.0.0-4build3) ... Hello, SCTP!
Soluciona problemas
Si tienes problemas de conectividad con SCTP, sigue esta guía para determinar el origen del problema:
Verifica los registros del Pod. Para verificar si hay errores en los registros de tu aplicación, ejecuta el siguiente comando:
kubectl logs POD_NAME
Estos registros pueden ayudarte a identificar qué causó la falla del Pod.
Verifica el estado del objeto de servicio SCTP:
kubectl describe service SCTP_SERVICE_NAME
Verifica tus políticas de red. Las políticas de red pueden restringir el tráfico de SCTP. Asegúrate de que tus políticas de red permitan el tráfico SCTP necesario para tus aplicaciones.
Verifica el estado de GKE Dataplane V2. Para verificar 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
Verifica que el resultado incluya Pods con el prefijo
anetd-
. anetd es el controlador de herramientas de redes para GKE Dataplane V2.Para mejorar la capacidad de procesamiento, aumenta 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.Es posible 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 de transmisión máxima (MTU) de la red. Asegúrate de que la MTU de tu red sea suficiente para el tráfico de SCTP.
El rendimiento de SCTP puede verse afectado por factores como la latencia de la red, la pérdida de paquetes y el ajuste del kernel. Supervisa el rendimiento del protocolo SCTP de tu aplicación y ajusta la configuración según sea necesario.
¿Qué sigue?
- Obtén más información sobre la compatibilidad con SCTP en la documentación de Cilium.
- Aprende a habilitar GKE Dataplane V2 en tu clúster.