VCF Automation 9 – Automating Microsoft DNS Entries for VMs via ExternalDNS Service in Supervisor

By | 6. February 2026

DNS entries are a critical component when provisioning virtual machines. To simplify this process, this blog post demonstrates how to leverage the ExternalDNS Service within the VCF 9 Supervisor to automate the creation of DNS records directly in Microsoft DNS.

Where in VM-Apps-Org this usually has been done by an extensibility workflow (e.g. Orchestrator), in All-Apps-Org this can be handled by a supervisor service like ExtDNS.

Prepare the Microsoft DNS Server:

Right-click on the zone to be used by ExternalDNS and select Properties

On the General tab, set Dynamic updates to Nonsecure and secure

On the Zone Transfers tab, check the box next to Allow zone transfers

Create the ExternalDNS Service in Supervisor:

In vCenter go to Supervisor Management > Services and click ADD

Follow the description on this web page, download the right ExternalDNS Supervisor Service and click

UPLOAD

Choose the downloaded Service YAML and click Open

Check the Service Details and click FINISH

On the new created Service click on ACTIONS and choose Manage Service

Choose the Supervisor and click NEXT

Define the Config for the ExternalDNS Service. Here is an example of a default configuration (the arguments must be adapted to your environment, e.g. the zone and filter must match the DNS zone in the Windows DNS server)

deployment:
  args:
  - --registry=txt
  - --txt-prefix=external-dns-
  - --txt-owner-id=k8s
  - --log-level=debug
  - --provider=rfc2136
  - --rfc2136-host=10.11.10.4
  - --rfc2136-port=53
  - --rfc2136-zone=k8s.rainpole.io
  - --rfc2136-insecure
  - --domain-filter=k8s.rainpole.io
  - --source=service
  - --source=ingress
  - --source=contour-httpproxy
namespace: svc-external-dns-domain-c10

Click FINISH

Note: With this configuration, DNS entries are only created. If you also want to update and delete them, you must add the following arguments:

  – –rfc2136-tsig-axfr
  – –policy=sync

Create a VM with a LoadBalancer and the Annotation for using ExternalDNS:

I use the Automation GUI to create the VM files. Log in to the All Apps Organisation and select the Build & Deploy tab. Select the Virtual Machine Service and click + CREATE VM

Choose Deploy from OVF und click NEXT

Define the VM Name, the VM Image and the VM Class and click NEXT

On the Advanced Settings go to the Load Balancer section an click ADD and choose New

Define a Name for the Load Balancer and create a new port (i choosed ssh). Click ADD and SAVE

On the Advanced Settings go to the Guest Customization section and click CREATE NEW USER. Define a Username / Password and enable Default Sudo. Click SAVE

Set the Enable Default User ans SSH Password Authentication to Enable and click NEXT

On the Network Configuration click NEXT but NOT DEPLOY VM, because we need an additional Annotation for ExternalDNS in the LoadBalancer config.

Since we cannot edit the YAML here, we have to download it. Click on the ARROW below the YAML to start the download

Extract the downloaded Zip file

Edit the Load Balancer YAML and add the Annotation with the hostname (FQDN). The DNS zone needs to match the rfc2136-zone and domain-filter parameter from the ExtDNS configuration file.

Deploy VM over CLI (kubectl apply):

Change to the CLI and use the vcf context use to switch to the right cluster and namespace (if you have not created a context yet you can have a look at this Blog under adding automation namespace context)

Use the kubectl apply to deploy the VM from the YAML files
kubectl apply -f <secret yaml> -f <vm yaml> -f <lb yaml>

There should now be a corresponding DNS entry in Microsoft DNS (extdns-test)

We can now also try to start an ssh connection via the DNS name

Click Accept on the Security Alert

Use the defined New User to log in

Delete VM over CLI (kubectl delete):

As outlined in the Service creation section, you can use additional arguments to ensure the DNS entry is automatically removed when the resource is deleted. I have updated my configuration as follows:

deployment:
  args:
  - --registry=txt
  - --txt-prefix=external-dns-
  - --txt-owner-id=k8s
  - --log-level=debug
  - --provider=rfc2136
  - --rfc2136-host=10.11.10.4
  - --rfc2136-port=53
  - --rfc2136-zone=k8s.rainpole.io
  - --rfc2136-insecure
  - --rfc2136-tsig-axfr
  - --domain-filter=k8s.rainpole.io
  - --policy=sync
  - --source=service
  - --source=ingress
  - --source=contour-httpproxy
namespace: svc-external-dns-domain-c10

It is also crucial to include the --txt-owner-id argument. This ID allows ExternalDNS to identify which records it ‘owns.’ By checking this ID, the service ensures it only manages and deletes its own entries, preventing accidental interference with DNS records created by other processes or administrators.

Use the kubectl delete to deploy the VM from the YAML files
kubectl delete -f <secret yaml> -f <vm yaml> -f <lb yaml>

The DNS entry should now be automatically deleted in Microsoft DNS

Deploy VM over Catalog in VCF Automation:

To deploy the VM from the VCF Automation GUI, we can create a Blueprint and make it available in the Catalog

In Automation change to the tab Build & Deploy and create a Blueprint under ContentHub > Blueprint Design. You can use the downloaded YAMLs as metadata for the Resources (with the Annotation)

After creating a Version and publish it you can find it under Build & Deploy > Catalog

Have Fun!

print
Christian Liebner
Category: VCF 9 VCF Automation VCF Core Tags: , , , ,

About Christian Liebner

Christian has joined VMware in January 2009 as Internal Systems Engineer. Since he previously worked for a distributor as a supporter and trainer and at VMware as a Specialist for vSphere, HA & DR and then for Cloud Management Solutions in various cloud projects, he has gained experience in datacenter, server, storage, networking, security and cloud management technologies. Today his primary focus is on automation and operation topics with integration into many surrounding solutions like containers, configuration management, directory services and others. He is responsible for the management components in the VMware Cloud Foundation (VCF) product family for enterprise customers in Germany.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.