Compartilhar via


Configurar o balanceamento de carga da camada 4 de vários clusters nos clusters membros do Gerenciador de Frota de Kubernetes do Azure (versão prévia)

Para aplicativos implantados em vários clusters, os administradores geralmente desejam rotear o tráfego de entrada para eles entre clusters.

Você pode seguir esse documento para configurar o balanceamento de carga da camada 4 para esses aplicativos de vários clusters.

Importante

A versão prévia do recurso Gerenciador de Frota de Kubernetes do Azure está disponível com base em autoatendimento e aceitação. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. A versão prévia do Gerenciador de Frota de Kubernetes do Azure é parcialmente coberta pelo suporte ao cliente com base no melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção.

Pré-requisitos

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Implantar uma carga de trabalho em clusters membros do recurso Frota

Observação

  • As etapas deste guia de instruções referem-se a um aplicativo de exemplo somente para fins de demonstração. Você pode substituir essa carga de trabalho por um dos seus objetos Deployment e Service existentes.

  • Essas etapas implantam o exemplo de carga de trabalho do cluster de Frota nos clusters membros usando a propagação de configuração de Kubernetes. Como alternativa, você pode optar por implantar essas configurações de Kubernetes em cada cluster membro separadamente, uma de cada vez.

  1. Crie um namespace no cluster de frota:

    KUBECONFIG=fleet kubectl create namespace kuard-demo
    

    A saída é semelhante ao exemplo a seguir:

    namespace/kuard-demo created
    
  2. Aplique os objetos Deployment, Service e ServiceExport:

    KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yaml
    

    A especificação ServiceExport no arquivo acima permite exportar um serviço dos clusters membros para o recurso de Frota. Após a exportação bem-sucedida, o serviço e todos os seus pontos de extremidade serão sincronizados com o cluster da frota e poderão ser usados para configurar o balanceamento de carga de vários clusters nesses pontos de extremidade. A saída deve ser semelhante ao seguinte exemplo:

    deployment.apps/kuard created
    service/kuard created
    serviceexport.networking.fleet.azure.com/kuard created
    
  3. Crie o ClusterResourcePlacement a seguir em um arquivo chamado crp-2.yaml. Observe que estamos selecionando clusters na região eastus:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ClusterResourcePlacement
    metadata:
      name: kuard-demo
    spec:
      resourceSelectors:
        - group: ""
          version: v1
          kind: Namespace
          name: kuard-demo
      policy:
        affinity:
          clusterAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              clusterSelectorTerms:
                - labelSelector:
                    matchLabels:
                      fleet.azure.com/location: eastus
    
  4. Aplique o ClusterResourcePlacement:

    KUBECONFIG=fleet kubectl apply -f crp-2.yaml
    

    Se for bem-sucedido, a saída será semelhante ao exemplo a seguir:

    clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
    
  5. Verifique o status do ClusterResourcePlacement:

    KUBECONFIG=fleet kubectl get clusterresourceplacements
    

    Se for bem-sucedido, a saída será semelhante ao exemplo a seguir:

    NAME            GEN   SCHEDULED   SCHEDULEDGEN   APPLIED   APPLIEDGEN   AGE
    kuard-demo      1     True        1              True      1            20s
    

Criar um MultiClusterService para balancear a carga entre os pontos de extremidade de serviço em vários clusters membros

  1. Verifique se o serviço foi exportado com êxito para os clusters membros na região eastus:

    KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demo
    

    A saída é semelhante ao exemplo a seguir:

    NAME    IS-VALID   IS-CONFLICTED   AGE
    kuard   True       False           25s
    
    KUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demo
    

    A saída é semelhante ao exemplo a seguir:

    NAME    IS-VALID   IS-CONFLICTED   AGE
    kuard   True       False           55s
    

    Você verá que o serviço é válido para exportação (o campo IS-VALID é true) e não tem conflitos com outras exportações (IS-CONFLICT é false).

    Observação

    Pode levar alguns minutos para que o ServiceExport seja propagado.

  2. Crie MultiClusterService em um membro para balancear a carga nos terminais de serviço nesses clusters:

    KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yaml
    

    Observação

    Para expor o serviço por meio do IP interno em vez do público, adicione a anotação ao MultiClusterService:

    apiVersion: networking.fleet.azure.com/v1alpha1
    kind: MultiClusterService
    metadata:
      name: kuard
      namespace: kuard-demo
      annotations:
         service.beta.kubernetes.io/azure-load-balancer-internal: "true"
      ...
    

    A saída é semelhante ao exemplo a seguir:

    multiclusterservice.networking.fleet.azure.com/kuard created
    
  3. Verifique se o MultiClusterService é válido executando o seguinte comando:

    KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demo
    

    O resultado deverá ser semelhante ao seguinte exemplo:

    NAME    SERVICE-IMPORT   EXTERNAL-IP     IS-VALID   AGE
    kuard   kuard            <a.b.c.d>       True       40s
    

    O campo IS-VALID deve ser true na saída. Confira o endereço IP do balanceador de carga externo (EXTERNAL-IP) na saída. Pode demorar um pouco até que a importação seja totalmente processada e o endereço IP fique disponível.

  4. Execute o seguinte comando várias vezes usando o endereço IP do balanceador de carga externo:

    curl <a.b.c.d>:8080 | grep addrs 
    

    Observe que os IPs dos pods que atendem à solicitação mudam e que esses pods são dos clusters membros aks-member-1 e aks-member-2 da região eastus. Verifique os IPs do pod executando os seguintes comandos nos clusters da região eastus:

    KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
    
    KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide