O DNS externo permite que você configure dinamicamente os registros de DNS com base nos serviços de balanceamento de carga do Kubernetes. Você pode implantar a extensão TKG para DNS externo para fornecer descoberta de serviço dinâmica para o seu cluster.

Pré-requisitos de extensão

Siga os seguintes requisitos antes de implantar a extensão TKG v1.3.1 para DNS externo.

Implantar a extensão de DNS externo

O Harbor requer uma zona DNS em um servidor DNS local, como BIND, ou em uma nuvem pública, como AWS Route53, Azure DNS ou Google CloudDNS. Depois de configurar o DNS, para registrar automaticamente os FQDNs do Harbor com um servidor DNS, instale a extensão de DNS externo.

  1. Verifique se você concluiu os pré-requisitos de extensão. Consulte o Pré-requisitos de extensão.
  2. Altere o diretório para onde você baixou os arquivos de extensão de DNS externo.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
  3. Crie o namespace e vários objetos de controle de acesso baseados em função para uso com a extensão de DNS externo.
    kubectl apply -f namespace-role.yaml

    Esse comando cria o namespace tanzu-system-service-discovery e os objetos RBAC associados. Execute kubect get ns para verificar.

  4. Crie um arquivo de valores de dados. O arquivo de valores de dados de exemplo fornece a configuração mínima necessária.

    Há exemplos de arquivos de valores de dados para AWS, Azure e um provedor de DNS dinâmico compatível com RFC 2136, cada um com e sem entrada de Contour. Escolha o arquivo de exemplo apropriado e copie-o.

    Por exemplo, se você estiver usando o AWS Route 53 com o Contour, execute o seguinte comando.
    cp external-dns-data-values-aws-with-contour.yaml.example external-dns-data-values-aws-with-contour.yaml
    Ou, se você estiver usando o Azure com o Contour, execute o seguinte comando.
    cp external-dns-data-values-azure-with-contour.yaml.example external-dns-data-values-azure-with-contour.yaml
  5. Configure os valores de dados de DNS externo.

    Por exemplo, abaixo está a configuração do DNS do Azure. Você fornece os valores domain-filter e azure-resource-group.

    #@data/values
    #@overlay/match-child-defaults missing_ok=True
    ---
    externalDns:
      image:
        repository: projects.registry.vmware.com/tkg
      deployment:
        #@overlay/replace
        args:
        - --provider=azure
        - --source=service
        - --source=ingress
        - --domain-filter=my-zone.example.org #! zone where services are deployed
        - --azure-resource-group=my-resource-group #! Azure resource group
        #@overlay/replace
        volumeMounts:
        - name: azure-config-file
          mountPath: /etc/kubernetes
          readOnly: true
        #@overlay/replace
        volumes:
        - name: azure-config-file
          secret:
            secretName: azure-config-file
  6. Crie um segredo genérico com o uso do arquivo de valores de dados que você preencheu.

    Por exemplo, o comando a seguir cria o segredo usando o arquivo de valores de dados DNS do Azure.

    kubectl create secret generic external-dns-data-values --from-file=values.yaml=external-dns-data-values-azure-with-contour.yaml -n tanzu-system-service-discovery

    Você deve ver que secret/external-dns-data-values created é criado no namespace tanzu-system-service-discovery. Você pode verificar isso usando o comando kubectl get secrets -n tanzu-system-service-discovery.

  7. Implante a extensão de DNS externo.
    kubectl apply -f external-dns-extension.yaml

    Se for bem-sucedido, você verá app.kappctrl.k14s.io/external-dns created.

  8. Verifique o status da implantação da extensão.
    kubectl get app external-dns -n tanzu-system-service-discovery
    O status do aplicativo deve mudar de Reconciling para Reconcile succeeded quando o DNS externo for implantado com êxito. Se o status for Reconcile failed, consulte Solução de problemas de implantação.
  9. Visualize o status detalhado.
    kubectl get app external-dns -n tanzu-system-service-discovery -o yaml

Solução de problemas de implantação

Se a reconciliação falhar, execute o comando kubectl get pods -A para exibir o status dos pods. Em condições normais, você verá que o pod external-dns-XXXXX é Running. Se a reconciliação falhar ou o status do pod for ImagePullBackOff ou ImagecRashLoopBackOff, isso significa que a imagem do contêiner não pôde ser extraída do repositório. Verifique a URL do repositório nos valores de dados e nos arquivos YAML de extensão e certifique-se de que eles sejam precisos.

Para verificar os logs do contêiner, execute os seguintes comandos, onde name-XXXX é o nome do pod exclusivo que você pode ver ao executar kubectl get pods -A:
kubectl logs pod/external-dns-XXXXX -c external-dns -n tanzu-system-service-discovery

Atualizar a extensão de DNS externo

Atualize a extensão de DNS externo que é implantada em um cluster do Tanzu Kubernetes.

  1. Obtenha valores de dados Contour do segredo.
    kubectl get secret external-dns-data-values -n tanzu-system-service-discovery -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > external-dns-data-values.yaml
  2. Atualize os valores de dados de DNS externo em external-dns-data-values.yaml. Consulte o Configurar a extensão de DNS externo.
  3. Atualize o segredo dos valores de dados do Contour.
    kubectl create secret generic external-dns-data-values --from-file=values.yaml=external-dns-data-values.yaml -n tanzu-system-service-discovery -o yaml --dry-run | kubectl replace -f-
    A extensão de DNS externo será reconciliada com os novos valores de dados.
    Observação: Por padrão, o kapp-controller sincronizará os aplicativos a cada 5 minutos. A atualização deve entrar em vigor em 5 minutos ou menos. Se você quiser que a atualização entre em vigor imediatamente, altere syncPeriod em external-dns-extension para um valor menor e aplique a extensão Contour usando kubectl apply -f external-dns-extension.
  4. Verifique o status da extensão.
    kubectl get app external-dns -n tanzu-system-service-disovery

    O status do aplicativo deve mudar para Reconcile Succeeded assim que for atualizado.

  5. Visualize o status detalhado e solucione problemas.
    kubectl get app external-dns -n tanzu-system-service-disovery -o yaml

Excluir a extensão de DNS externo

Exclua a extensão Contour de um cluster Tanzu Kubernetes.

Observação: Conclua as etapas em ordem. Não exclua o namespace de destino e os objetos de função antes que a extensão e o aplicativo sejam excluídos. A exclusão dos objetos de namespace e de função exclui a conta de serviço usada pelo kapp-controller. Se essa conta de serviço for excluída antes que o aplicativo e a extensão sejam excluídos, isso pode levar a erros do sistema.
  1. Altere o diretório para onde você baixou os arquivos de extensão.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
  2. Exclua a extensão de DNS externo.
    kubectl delete -f external-dns-extension.yaml
  3. Verifique se a extensão foi excluída.
    kubectl get app contour -n tanzu-system-ingress

    Resultado esperado: o aplicativo é Not Found.

  4. Exclua o namespace.
    Somente depois de ter confirmado que a extensão do Contour e o aplicativo foram totalmente excluídos é seguro excluir os objetos de namespace e de função.
    kubectl delete -f namespace-role.yaml
    Resultado esperado: o namespace onde a extensão é implantada e os objetos de controle de acesso baseados em função associados são excluídos.

Configurar a extensão de DNS externo

Você pode configurar a extensão de DNS externo com configurações personalizadas.

Configure os parâmetros de implantação para o seu provedor de DNS externo. Consulte o site do Kubernetes https://github.com/kubernetes-sigs/external-dns#running-externaldns para obter orientação adicional.
Tabela 1. Parâmetros de configuração da extensão Harbor
Parâmetro Descrição Tipo Padrão
externalDns.namespace Namespace onde external-dns será implantado cadeia de caracteres tanzu-system-service-discovery
externalDns.image.repository Repositório contendo imagem external-dns cadeia de caracteres projects.registry.vmware.com/tkg
externalDns.image.name Nome de external-dns cadeia de caracteres external-dns
externalDns.image.tag Tag de imagem ExternalDNS cadeia de caracteres v0.7.4_vmware.1
externalDns.image.pullPolicy Política de recebimento de imagem de DNS externo cadeia de caracteres IfNotPresent
externalDns.deployment.annotations Anotações na implantação external-dns map <string, string> {}
externalDns.deployment.args Argumentos transmitidos via linha de comando para external-dns list <string> [] (parâmetro obrigatório)
externalDns.deployment.env Variáveis de ambiente a serem transmitidas para external-dns list <string> []
externalDns.deployment.securityContext Contexto de segurança do contêiner external-dns SecurityContext {}
externalDns.deployment.volumeMounts Montagens de volume do contêiner external-dns list <VolumeMount> []
externalDns.deployment.volumes Volumes do pod external-dns list <Volume> []