Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 em regime de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção.
Pré-requisitos
Se você ainda não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
Leia a visão geral conceitual desse recurso, que fornece uma explicação dos objetos
ServiceExporteMultiClusterServicereferenciados nesse documento.Você deve ter um recurso de Frota com um cluster de hub e clusters de 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 Acessar a API do Kubernetes do cluster de hub da Frota.
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 Introdução ao 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 obter outras opções de entrada, consulte Autenticar no Azure usando 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 e gerenciar 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-demoA saída é semelhante ao exemplo a seguir:
namespace/kuard-demo createdAplique os objetos Deployment, Service e ServiceExport:
KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yamlA especificação
ServiceExportno 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 createdCrie o
ClusterResourcePlacementa 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: eastusAplique o
ClusterResourcePlacement:KUBECONFIG=fleet kubectl apply -f crp-2.yamlSe for bem-sucedido, a saída será semelhante ao exemplo a seguir:
clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo createdVerifique o status do
ClusterResourcePlacement:KUBECONFIG=fleet kubectl get clusterresourceplacementsSe 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 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-demoA saída é semelhante ao exemplo a seguir:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 25sKUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demoA saída é semelhante ao exemplo a seguir:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 55sVocê 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
MultiClusterServiceem 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.yamlObservaçã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: networking.fleet.azure.com/azure-load-balancer-internal: "true" ...A saída é semelhante ao exemplo a seguir:
multiclusterservice.networking.fleet.azure.com/kuard createdVerifique se o MultiClusterService é válido executando o seguinte comando:
KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demoO resultado deverá ser semelhante ao seguinte exemplo:
NAME SERVICE-IMPORT EXTERNAL-IP IS-VALID AGE kuard kuard <a.b.c.d> True 40sO campo
IS-VALIDdeve sertruena 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 addrsObserve que os IPs dos pods que atendem à solicitação mudam e que esses pods são dos clusters membros
aks-member-1eaks-member-2da 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 wideKUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide