Good news: no complicated etcd cluster needed. I figured out a way to get it to work with Technitium as my upstream server for *.k8s-dr.home. This replaces the excoredns pod I was running before, which handled such requests. I did have to setup a TSIG key and let external-dns do zone transfers, but that all works out anyways.
I also re-learned that I should be deploying the nginx ingress controller that's for the cloud, because the bare metal one (I assume) thinks you have some external load balancer. It was actually picking up one of the k8s node's IP address instead of something from the load balancer pool. Changing back to the cloud version made it work with the MetalLB IP address pool, and that's working.
With all of this homelab work lately, I should be able to get at least a couple of blog posts out of it. One about the new hardware for the lab, another for the new k8s setup and the fun of setting that up.
Ansible really saved my sanity through this whole process. I was able to recreate the cluster on demand in only a few minutes, including cloning templates, configuring them, and bootstrapping a 5-node cluster.