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
- Provisione um cluster do Tanzu Kubernetes. Consulte o Fluxo de trabalho para clusters de Tanzu Kubernetes provisionamento.
- Conecte-se ao cluster Tanzu Kubernetes. Consulte o Conectar-se a um Tanzu Kubernetes cluster como um vCenter Single Sign-On usuário.
- Baixe o pacote TKG Extensions v1.3.1 para o host do cliente no qual você executa o kubectl.
- Pré-requisitos de instalação das extensões TKG no cluster Tanzu Kubernetes de destino.
- Instale a extensão Contour. Consulte Implantar e gerenciar a extensão TKG para a entrada do Contour .
- Instale a extensão Harbor. Consulte Implantar e gerenciar a extensão TKG para o Harbor Registry .
- Crie registros DNS no AWS Route 53, no Azure DNS, no Google DNS ou em um provedor de DNS dinâmico compatível com RFC 2136.
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.
- Verifique se você concluiu os pré-requisitos de extensão. Consulte o Pré-requisitos de extensão.
- 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
- 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. Executekubect get ns
para verificar. - 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
- 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
eazure-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
- 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 namespacetanzu-system-service-discovery
. Você pode verificar isso usando o comandokubectl get secrets -n tanzu-system-service-discovery
. - 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
. - 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 deReconciling
paraReconcile succeeded
quando o DNS externo for implantado com êxito. Se o status forReconcile failed
, consulte Solução de problemas de implantação. - 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.
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.
- 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
- Atualize os valores de dados de DNS externo em
external-dns-data-values.yaml
. Consulte o Configurar a extensão de DNS externo. - 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, alteresyncPeriod
emexternal-dns-extension
para um valor menor e aplique a extensão Contour usandokubectl apply -f external-dns-extension
. - 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. - 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.
- 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
- Exclua a extensão de DNS externo.
kubectl delete -f external-dns-extension.yaml
- Verifique se a extensão foi excluída.
kubectl get app contour -n tanzu-system-ingress
Resultado esperado: o aplicativo é
Not Found
. - 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.
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> | [] |