Implemente cargas de trabalho com SCTP


Esta página explica como implementar cargas de trabalho que usam o protocolo de transmissão de controlo de fluxo (SCTP) em clusters padrão do Google Kubernetes Engine (GKE).

O SCTP é suportado na tecnologia Cilium. Uma vez que o GKE Dataplane V2 é implementado com o Cilium, só pode usar o SCTP em clusters que tenham sido ativados com o GKE Dataplane V2. Com o suporte de SCTP, pode ativar a comunicação SCTP direta para tráfego de pod para pod e de pod para serviço. Para saber mais, consulte o artigo Apoio técnico de SCTP no Cilium.

Esta página destina-se a operadores e programadores que preparam e configuram recursos na nuvem, e implementam apps e serviços. Para saber mais sobre as funções comuns e as tarefas de exemplo referenciadas no Google Cloud conteúdo, consulte o artigoFunções e tarefas comuns do utilizador do GKE.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute gcloud components update para obter a versão mais recente.

Requisitos e limitações

O suporte de SCTP em clusters padrão do GKE tem os seguintes requisitos e limitações:

  • O cluster tem de executar a versão 1.32.2-gke.1297000 ou posterior do GKE.
  • Os nós do cluster têm de usar imagens de nós do Ubuntu. O SCTP não é suportado para imagens do SO otimizado para contentores.
  • Para ativar o suporte de SCTP, certifique-se de que as imagens de contentores baseadas no Ubuntu e o SO do nó do GKE subjacente estão carregados com o módulo do kernel sctp.
  • Não pode usar o SCTP em clusters ativados com a compatibilidade com várias redes para pods.
  • O tempo de configuração de uma associação SCTP pode demorar mais do que o tempo de configuração de uma ligação TCP. Conceba as suas aplicações para processarem potenciais atrasos enquanto as associações são estabelecidas.
  • Para saber mais sobre o que o Cilium suporta e não suporta com o SCTP, consulte a documentação do Cilium.

Implemente cargas de trabalho com SCTP

Prática recomendada:

Teste a implementação exaustivamente num ambiente de não produção antes de implementar cargas de trabalho em produção.

A partir da versão 1.32.2-gke.1297000 do GKE, o SCTP está ativado por predefinição em clusters que usam o GKE Dataplane V2 e imagens de nós do Ubuntu. Para implementar cargas de trabalho com SCTP, conclua os seguintes passos:

  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: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.
    • CLUSTER_VERSION: a versão do GKE, que tem de ser 1.32.2-gke.1297000 ou posterior.
  2. Para colocar a aplicação num contentor, certifique-se de que a imagem do contentor inclui uma aplicação configurada para usar o SCTP. Pode usar qualquer aplicação que suporte SCTP, como uma aplicação personalizada.

    Segue-se um exemplo de um Dockerfile para colocar a aplicação num contentor, partindo do princípio de que usa 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 registo de contentores, como o Artifact Registry. Para mais informações sobre o funcionamento deste ficheiro, consulte a referência do Dockerfile na documentação do Docker.

  3. Para criar uma implementação e um serviço, guarde o seguinte manifesto 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 o seguinte:

    • CONTAINER_IMAGE: a imagem do contentor que criou no passo anterior.
    • PORT: a porta SCTP e os números de porta de destino da aplicação. O valor de port e targetPort tem de ser o mesmo.
  4. Para aplicar a implementação e o serviço, execute o seguinte comando:

    kubectl apply -f sctp-deployment.yaml
    
  5. Para validar a conetividade SCTP para o 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 é semelhante ao seguinte:

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

Resolução de problemas

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

  • Verifique os registos do pod. Para verificar se existem erros nos registos da sua aplicação, execute o seguinte comando:

    kubectl logs POD_NAME
    

    Estes registos podem ajudar a identificar a causa da falha de sistema do pod.

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

    kubectl describe service SCTP_SERVICE_NAME
    
  • Verifique as políticas de rede. As políticas de rede podem restringir o tráfego SCTP. Certifique-se de que as suas políticas de rede permitem o tráfego SCTP necessário para as suas aplicações.

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

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

    Verifique se o resultado inclui pods com o prefixo anetd-. anetd é o controlador de rede para o GKE Dataplane V2.

  • Para melhorar o débito, aumente os parâmetros sysctlnet.core.wmem_default e net.core.rmem_default para um valor superior, por exemplo, 4194304 (4 MB). Para mais informações, consulte as opções de configuração do Sysctl.

  • Pode ter problemas se usar a tradução de endereços de rede (NAT) com SCTP no GKE. Para mais informações sobre o que o Cilium suporta com o SCTP, consulte a documentação do Cilium.

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

  • O desempenho do SCTP pode ser afetado por fatores como a latência da rede, a perda de pacotes e o ajuste do kernel. Monitorize o desempenho do SCTP da sua aplicação e ajuste as definições conforme necessário.

O que se segue?