Partilhar via


Balanceamento de carga baseado em DNS de vários clusters com o Azure Kubernetes Fleet Manager (visualização)

O Azure Kubernetes Fleet Manager pode ser usado para criar e gerenciar o balanceamento de carga multicluster baseado em DNS para cargas de trabalho voltadas para o público implantadas em clusters membros.

Importante

As funcionalidades em versão prévia do Azure Kubernetes Fleet Manager estão disponíveis num modelo de autoatendimento e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As visualizações do Azure Kubernetes Fleet Manager são parcialmente cobertas pelo suporte ao cliente em regime de esforços possíveis. Assim sendo, estas funcionalidades não se destinam ao uso em produção.

As versões de pré-visualização de rede do nosso plano de dados são liberadas por meio da nossa networking.fleet.azure.com/v1beta1 API. Se não conseguir ver objetos de pré-visualização, verifique se está a solicitar a networking.fleet.azure.com/v1beta1 API quando interage com o cluster de hub do Fleet Manager.

Um diagrama mostrando uma visão geral conceitual de como o Fleet Manager dá suporte ao balanceamento de carga DNS em três clusters membros usando o Azure Traffic Manager e os recursos do Kubernetes ServiceExport.

Para fornecer balanceamento de carga público de vários clusters com DNS, o Fleet Manager utiliza o Azure Traffic Manager com um perfil de roteamento ponderado para atuar como um frontend para Services exportação de clusters membros. É possível usar esse recurso para balanceamento de carga de camada 4 e 7.

Os administradores de frota usam kubectl para criar e configurar recursos TrafficManagerProfile e TrafficManagerBackend no cluster de hub do Fleet Manager. Os TrafficManagerProfile definem um perfil do Gerenciador de Tráfego do Azure que inclui a configuração de monitorização de integridade do ponto de extremidade, com a definição associada TrafficManagerBackend do Service para balancear a carga.

Os serviços em clusters membros podem ser adicionados ao balanceamento de carga criando um ServiceExport no cluster e configurando um nome de host DNS exclusivo para o Service. Podem ser definidas ponderações opcionais que configuram o comportamento de roteamento de tráfego entre clusters. Se a carga de trabalho for implantada usando o posicionamento de recursos de cluster do Fleet Manager, o nome de host DNS pode ser configurado diretamente durante o posicionamento com um ResourceOverride.

A criação e configuração do Traffic Manager associado é gerenciada pelo Fleet Manager, com administradores de frota capazes de conduzir a experiência de ponta a ponta usando a API do Kubernetes.

Propriedades do TrafficManagerProfile

O TrafficManagerProfile recurso fornece uma representação de objeto Kubernetes de um Perfil padrão do Gerenciador de Tráfego do Azure.

apiVersion: networking.fleet.azure.com/v1beta1
kind: TrafficManagerProfile
metadata:
  name: myatm
  namespace: work
spec:
  monitorConfig:
    protocol: HTTP
    path: /api
    port: 8080
    intervalInSeconds: 30
    timeoutInSeconds: 10
    toleratedNumberOfFailures: 3

As propriedades importantes a entender incluem:

  • name: usado como o prefixo DNS para o trafficmanager.net nome DNS. Deve ser único. Se o nome já estiver em uso, a implantação falhará.
  • namespace: deve ser o mesmo que os recursos correspondentes TrafficManagerBackend e Service.
  • monitorCOnfig: mapeia para a configuração de monitorização padrão do Azure Traffic Manager. As opções de monitorização de ponto de extremidade do Azure Traffic Manager não suportadas são: Configurações de cabeçalho personalizadas; códigos de status esperados.

Propriedades do Traffic Manager Backend

O TrafficManagerBackend recurso fornece um objeto Kubernetes que é usado para armazenar pontos de extremidade de back-end que podem ser considerados pelo Gerenciador de Tráfego para receber tráfego. Antes que o tráfego seja endereçado para um ponto de extremidade, um ServiceExport deve ser criado.

apiVersion: networking.fleet.azure.com/v1beta1
kind: TrafficManagerBackend
metadata:
  name: app
  namespace: work
spec:
  profile:
    name: myatm
  backend:
    name: app
  weight: 100

As propriedades importantes a entender incluem:

  • spec/profile/name: deve corresponder ao correspondente TrafficManagerProfile.
  • spec/backend/name: deve corresponder ao nome do serviço exportado para fins de balanceamento de carga.
  • spec/weight: peso opcional (prioridade) a aplicar a este back-end. Valor inteiro entre 0 e 1.000. Se omitido, o Gestor de Tráfego utiliza um peso predefinido de '1'. Defina como '0' para desativar o roteamento de tráfego sem excluir o recurso Perfil do Gerenciador de Tráfego associado. Para obter mais informações, consulte Método de roteamento ponderado do Azure Traffic Manager.

Propriedades ServiceExport

Para adicionar um endpoint para um Service ao Gestor de Tráfego, crie um ServiceExport resource no cluster membro que contém o serviço. O ServiceExport recurso deve ser criado no mesmo namespace que o Service a ser exportado.

apiVersion: networking.fleet.azure.com/v1alpha1
kind: ServiceExport
metadata:
  name: kuard-export
  namespace: kuard-demo
  annotations:
    networking.fleet.azure.com/weight: "50"

As propriedades importantes a entender incluem:

  • metadata/namespace: deve corresponder ao namespace do Service a ser exportado.
  • metadata/annotations/networking.fleet.azure.com/weight: peso opcional (prioridade) a aplicar a este serviço de exportação. Valor inteiro entre 0 e 1.000. Se omitido, o Gestor de Tráfego utiliza um peso predefinido de '1'. Defina como '0' para desativar o roteamento de tráfego sem excluir o ponto de extremidade de serviço associado. Para obter mais informações, consulte Método de roteamento ponderado do Azure Traffic Manager.

Nome de host DNS exclusivo via anotação de serviço

Para adicionar um Service ao Gerenciador de Tráfego, ele deve ter um nome de host DNS exclusivo. O nome de host DNS pode ser definido seguindo o método recomendado pelo AKS de usar a anotação, service.beta.kubernetes.io/azure-dns-label-name conforme mostrado.

apiVersion: v1
kind: Service
metadata:
  name: kuard-svc
  namespace: kuard-demo
  labels:
    app: kuard
  annotations:
    service.beta.kubernetes.io/azure-dns-label-name: kuard-demo-cluster-01
spec:
  selector:
    app: kuard
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

A anotação de rótulo DNS pode ser substituída usando o ResourceOverride recurso do Fleet Manager, tornando possível implantar nomes de host exclusivos em vários clusters. Para obter mais informações, consulte o guia de instruções sobre balanceamento de carga DNS.

Controlando o roteamento de tráfego

Nesta seção, examinamos cenários comuns para controlar o roteamento de tráfego entre clusters.

Distribuir o tráfego entre vários clusters

Para permitir que o Gerenciador de Tráfego considere qualquer cluster para receber tráfego, use as definições mostradas.

  1. Crie um TrafficManagerBackend recurso e omita a weight propriedade.

    apiVersion: networking.fleet.azure.com/v1beta1
    kind: TrafficManagerBackend
    metadata:
      name: app
      namespace: work
    spec:
      profile:
        name: myatm
      backend:
        name: app
    
  2. Em cada cluster, crie um ServiceExport e omita a propriedade weight.

    apiVersion: networking.fleet.azure.com/v1alpha1
    kind: ServiceExport
    metadata:
      name: kuard-export
      namespace: kuard-demo
    

Uma vez implantado, o Gestor de Tráfego escolherá aleatoriamente um cluster, considerando que todos os clusters têm peso igual.

Distribua o tráfego entre clusters com pesos diferentes

Para fornecer ao Gerenciador de Tráfego dicas de preferência ao selecionar clusters, defina a weight propriedade nos TrafficManagerBackend objetos e ServiceExport .

  1. Crie um TrafficManagerBackend recurso e defina a weight propriedade como 100.

    apiVersion: networking.fleet.azure.com/v1beta1
    kind: TrafficManagerBackend
    metadata:
      name: app
      namespace: work
    spec:
      profile:
        name: myatm
      backend:
        name: app
      weight: 100
    
  2. Crie um ServiceExport e defina a weight propriedade como um valor que represente a prioridade que o Gerenciador de Tráfego deve usar ao considerar um cluster para receber tráfego.

    apiVersion: networking.fleet.azure.com/v1alpha1
    kind: ServiceExport
    metadata:
      name: kuard-export
      namespace: kuard-demo
      annotations:
        networking.fleet.azure.com/weight: "40"
    

Uma vez implantado, o Gerenciador de Tráfego preferirá clusters com maior peso. Não é necessário definir o valor de peso em cada cluster. Se você definir o mesmo valor de peso em mais de um cluster, o Gerenciador de Tráfego considerará esses clusters igualmente.

Excluir um cluster do encaminhamento de tráfego

Para excluir um cluster do encaminhamento de tráfego, defina a weight propriedade como 0 no recurso ServiceExport. Esse peso remove o endpoint da configuração do Gerenciador de Tráfego.

apiVersion: networking.fleet.azure.com/v1alpha1
kind: ServiceExport
metadata:
  name: kuard-export
  namespace: kuard-demo
  annotations:
    networking.fleet.azure.com/weight: "0"

Comportamento de exclusão do TrafficManagerProfile

Quando um TrafficManagerProfile recurso do Kubernetes é excluído, o Gerenciador de Tráfego do Azure associado e seus pontos de extremidade também são excluídos e as solicitações não são mais roteadas para clusters.

Se desejar interromper o roteamento de tráfego, mas manter o Gerenciador de Tráfego do Azure e seus pontos de extremidade, defina a weight propriedade como 0 no TrafficManagerBackend recurso.

Próximos passos