plugin/k8s_external: fix external nsAddrs when CoreDNS Service has no External IPs (#4891)

fix external nsAddrs; add tests;

Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
This commit is contained in:
Chris O'Haver 2022-03-07 12:18:23 -05:00 committed by GitHub
parent 7263808fe1
commit 3fe9d41a21
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 58 additions and 21 deletions

View file

@ -15,8 +15,9 @@ func isDefaultNS(name, zone string) bool {
// it returns a record for the local address of the machine we're running on.
func (k *Kubernetes) nsAddrs(external bool, zone string) []dns.RR {
var (
svcNames []string
svcIPs []net.IP
svcNames []string
svcIPs []net.IP
foundEndpoint bool
)
// Find the CoreDNS Endpoints
@ -25,6 +26,7 @@ func (k *Kubernetes) nsAddrs(external bool, zone string) []dns.RR {
// Collect IPs for all Services of the Endpoints
for _, endpoint := range endpoints {
foundEndpoint = true
svcs := k.APIConn.SvcIndex(endpoint.Index)
for _, svc := range svcs {
if external {
@ -54,8 +56,8 @@ func (k *Kubernetes) nsAddrs(external bool, zone string) []dns.RR {
}
}
// If no local IPs matched any endpoints, use the localIPs directly
if len(svcIPs) == 0 {
// If no CoreDNS endpoints were found, use the localIPs directly
if !foundEndpoint {
svcIPs = make([]net.IP, len(k.localIPs))
svcNames = make([]string, len(k.localIPs))
for i, localIP := range k.localIPs {