Implantação no Azure AKS

Um exemplo de implantação local de um cluster Kubernetes no Azure AKS é fornecido aqui. Clone este repositório e modifique os arquivos conforme sua conveniência. No repositório, como em um módulo Tofu/Terraform padrão, você encontrará os seguintes arquivos:

  • terraform.tf - declaração dos provedores Tofu/Terraform utilizados neste projeto;

  • locals.tf - variáveis locais usadas pelos módulos Modern Gitops Stack;

  • main.tf - definição de todos os módulos implantados;

  • storage.tf - criação da Conta de Armazenamento e Container de Armazenamento usado por Loki e Thanos;

  • dns.tf - criação do registro curinga para as entradas dos componentes Modern Gitops Stack;

  • oidc.tf - adição dos URIs de redirecionamento ao Aplicativo Empresarial Azure AD para usá-lo para autenticação nos componentes Modern Gitops Stack fornecendo uma interface web;

  • outputs.tf - as variáveis de saída do Modern Gitops Stack;

IMPORTANTE: A pasta requirements não faz parte do código do Tofu/Terraform que você executa diretamente. Sua importância é explicada na próxima seção.

Requisitos

Na sua máquina local, você precisa ter as seguintes ferramentas instaladas:

  • Azure CLI para fazer login em sua conta do Azure e interagir com seu cluster AKS;

  • Tofu ou Terraform para provisionar toda a stack;

  • kubectl ou k9s para interagir com seu cluster;

Fora isso, você precisará do seguinte:

  • Uma conta Azure ativa com uma assinatura ativa;

  • Um aplicativo corporativo no Entra ID para usar como provedor de identidade para os componentes Modern Gitops Stack;

  • A assinatura do Azure precisa ter um Key Vault para armazenar os segredos usados para passar as credenciais da referida aplicação para os componentes Modern Gitops Stack;

  • Sua conta do Azure precisa fazer parte de um grupo de usuários ao qual foi atribuída a função Owner, Key Vault Reader e Key Vault Secrets user na assinatura;

  • Sua conta do Azure também precisa ser um Owner do Aplicativo Empresarial para adicionar os URIs de redirecionamento adequados.

Neste repositório, você encontrará um exemplo de código Tofu/Terraform que pode provisionar os recursos necessários acima. Você pode encontrar este código aqui.

Observe que este código precisa ser executado por um administrador com os direitos apropriados na assinatura e também no Entra ID.

Uma alternativa para criar os recursos necessários separadamente é que seu usuário tenha uma atribuição de função Application Developer na instância do Entra ID à qual a assinatura está vinculada.

Isso permitirá que você crie o Aplicativo Corporativo e adicione os URIs de redirecionamento diretamente com seu código, sem a necessidade de um administrador.

Verifique application.tf da dica acima e adapte os recursos do Tofu/Terraform para crie você mesmo o aplicativo.

Ou simplesmente crie o aplicativo corporativo e adicione os URIs de redirecionamento manualmente.

Especificidades e explicações

Estado remoto do Tofu/Terraform

Se não quiser configurar o back-end de estado remoto do Tofu/Terraform, você pode simplesmente remover o bloco backend do arquivo terraform.tf.

NOTA: Mais informações sobre backends remotos estão disponíveis em documentação oficial.

Autenticação OIDC

Os módulos Modern Gitops Stack são desenvolvidos com o OIDC em mente. Na produção, você deve ter um provedor de identidade que suporte OIDC e usá-lo para autenticar os aplicativos do Modern Gitops Stack.

Neste exemplo, usamos Enterprise Applicaion como provedor OIDC.

Você pode usar qualquer outro provedor OIDC adaptando o bloco oidc no arquivo locals.tf com os valores apropriados.

Vamos criptografar certificados SSL

Por padrão, para evitar a limitação de taxa do seu domínio pelo Let’s Encrypt, o exemplo usa a configuração letsencrypt-staging do módulo cert-manager para gerar certificados. Isso usa o ambiente de teste Let’s Encrypt que possui um certificado CA inválido.

Se você se sentir pronto para testar com certificados de produção, você pode simplesmente editar o arquivo locals.tf e alterar a variável cluster_issuer para letsencrypt-prod.

Implantação

  1. Clone o repositório e entre na pasta usando cd examples/aks;

  2. Faça login em sua conta do Azure com a CLI do Azure, defina a assinatura adequada e verifique se você está conectado:

    az login
    az account set --subscription <subscription_id>
    az account show
  3. Confira os módulos que deseja implantar no arquivo main.tf e comente os demais;

    DICA: Você também pode adicionar seus próprios módulos Tofu/Terraform neste arquivo ou em qualquer outro arquivo na pasta raiz. Um bom lugar para começar a escrever seu próprio módulo é clonar o repositório modern-gitops-stack-module-template e adaptá-lo ao que você precisa.

  4. Na raiz do deploy de exemplo, inicialize os módulos e provedores do Tofu/Terraform:

    tofu init
  5. Configure as variáveis em locals.tf de acordo com sua preferência: DICA: O documentação do módulo cluster pode ajudá-lo a saber o que colocar em kubernetes_version, por exemplo.

    Unresolved include directive in modules/ROOT/pages/tutorials/deploy_aks.adoc - include::examples$deploy_examples/aks/locals.tf[]
  6. Por fim, execute tofu apply e aceite as alterações propostas para criar os nós Kubernetes no Azure AKS e preenchê-los com nossos serviços;

    tofu apply
  7. Após a primeira implantação (observe a etapa de solução de problemas relacionada ao ArgoCD), você pode ir para locals.tf e habilitar o booleano ServiceMonitor para ativar os exportadores do Prometheus que enviarão métricas para o Prometheus;

    IMPORTANTE: Este sinalizador precisa ser definido como false para a primeira inicialização do cluster, caso contrário, os aplicativos falharão na implantação enquanto as definições de recursos personalizados do kube-prometheus-stack ainda não foram criadas.

    NOTA: Você pode definir o sinalizador como true no arquivo locals.tf ou pode simplesmente deletar a linha nas declarações dos módulos, já que esta variável é definida como true por padrão em cada módulo.

    DICA: Anote o local chamado app_autosync. Se você definir a condição do operador ternário como false você desabilitará a sincronização automática para todos os módulos Modern Gitops Stack. Isso permite que você escolha quando sincronizar manualmente o módulo na interface do Argo CD e é útil para fins de solução de problemas.

Acesse o cluster e os aplicativos do Modern Gitops Stack

Para acessar seu cluster, você precisa usar a CLI do Azure para recuperar um Kubeconfig que você pode usar:

az aks get-credentials --resource-group YOUR_CLUSTER_RESOURCE_GROUP_NAME --name YOUR_CLUSTER_NAME --file ~/.kube/NAME_TO_GIVE_YOUR_CONFIG.config

Se você não adicionar o ID do objeto do seu usuário ou grupo à variável rbac_aad_admin_group_object_ids no main.tf, você precisará usar o sinalizador --admin no comando acima. Isso dará ao Kubeconfig privilégio para acessar o cluster.

Então você pode usar o comando kubectl ou k9s para interagir com o cluster:

k9s --kubeconfig ~/.kube/NAME_TO_GIVE_YOUR_CONFIG.config

Quanto aos aplicativos do Modern Gitops Stack, você pode acessá-los através do domínio de entrada que pode ser encontrado na saída ingress_domain. Se você usou o código do exemplo sem modificar as saídas, você verá algo assim em seu terminal depois que tofu apply tiver feito seu trabalho:

Outputs:

ingress_domain = "your.domain.here"

Ou você pode usar kubectl para obter todas as entradas e suas respectivas URLs:

kubectl get ingress --all-namespaces --kubeconfig ~/.kube/NAME_TO_GIVE_YOUR_CONFIG.config

Parar o cluster

Para parar definitivamente o cluster com um único comando, você pode simplesmente usar o comando terraform destroy. Isso destruirá todos os recursos criados pelo código Tofu/Terraform, incluindo o cluster Kubernetes.

Solução de problemas

connection_error durante a primeira implantação

Em alguns casos, você pode encontrar um erro como estes na primeira implantação:

╷
│ Error: error while waiting for application argocd to be created
│
│   with module.argocd.argocd_application.this,
│   on .terraform/modules/argocd/main.tf line 55, in resource "argocd_application" "this":
│   55: resource "argocd_application" "this" {
│
│ error while waiting for application argocd to be synced and healthy: rpc error: code = Unavailable desc = error reading from server: EOF
╵

O erro se deve à forma como provisionamos o Argo CD nas etapas finais da implantação. Usamos o bootstrap Argo CD para implantar o módulo Argo CD final, o que causa uma reimplantação do Argo CD e consequentemente uma perda momentânea de conexão entre o provedor Argo CD Terraform e o servidor Argo CD.

Você pode simplesmente executar novamente o comando terraform apply para finalizar a inicialização do cluster sempre que encontrar esse erro.

Loop de recarga da interface Argo CD ao clicar no login

Se você encontrar um loop ao clicar no botão de login na interface do ArgoCD, você pode tentar excluir o pod do servidor ArgoCD e deixá-lo ser recriado.

Para mais informações sobre o módulo ArgoCD, consulte a respectiva página de documentação.