diff --git a/source/node.go b/source/node.go index 348fcd47c..21bff5206 100644 --- a/source/node.go +++ b/source/node.go @@ -181,17 +181,18 @@ func (ns *nodeSource) nodeAddresses(node *v1.Node) ([]string, error) { for _, addr := range node.Status.Addresses { // IPv6 addresses are labeled as NodeInternalIP despite being usable externally as well. if addr.Type == v1.NodeInternalIP && suitableType(addr.Address) == endpoint.RecordTypeAAAA { - if ns.exposeInternalIPV6 { - addresses[v1.NodeInternalIP] = append(addresses[v1.NodeInternalIP], addr.Address) - ipv6Addresses = append(ipv6Addresses, addr.Address) - } + addresses[v1.NodeInternalIP] = append(addresses[v1.NodeInternalIP], addr.Address) + ipv6Addresses = append(ipv6Addresses, addr.Address) } else { addresses[addr.Type] = append(addresses[addr.Type], addr.Address) } } if len(addresses[v1.NodeExternalIP]) > 0 { - return append(addresses[v1.NodeExternalIP], ipv6Addresses...), nil + if ns.exposeInternalIPV6 { + return append(addresses[v1.NodeExternalIP], ipv6Addresses...), nil + } + return addresses[v1.NodeExternalIP], nil } if len(addresses[v1.NodeInternalIP]) > 0 { diff --git a/source/node_test.go b/source/node_test.go index 118775a78..a597082dc 100644 --- a/source/node_test.go +++ b/source/node_test.go @@ -223,6 +223,7 @@ func testNodeSourceEndpoints(t *testing.T) { nodeAddresses: []v1.NodeAddress{{Type: v1.NodeInternalIP, Address: "2.3.4.5"}, {Type: v1.NodeInternalIP, Address: "2001:DB8::9"}}, expected: []*endpoint.Endpoint{ {RecordType: "A", DNSName: "node1", Targets: endpoint.Targets{"2.3.4.5"}}, + {RecordType: "AAAA", DNSName: "node1", Targets: endpoint.Targets{"2001:DB8::9"}}, }, }, { @@ -437,12 +438,13 @@ func testNodeEndpointsWithIPv6(t *testing.T) { expectError bool }{ { - title: "node with only internal IPs with expose internal IP as false shouldn't return AAAA endpoints with internal IPs", + title: "node with only internal IPs should return internal IPvs irrespective of exposeInternalIPv6", nodeName: "node1", exposeInternalIPv6: false, nodeAddresses: []v1.NodeAddress{{Type: v1.NodeInternalIP, Address: "2.3.4.5"}, {Type: v1.NodeInternalIP, Address: "2001:DB8::9"}}, expected: []*endpoint.Endpoint{ {RecordType: "A", DNSName: "node1", Targets: endpoint.Targets{"2.3.4.5"}}, + {RecordType: "AAAA", DNSName: "node1", Targets: endpoint.Targets{"2001:DB8::9"}}, }, }, { @@ -458,6 +460,19 @@ func testNodeEndpointsWithIPv6(t *testing.T) { {RecordType: "AAAA", DNSName: "node1", Targets: endpoint.Targets{"2001:DB8::8"}}, }, }, + { + title: "node with both external and internal IPs should return internal IPv6 if exposeInternalIPv6 is true", + nodeName: "node1", + exposeInternalIPv6: true, + nodeAddresses: []v1.NodeAddress{ + {Type: v1.NodeExternalIP, Address: "1.2.3.5"}, + {Type: v1.NodeInternalIP, Address: "2001:DB8::9"}, + }, + expected: []*endpoint.Endpoint{ + {RecordType: "A", DNSName: "node1", Targets: endpoint.Targets{"1.2.3.5"}}, + {RecordType: "AAAA", DNSName: "node1", Targets: endpoint.Targets{"2001:DB8::9"}}, + }, + }, } { labelSelector := labels.Everything() if tc.labelSelector != "" {