Anthos Service Mesh 1.6

Adicionar clusters no Anthos Service Mesh

Neste guia, explicamos como mesclar dois clusters em um único Anthos Service Mesh usando a Mesh CA ou o Citadel e ativar o balanceamento de carga entre clusters. É possível ampliar facilmente esse processo para incorporar qualquer número de clusters na malha.

Uma configuração do Anthos Service Mesh de vários clusters pode resolver vários cenários corporativos cruciais, como escala, local e isolamento. Para mais informações, consulte Casos de uso de vários clusters. Além disso, otimize seus aplicativos para aproveitar ao máximo uma malha de serviço. Para mais informações, consulte Como preparar um aplicativo para o Anthos Service Mesh.

Pré-requisitos

Presumimos que você tenha dois ou mais clusters do Google Cloud GKE que atendam aos seguintes requisitos:

  • Anthos Service Mesh versão 1.6.8 ou superior instalada nos clusters. Consulte Visão geral da instalação para instalar ou fazer upgrade dos clusters para a versão necessária.
  • Se você juntar clusters que não estão no mesmo projeto, eles precisarão ser instalados usando o perfil asm-gcp-multiproject e os clusters precisarão estar em uma configuração de VPC compartilhada juntos na mesma rede. Além disso, recomendamos que você tenha um projeto para hospedar a VPC compartilhada e dois projetos de serviço para a criação de clusters. Para mais informações, consulte Como configurar clusters com a VPC compartilhada.
  • Se você usar a Citadel CA, use a mesma CA raiz personalizada para os dois clusters.

Como definir variáveis de projeto e de cluster

  1. Por conveniência, defina uma pasta de trabalho. Esta é a pasta em que você fez o download e extraiu os arquivos do Anthos Service Mesh na etapa de pré-requisito, Como preparar para instalar o Anthos Service Mesh.

    export PROJECT_DIR=YOUR_WORKING_FOLDER
  2. Crie uma variável de contexto para cada cluster. O contexto é uma string criada a partir dos IDs do projeto do cluster, nomes de cluster e locais. Para os valores de local, use o local do cluster, por exemplo, us-west2-a. Neste exemplo, uma malha já contém um cluster e você está adicionando outro cluster à malha:

    export CTX_1=gke_${CLUSTER_1_PROJECT_ID}_${CLUSTER_1_LOCATION}_${CLUSTER_1_NAME}
    export CTX_2=gke_${CLUSTER_2_PROJECT_ID}_${CLUSTER_2_LOCATION}_${CLUSTER_2_NAME}

Configurar a descoberta de endpoints entre clusters

Configure a descoberta de endpoints para balanceamento de carga entre clusters usando os comandos a seguir. Esta etapa executa as seguintes tarefas:

  • O comando istioctl cria um secret que concede acesso ao servidor da API Kube para um cluster.
  • O comando kubectl aplica o secret a outro cluster. Assim, o segundo cluster pode ler os endpoints de serviço do primeiro.
istioctl x create-remote-secret --context=${CTX_1} --name=${CLUSTER_1_NAME} | \
  kubectl apply -f - --context=${CTX_2}
istioctl x create-remote-secret --context=${CTX_2} --name=${CLUSTER_2_NAME} | \
  kubectl apply -f - --context=${CTX_1}

Verificar sua implantação

Nesta seção, explicamos como implantar um serviço HelloWorld de amostra no seu ambiente de vários clusters para verificar se o balanceamento de carga entre clusters funciona.

Instalar o serviço HelloWorld

Crie o namespace de amostra e a definição de serviço em cada cluster.

for CTX in ${CTX_1} ${CTX_2}
  do
    kubectl create --context=${CTX} namespace sample
    kubectl label --context=${CTX} namespace sample \
      istio-injection=enabled
    kubectl create --context=${CTX} \
      -f ${PROJECT_DIR}/samples/helloworld/helloworld.yaml \
      -l app=helloworld -n sample
  done

Implantar o HelloWorld v1 e v2 em cada cluster

  1. Implante HelloWorld v1 em CLUSTER_1 e v2 em CLUSTER_2, o que ajuda posteriormente a verificar o balanceamento de carga entre clusters:

    kubectl create --context=${CTX_1} \
      -f ${PROJECT_DIR}/samples/helloworld/helloworld.yaml \
      -l app=helloworld -l version=v1 -n sample
    kubectl create --context=${CTX_2} \
      -f ${PROJECT_DIR}/samples/helloworld/helloworld.yaml \
      -l app=helloworld -l version=v2 -n sample
  2. Confirme se HelloWorld v1 e v2 estão em execução usando os seguintes comandos. Verifique se a saída é semelhante à mostrada:

    kubectl get pod --context=${CTX_1} -n sample
    NAME                            READY     STATUS    RESTARTS   AGE
    helloworld-v1-86f77cd7bd-cpxhv  2/2       Running   0          40s
    kubectl get pod --context=${CTX_2} -n sample
    NAME                            READY     STATUS    RESTARTS   AGE
    helloworld-v2-758dd55874-6x4t8  2/2       Running   0          40s

Implantar o serviço de suspensão

  1. Implante o serviço Sleep nos dois clusters. Este pod gera tráfego de rede artificial para fins de demonstração:

    for CTX in ${CTX_1} ${CTX_2}
      do
        kubectl apply --context=${CTX} \
          -f ${PROJECT_DIR}/samples/sleep/sleep.yaml -n sample
      done
  2. Aguarde a inicialização do serviço Sleep em cada cluster. Verifique se a saída é semelhante a esta:

    kubectl get pod --context=${CTX_1} -n sample -l app=sleep
    NAME                             READY   STATUS    RESTARTS   AGE
    sleep-754684654f-n6bzf           2/2     Running   0          5s
    kubectl get pod --context=${CTX_2} -n sample -l app=sleep
    NAME                             READY   STATUS    RESTARTS   AGE
    sleep-754684654f-dzl9j           2/2     Running   0          5s

Verificar o balanceamento de carga entre clusters

Chame o serviço HelloWorld várias vezes e confira a resposta para verificar as respostas alternadas da v1 e da v2:

kubectl exec --context=${CTX_1} -it -n sample -c sleep \
   $(kubectl get pod --context=${CTX_1} -n sample -l \
   app=sleep -o jsonpath='{.items[0].metadata.name}') -- curl \
   helloworld.sample:5000/hello
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...
kubectl exec --context=${CTX_2} -it -n sample -c sleep \
   $(kubectl get pod --context=${CTX_2} -n sample -l \
   app=sleep -o jsonpath='{.items[0].metadata.name}') -- curl \
   helloworld.sample:5000/hello

Verifique se a saída é semelhante a esta:

Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...

Parabéns, você verificou seu balanceamento de carga com vários clusters do Anthos Service Mesh!

Limpar o serviço HelloWorld

Quando terminar de verificar o balanceamento de carga, remova o serviço HelloWorld e Sleep do seu cluster.

kubectl delete ns sample --context ${CTX_1}
kubectl delete ns sample --context ${CTX_2}