Por padrão, os endpoints de backend de um Kubernetes Service são distribuídos por todos os nós de um cluster. Essa distribuição pode causar problemas de conectividade ou desempenho ineficiente quando o tráfego atravessa diferentes grupos de nós. A topologia de serviço permite restringir o tráfego para aplicações em nós de borda, garantindo que apenas nós do mesmo node pool ou o nó local acessem esses recursos. Este tópico explica o recurso de topologia de serviço e demonstra como configurá-lo.
Contexto
Em cenários de computação de borda, os nós de borda costumam ser agrupados por localização geográfica ou outros atributos lógicos, como arquitetura de CPU, provedor de serviços de Internet (ISP) ou provedor de serviços em nuvem. Esses grupos de nós geralmente ficam isolados entre si. Tal isolamento significa que eles podem não ter conectividade de rede, não compartilhar recursos, utilizar recursos heterogêneos ou executar aplicações independentes.
Funcionamento da topologia de serviço
Para resolver esses problemas, o Container Service for Kubernetes (ACK) Edge adiciona um recurso de gerenciamento de topologia de endpoints ao Service nativo. Isso permite restringir o escopo de acesso dos Endpoints de backend de um Service por meio de configurações simples. Por exemplo, uma aplicação em um nó de borda pode ser acessada apenas por nós do mesmo node pool ou exclusivamente pelo nó local. A figura a seguir ilustra o princípio de implementação.
O Service1 está associado a duas instâncias de Pod de backend: Pod 2 e Pod 3. A anotação
annotation: "openyurt.io/topologyKeys: kubernetes.io/zone"define o escopo topológico do Service1 como o node pool.O Pod 2 está no nó 2 e o Pod 3 está no nó 4. Esses nós pertencem a dois node pools diferentes: node pool A e node pool B, respectivamente.
Como o Pod 1 e o Pod 3 não estão no mesmo node pool, quando o Pod 1 acessa o Service1, o tráfego é roteado apenas para o Pod 2. O acesso ao Pod 3 fica restrito.
Observações de uso
Versões anteriores à v1.26.3-aliyun.1: Para ative a topologia de serviço, aplique a anotação correspondente durante a criação do Service. Se você adicionar a anotação após a criação, o recurso não entrará em vigor. Nesse caso, exclua e recrie o Service.
Versão v1.26.3-aliyun.1 e posteriores: Modifique a anotação de topologia de serviço mesmo após a criação do Service. As alterações entram em vigor imediatamente.
Anotações
configure a topologia de serviço adicionando uma anotação a um Kubernetes Service padrão. A tabela a seguir descreve as anotações disponíveis.
|
Chave da anotação |
Valor da anotação |
Descrição |
|
openyurt.io/topologyKeys |
kubernetes.io/hostname |
Restringe o acesso ao Service apenas ao nó local. |
|
openyurt.io/topologyKeys |
kubernetes.io/zone ou openyurt.io/nodepool |
Limita o acesso ao Service aos nós dentro do mesmo node pool. Se a versão do seu cluster ACK Edge for 1,18 ou superior, recomendamos o uso de openyurt.io/nodepool. |
|
- |
- |
Nenhuma restrição de topologia é aplicada ao Service. |
Configurar topologia de serviço
Use o console ou a cli para configurar a topologia de serviço.
Console
Para crie um Service acessível apenas por nós do mesmo node pool, adicione uma anotação ao Service. Por exemplo, defina Name como openyurt.io/topologyKeys e Value como kubernetes.io/zone. Para mais informações sobre como criar um Service, consulte Gerenciamento de Services.
CLI
Para crie um Service que utiliza um node pool como domínio de topologia, utilize o seguinte exemplo YAML.
apiVersion: v1
kind: Service
metadata:
annotations:
openyurt.io/topologyKeys: kubernetes.io/zone
name: my-service-nodepool
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: nginx
sessionAffinity: None
type: ClusterIP