Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Rede/ Ingresses/ Ingresses de Nginx/ Ingresses de Nginx usar hashing consistente para balanceamento de carga
Atualizado em 2024-11-28 GMT+08:00

Ingresses de Nginx usar hashing consistente para balanceamento de carga

O Nginx nativo suporta várias regras de balanceamento de carga, incluindo round robin ponderado e hash IP. Um ingress de Nginx suporta balanceamento de carga usando hash consistente com base nos recursos do Nginx nativo.

Por padrão, o método de hash IP suportado pelo Nginx usa o espaço de hash linear. O servidor back-end é selecionado com base no valor de hash do endereço IP. No entanto, quando esse método é usado para adicionar ou excluir um nó, todos os endereços IP precisam ser hash novamente e, em seguida, roteados novamente. Como resultado, um grande número de sessões são perdidas ou o cache se torna inválido. Portanto, o hashing consistente é introduzido no ingress do Nginx para resolver esse problema.

O hashing consistente é um algoritmo de hash especial, que constrói um espaço de hash em anel para substituir o espaço de hash linear comum. Quando um nó é adicionado ou excluído, apenas a rota de destino é migrada no sentido horário e outras rotas não precisam ser alteradas. Dessa forma, o reencaminhamento pode ser reduzido o máximo possível, resolvendo o problema de balanceamento de carga causado pela adição e exclusão de nó dinâmicos.

Se uma regra de hashing consistente estiver configurada, o servidor recém-adicionado compartilhará a carga de todos os outros servidores. Da mesma forma, quando um servidor é removido, todos os outros servidores podem compartilhar a carga do servidor removido. Isso equilibra a carga entre os nós no cluster e evita o efeito de avalanche causado pela quebra de um nó.

Configurar uma regra de hashing consistente

Um ingress de Nginx pode usar a anotação nginx.ingress.kubernetes.io/upstream-hash-by para configurar regras de hashing consistentes. O seguinte é um exemplo:

Para clusters da v1.23 ou posterior:
apiVersion: networking.k8s.io/v1
kind: Ingress 
metadata: 
  name: ingress-test
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"  # Perform hashing based on the request URI.
spec:
  rules:
    - host: ''
      http:
        paths:
          - path: '/'
            backend:
              service:
                name: <your_service_name>  # Replace it with the name of your target Service.
                port:
                  number: <your_service_port>  # Replace 8080 with the port number of your target Service.
            property:
              ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
            pathType: ImplementationSpecific
  ingressClassName: nginx
Para clusters da v1.21 ou anterior:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-test
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"  # Perform hashing based on the request URI.
spec:
  rules:
    - host: ''
      http:
        paths:
          - path: '/'
            backend:
              serviceName: <your_service_name>  # Replace it with the name of your target Service.
              servicePort: <your_service_port>  # Replace 8080 with the port number of your target Service.
O valor de nginx.ingress.kubernetes.io/upstream-hash-by pode ser uma variável de nginx, um valor de texto ou qualquer combinação:
  • nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri" indica que as solicitações são transformadas em hash com base no URI da solicitação.
  • nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri$host" indica que as solicitações são transformadas em hash com base no URI da solicitação e no nome do domínio.
  • nginx.ingress.kubernetes.io/upstream-hash-by: "${request_uri}-text-value" indica que as solicitações são hash com base no URI da solicitação e no valor do texto.