El DNS externo permite configurar registros de DNS de forma dinámica en función de los servicios con carga equilibrada de Kubernetes. Puede implementar la extensión TKG para DNS externo a fin de proporcionar la detección dinámica de servicios para el clúster.
Requisitos previos de la extensión
- Aprovisionar un clúster de Tanzu Kubernetes. Consulte Flujo de trabajo para aprovisionar clústeres de Tanzu Kubernetes mediante la API v1alpha2 de TKGS.
- Conectarse al clúster de Tanzu Kubernetes. Consulte Conectarse a un clúster de Tanzu Kubernetes como usuario de vCenter Single Sign-On.
- Descargar el paquete de extensiones TKG v1.3.1 Al host cliente en el que se ejecuta kubectl.
- Instalar los requisitos previos de las extensiones TKG en el clúster de Tanzu Kubernetes de destino.
Otros requisitos
Las configuraciones de muestra proporcionadas con la extensión DNS externo incluyen ejemplos con y sin el controlador de entrada de Contour. Si utiliza Contour, instálelo antes de instalar la extensión DNS externo. Consulte Implementar y administrar la extensión TKG para la entrada de Contour.
La extensión DNS externo permite la detección dinámica de servicios. Un caso de uso común es con el registro de Harbor. Harbor requiere una zona de DNS configurada en un proveedor de DNS dinámico compatible con RFC 2136, como AWS Route53, Azure DNS, Google Cloud DNS o un servidor DNS local como BIND. Consulte Implementar y administrar la extensión TKG para el registro de Harbor.
Implementar la extensión DNS externo
Complete los siguientes pasos antes de instalar la extensión TKG v1.3.1 para DNS externo.
- Cambie el directorio en el que descargó los archivos de la extensión DNS externo.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
- Cree el espacio de nombres y varios objetos de control de acceso basado en funciones para usarlos con la extensión DNS externo.
kubectl apply -f namespace-role.yaml
Este comando crea el espacio de nombres
tanzu-system-service-discovery
y los objetos RBAC asociados. Ejecutekubect get ns
para comprobarlos. - Cree un archivo de valores de datos. El archivo de valores de datos de ejemplo proporciona la configuración mínima que se pide.
Hay archivos de valores de datos de ejemplo para AWS, Azure y un proveedor de DNS dinámico compatible con RFC 2136; cada uno con y sin entrada de Contour. Elija el archivo de ejemplo adecuado y cópielo.
Por ejemplo, si utiliza AWS Route 53 con Contour, ejecute el siguiente comando.cp external-dns-data-values-aws-with-contour.yaml.example external-dns-data-values-aws-with-contour.yaml
O bien, si utiliza Azure con Contour, ejecute el siguiente comando.cp external-dns-data-values-azure-with-contour.yaml.example external-dns-data-values-azure-with-contour.yaml
- Configure los valores de datos de DNS externos.
Por ejemplo, a continuación se muestra la configuración de DNS de Azure. Proporcione los valores de
domain-filter
yazure-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
- Cree un secreto genérico con el archivo de valores de datos que ha rellenado.
Por ejemplo, el siguiente comando crea el secreto mediante el archivo de valores de datos DNS de 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
Debería ver que
secret/external-dns-data-values created
se ha creado en el espacio de nombrestanzu-system-service-discovery
. Puede verificarlo con el comandokubectl get secrets -n tanzu-system-service-discovery
. - Implemente la extensión DNS externo.
kubectl apply -f external-dns-extension.yaml
Si todo es correcto, debería ver
app.kappctrl.k14s.io/external-dns created
. - Compruebe el estado de la implementación de la extensión.
kubectl get app external-dns -n tanzu-system-service-discovery
El estado de la aplicación debe cambiar deReconciling
aReconcile succeeded
una vez que DNS externo se implemente correctamente. Si el estado esReconcile failed
, consulte Solucionar problemas de la implementación. - Ver estado detallado.
kubectl get app external-dns -n tanzu-system-service-discovery -o yaml
Solucionar problemas de la implementación
Si se produce un error en la reconciliación, ejecute el comando kubectl get pods -A
para ver el estado de los pods. En condiciones normales, debería ver que el estado del pod external-dns-XXXXX
es Running
. Si se produce un error en la reconciliación o el estado del pod es ImagePullBackOff
o ImagecRashLoopBackOff
, quiere decir que no se pudo extraer la imagen del contenedor del repositorio. Compruebe la dirección URL del repositorio en los valores de datos y los archivos YAML de extensión, y asegúrese de que sean precisos.
name-XXXX
es el nombre único del pod que puede ver cuando ejecuta
kubectl get pods -A
:
kubectl logs pod/external-dns-XXXXX -c external-dns -n tanzu-system-service-discovery
Actualizar la extensión DNS externo
Actualice la extensión DNS externo que está implementada en el clúster de Tanzu Kubernetes.
- Obtenga los valores de datos de Contour del secreto.
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
- Actualice los valores de datos de DNS externo en
external-dns-data-values.yaml
. Consulte Configurar la extensión DNS externo. - Actualice el secreto de los valores de datos de 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-
La extensión DNS externo se conciliará con los nuevos valores de datos.Nota: De forma predeterminada, kapp-controller sincronizará las aplicaciones cada 5 minutos. La actualización debería tener efecto en 5 minutos o menos. Si desea que la actualización se aplique inmediatamente, cambie los valores desyncPeriod
enexternal-dns-extension
a un valor menor y aplique la extensión de Contour mediantekubectl apply -f external-dns-extension
. - Compruebe el estado de la extensión.
kubectl get app external-dns -n tanzu-system-service-disovery
El estado de la aplicación debe cambiar a
Reconcile Succeeded
una vez que se actualice. - Vea el estado detallado y solucione los problemas.
kubectl get app external-dns -n tanzu-system-service-disovery -o yaml
Eliminar la extensión DNS externo
Elimine la extensión DNS externo de un clúster de Tanzu Kubernetes.
- Cambie el directorio en el que descargó los archivos de la extensión.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
- Elimine la extensión DNS externo.
kubectl delete -f external-dns-extension.yaml
- Compruebe que la extensión se haya eliminado.
kubectl get app contour -n tanzu-system-ingress
Resultado esperado: el estado de la aplicación es
Not Found
. - Elimine el espacio de nombres.
Solo después de confirmar que la aplicación y la extensión Contour se han eliminado completamente se pueden eliminar de forma segura los objetos de función y espacio de nombres.
kubectl delete -f namespace-role.yaml
Resultado esperado: se elimina el espacio de nombres donde está implementada la extensión y los objetos de control de acceso basado en funciones asociados.
Configurar la extensión DNS externo
La extensión DNS externo se puede configurar con parámetros personalizados.
Parámetro | Descripción | Tipo | Predeterminado |
---|---|---|---|
externalDns.namespace | Espacio de nombres en el que se implementará el DNS externo | string | tanzu-system-service-discovery |
externalDns.image.repository | Repositorio que contiene la imagen de DNS externo | string | projects.registry.vmware.com/tkg |
externalDns.image.name | Nombre de external-dns | string | external-dns |
externalDns.image.tag | Etiqueta de la imagen de DNS externo | string | v0.7.4_vmware.1 |
externalDns.image.pullPolicy | Directiva de extracción de la imagen de DNS externo | string | IfNotPresent |
externalDns.deployment.annotations | Anotaciones en la implementación de external-dns | map<string,string> | {} |
externalDns.deployment.args | Argumentos transmitidos a través de la línea de comandos a external-dns | list<string> | [] (parámetro obligatorio) |
externalDns.deployment.env | Variables de entorno que se transferirán a external-dns | list<string> | [] |
externalDns.deployment.securityContext | Contexto de seguridad del contenedor de DNS externo | SecurityContext | {} |
externalDns.deployment.volumeMounts | Montajes de volumen del contenedor de external-dns | list<VolumeMount> | [] |
externalDns.deployment.volumes | Volúmenes del pod de DNS externo | list<Volume> | [] |