Implantar cargas de trabalho com SCTP


Nesta página, explicamos como implantar cargas de trabalho que usam o protocolo de transmissão de controle de fluxo (SCTP) em clusters padrão do Google Kubernetes Engine (GKE).

O SCTP é compatível com a tecnologia Cilium. Como o GKE Dataplane V2 é implementado usando o Cilium, você só pode usar o SCTP em clusters que foram ativados com o GKE Dataplane V2. Com o suporte ao SCTP, é possível ativar a comunicação direta para o tráfego de pod para pod e de pod para serviço. Para saber mais, consulte Suporte a SCTP no Cilium.

Esta página é destinada a operadores e desenvolvedores que provisionam e configuram recursos de nuvem e implantam apps e serviços. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no conteúdo do Trusted Cloud by S3NS, consulte Tarefas e funções de usuário comuns do GKE.

Antes de começar

Antes de começar, verifique se você realizou as seguintes tarefas:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a CLI do Google Cloud para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando gcloud components update.

Requisitos e limitações

O suporte ao SCTP em clusters do GKE Standard tem os seguintes requisitos e limitações:

  • Seu cluster precisa executar o GKE versão 1.32.2-gke.1297000 ou posterior.
  • Os nós do cluster precisam usar imagens de nó do Ubuntu. O SCTP não é compatível com imagens do Container-Optimized OS.
  • Para ativar o suporte ao SCTP, verifique se as imagens de contêiner baseadas no Ubuntu e o SO do nó do GKE subjacente estão carregados com o módulo do kernel sctp.
  • Não é possível usar o SCTP em clusters ativados com o suporte a várias redes para pods.
  • O tempo de configuração de uma associação SCTP pode ser maior do que o de uma conexão TCP. Projete seus aplicativos para lidar com possíveis atrasos enquanto as associações são estabelecidas.
  • Para saber mais sobre o que o Cilium oferece e não oferece com o SCTP, consulte a documentação do Cilium.

Implantar cargas de trabalho com SCTP

Prática recomendada:

Teste a implantação em um ambiente de não produção antes de implantar cargas de trabalho na produção.

A partir da versão 1.32.2-gke.1297000 do GKE, o SCTP é ativado por padrão em clusters que usam o GKE Dataplane V2 e imagens de nó do Ubuntu. Para implantar cargas de trabalho com SCTP, siga estas etapas:

  1. Para criar um cluster com o GKE Dataplane V2 e imagens do Ubuntu, execute o seguinte comando:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --cluster-version=CLUSTER_VERSION \
        --enable-dataplane-v2 \
        --image-type=ubuntu_containerd
    

    Substitua os seguintes valores:

    • CLUSTER_NAME: o nome do cluster.
    • CONTROL_PLANE_LOCATION: o local do Compute Engine do plano de controle do cluster. Forneça uma região para clusters regionais ou uma zona para clusters zonais.
    • CLUSTER_VERSION: a versão do GKE, que precisa ser 1.32.2-gke.1297000 ou posterior.
  2. Para colocar o aplicativo em contêiner, verifique se a imagem inclui um aplicativo configurado para usar o SCTP. É possível usar qualquer aplicativo que ofereça suporte ao SCTP, como um aplicativo personalizado.

    Confira a seguir um exemplo de Dockerfile para contentorizar o aplicativo, supondo que você use o 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"]
    

    Crie e envie a imagem para um registro de contêiner, como o Artifact Registry. Para mais informações sobre como esse arquivo funciona, consulte a referência do Dockerfile na documentação do Docker.

  3. Para criar uma implantação e um serviço, salve o manifesto a seguir 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
    

    Substitua:

    • CONTAINER_IMAGE: a imagem do contêiner criada na etapa anterior.
    • PORT: os números da porta SCTP e da porta de destino do aplicativo. O valor de port e targetPort precisa ser o mesmo.
  4. Para aplicar a implantação e o serviço, execute o comando a seguir:

    kubectl apply -f sctp-deployment.yaml
    
  5. Para verificar a conectividade SCTP do serviço, crie um pod no mesmo cluster e execute o seguinte 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'
    

    O resultado será assim:

    Preparing to unpack .../socat_1.8.0.0-4build3_amd64.deb ...
    Setting up socat (1.8.0.0-4build3) ...
    Hello, SCTP!
    

Solução de problemas

Se você tiver problemas com a conectividade SCTP, siga estas orientações para ajudar a determinar a origem do problema:

  • Verifique os registros do pod. Para verificar os registros do aplicativo em busca de erros, execute o seguinte comando:

    kubectl logs POD_NAME
    

    Esses registros podem ajudar você a identificar o que causou a falha do pod.

  • Verifique o status do objeto de serviço SCTP:

    kubectl describe service SCTP_SERVICE_NAME
    
  • Verifique suas políticas de rede. As políticas de rede podem restringir o tráfego do SCTP. Verifique se as políticas de rede permitem o tráfego SCTP necessário para seus aplicativos.

  • Verifique o status do GKE Dataplane V2. Para verificar se o GKE Dataplane V2 está ativado no cluster, execute o seguinte comando:

    kubectl -n kube-system get pods -l k8s-app=cilium -o wide
    

    Verifique se a saída inclui pods com o prefixo anetd-. O anetd é o controlador de rede do GKE Dataplane V2.

  • Para melhorar a capacidade de processamento, aumente os parâmetros sysctl net.core.wmem_default e net.core.rmem_default para um valor maior, por exemplo, 4194304 (4 MB). Para mais informações, consulte Opções de configuração do Sysctl.

  • Você pode enfrentar problemas se usar a conversão de endereços de rede (NAT) com SCTP no GKE. Para mais informações sobre o que o Cilium oferece com o SCTP, consulte a documentação do Cilium.

  • Os pacotes SCTP estão sujeitos à unidade de transmissão máxima (MTU) da rede. Verifique se a MTU da sua rede é suficiente para o tráfego SCTP.

  • O desempenho do SCTP pode ser afetado por fatores como latência da rede, perda de pacotes e ajuste do kernel. Monitore a performance do SCTP do seu aplicativo e ajuste as configurações conforme necessário.

A seguir