Il DNS esterno consente di configurare dinamicamente i record DNS in base ai servizi con bilanciamento del carico di Kubernetes. È possibile distribuire l'estensione TKG per DNS esterno per fornire l'individuazione dinamica dei servizi per il cluster.
Prerequisiti dell'estensione
- Eseguire il provisioning di un cluster Tanzu Kubernetes. Vedere Workflow per il provisioning di cluster di Tanzu Kubernetes.
- Connettersi al cluster Tanzu Kubernetes. Vedere Connessione a un cluster Tanzu Kubernetes come utente vCenter Single Sign-On.
- Download del bundle delle estensioni TKG v1.3.1 nell'host client in cui viene eseguito kubectl.
- Installare i prerequisiti delle estensioni TKG nel cluster Tanzu Kubernetes di destinazione.
- Installare l'estensione Contour. Vedere Distribuzione e gestione dell'estensione TKG per Contour Ingress.
- Installare l'estensione Harbor. Vedere Distribuzione e gestione dell'estensione TKG per il registro Harbor.
- Creare record DNS in AWS Route 53, Azure DNS, Google DNS o un provider DNS dinamico compatibile con RFC 2136.
Distribuzione dell'estensione DNS esterna
Harbor richiede una zona DNS su un server DNS locale, come BIND, o su un cloud pubblico come AWS Route53, Azure DNS o Google CloudDNS. Una volta impostato il DNS, per registrare automaticamente FQDN Harbor con un server DNS, installare l'estensione DNS esterno.
- Verificare di aver completato i prerequisiti dell'estensione. Vedere Prerequisiti dell'estensione.
- Passare alla directory in cui sono stati scaricati i file di estensione DNS esterno.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
- Creare lo spazio dei nomi e diversi oggetti di controllo degli accessi in base al ruolo da utilizzare con l'estensione DNS esterno.
kubectl apply -f namespace-role.yaml
Questo comando crea lo spazio dei nomi
tanzu-system-service-discovery
e gli oggetti RBAC associati. Eseguirekubect get ns
per verificare. - Creare un file di valori dei dati. Il file dei valori dei dati di esempio fornisce la configurazione minima richiesta.
Sono presenti file di valori dei dati di esempio per AWS, Azure e un provider DNS dinamico compatibile con RFC 2136, ciascuno con e senza entrata di Contour. Scegliere il file di esempio appropriato e copiarlo.
Ad esempio, se si utilizza AWS Route 53 con Contour, eseguire il comando seguente.cp external-dns-data-values-aws-with-contour.yaml.example external-dns-data-values-aws-with-contour.yaml
Oppure, se si utilizza Azure con Contour, eseguire il comando seguente.cp external-dns-data-values-azure-with-contour.yaml.example external-dns-data-values-azure-with-contour.yaml
- Configurare i valori dei dati DNS esterno.
Ad esempio, di seguito è riportata la configurazione per DNS di Azure. È possibile fornire i valori
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
- Creare un segreto generico utilizzando il file dei valori dei dati compilato.
Ad esempio, il comando seguente crea il segreto utilizzando il file dei valori dei dati DNS di 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
Si dovrebbe vedere
secret/external-dns-data-values created
creato nello spazio dei nomitanzu-system-service-discovery
. È possibile verificarlo utilizzando il comandokubectl get secrets -n tanzu-system-service-discovery
. - Distribuire l'estensione DNS esterno.
kubectl apply -f external-dns-extension.yaml
Al completamento, viene visualizzato il messaggio
app.kappctrl.k14s.io/external-dns created
. - Controllare lo stato della distribuzione dell'estensione.
kubectl get app external-dns -n tanzu-system-service-discovery
Lo stato dell'app deve passare daReconciling
aReconcile succeeded
una volta che il DNS esterno è stato distribuito correttamente. Se lo stato èReconcile failed
, vedere Risoluzione dei problemi di distribuzione. - Visualizzare lo stato dettagliato.
kubectl get app external-dns -n tanzu-system-service-discovery -o yaml
Risoluzione dei problemi di distribuzione
Se la riconciliazione non riesce, eseguire il comando kubectl get pods -A
per visualizzare lo stato dei pod. In condizioni normali, il pod external-dns-XXXXX
è Running
. Se la riconciliazione non riesce o lo stato del pod è ImagePullBackOff
o ImagecRashLoopBackOff
, significa che non è possibile estrarre l'immagine del contenitore dal repository. Controllare l'URL del repository nei valori dei dati e nei file YAML dell'estensione e assicurarsi che siano corretti.
name-XXXX
è il nome univoco del pod che è possibile visualizzare quando si esegue
kubectl get pods -A
:
kubectl logs pod/external-dns-XXXXX -c external-dns -n tanzu-system-service-discovery
Aggiornamento dell'estensione DNS esterno
Aggiornare l'estensione DNS esterno distribuita in un cluster Tanzu Kubernetes.
- Recuperare i valori dei dati di Contour dal segreto.
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
- Aggiornare i valori dei dati DNS esterni in
external-dns-data-values.yaml
. Vedere Configurazione dell'estensione DNS esterno. - Aggiornare il segreto dei valori dei dati di 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-
L'estensione DNS esterno verrà riconciliata con i nuovi valori dei dati.Nota: Per impostazione predefinita, kapp-controller sincronizzerà le app ogni 5 minuti. L'aggiornamento dovrebbe essere applicato in 5 minuti al massimo. Se si desidera che l'aggiornamento venga applicato immediatamente, impostaresyncPeriod
inexternal-dns-extension
su un valore inferiore e applicare l'estensione Contour mediantekubectl apply -f external-dns-extension
. - Controllare lo stato dell'estensione.
kubectl get app external-dns -n tanzu-system-service-disovery
Lo stato dell'app dovrebbe passare a
Reconcile Succeeded
dopo l'aggiornamento. - Visualizzare lo stato dettagliato e risolvere i problemi.
kubectl get app external-dns -n tanzu-system-service-disovery -o yaml
Eliminazione dell'estensione DNS esterno
Eliminare l'estensione Contour da un cluster di Tanzu Kubernetes.
- Passare alla directory in cui sono stati scaricati i file di estensione.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/service-discovery/external-dns
- Eliminare l'estensione DNS esterno.
kubectl delete -f external-dns-extension.yaml
- Verificare che l'estensione venga eliminata.
kubectl get app contour -n tanzu-system-ingress
Risultato previsto: l'app è
Not Found
. - Eliminare lo spazio dei nomi.
Solo dopo aver confermato che l'estensione e l'app Contour sono stati completamente eliminati è possibile eliminare in modo sicuro lo spazio dei nomi e gli oggetti ruolo.
kubectl delete -f namespace-role.yaml
Risultato previsto: lo spazio dei nomi in cui viene distribuita l'estensione e gli oggetti di controllo degli accessi basati sul ruolo associati vengono eliminati.
Configurazione dell'estensione DNS esterno
È possibile configurare l'estensione DNS esterna con impostazioni personalizzate.
Parametro | Descrizione | Tipo | Predefinito |
---|---|---|---|
externalDns.namespace | Spazio dei nomi in cui verrà distribuito external-dns | stringa | tanzu-system-service-discovery |
externalDns.image.repository | Repository contenente l'immagine external-dns | stringa | projects.registry.vmware.com/tkg |
externalDns.image.name | Nome di external-dns | stringa | external-dns |
externalDns.image.tag | Tag immagine ExternalDNS | stringa | v0.7.4_vmware.1 |
externalDns.image.pullPolicy | Criterio di pull dell'immagine ExternalDNS | stringa | IfNotPresent |
externalDns.deployment.annotations | Annotazioni sulla distribuzione external-dns | mappa<string,string> | {} |
externalDns.deployment.args | Argomenti passati tramite riga di comando a external-dns | elenco<string> | [] (parametro obbligatorio) |
externalDns.deployment.env | Variabili di ambiente da passare a external-dns | elenco<string> | [] |
externalDns.deployment.securityContext | Contesto di protezione del contenitore external-dns | Securitycontext | {} |
externalDns.deployment.volumeMounts | Montaggio dei volumi del contenitore external-dns | elenco<VolumeMount> | [] |
externalDns.deployment.volumes | Volumi del pod external-dns | Elenco<Volume> | [] |