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
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:
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.
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: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.
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 deport
etargetPort
tem de ser o mesmo.
Para aplicar a implementação e o serviço, execute o seguinte comando:
kubectl apply -f sctp-deployment.yaml
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
sysctl
net.core.wmem_default
enet.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?
- Saiba mais sobre a compatibilidade com SCTP na documentação do Cilium.
- Saiba como ativar o GKE Dataplane V2 no seu cluster.