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.
Leia a visão geral conceitual desse recurso, que fornece uma explicação dos objetos
ServiceExport
eMultiClusterService
referenciados nesse documento.Você deve ter um recurso de frota com um cluster de hub e clusters membros. Se você não tiver esse recurso, siga Início Rápido: crie um recurso de frota e ingresse em clusters de membros.
Os clusters alvo do Azure Kubernetes Service (AKS) nos quais as cargas de trabalho são implantadas precisam estar presentes na mesma rede virtual ou em redes virtuais emparelhadas.
- Esses clusters de destino devem ser adicionados como clusters membros ao recurso de Frota.
- Esses clusters de destino devem usar rede Azure CNI (Contêiner Networking Interface).
Você deve obter acesso à API do Kubernetes do cluster de hub seguindo as etapas em API do Kubernetes do cluster de hub da Frota de acesso.
Defina as seguintes variáveis de ambiente e obtenha os kubeconfigs da frota e de todos os clusters membros:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBER_CLUSTER_1=aks-member-1 export MEMBER_CLUSTER_2=aks-member-2 az fleet get-credentials --resource-group ${GROUP} --name ${FLEET} --file fleet az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_1} --file aks-member-1 az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_2} --file aks-member-2
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Início Rápido para Bash no Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
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.
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
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
Crie o
ClusterResourcePlacement
a seguir em um arquivo chamadocrp-2.yaml
. Observe que estamos selecionando clusters na regiãoeastus
:apiVersion: placement.kubernetes-fleet.io/v1 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
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
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
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.
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
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 sertrue
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.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
eaks-member-2
da regiãoeastus
. Verifique os IPs do pod executando os seguintes comandos nos clusters da regiãoeastus
:KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide
Azure Kubernetes Service