plugin/k8s_external: Resolve headless services (#5505)

*add option for resolving headless Services without external IPs in k8s_external

Signed-off-by: Tomas Kohout <tomas.kohout1995@gmail.com>
This commit is contained in:
TomasKohout 2022-08-30 20:59:27 +02:00 committed by GitHub
parent b218b56063
commit 6782b7fb42
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 491 additions and 81 deletions

View file

@ -103,7 +103,7 @@ func TestNsAddrs(t *testing.T) {
k.APIConn = &APIConnTest{}
k.localIPs = []net.IP{net.ParseIP("10.244.0.20")}
cdrs := k.nsAddrs(false, k.Zones[0])
cdrs := k.nsAddrs(false, false, k.Zones[0])
if len(cdrs) != 3 {
t.Fatalf("Expected 3 results, got %v", len(cdrs))
@ -137,13 +137,36 @@ func TestNsAddrs(t *testing.T) {
}
}
func TestNsAddrsExternalHeadless(t *testing.T) {
k := New([]string{"example.com."})
k.APIConn = &APIConnTest{}
k.localIPs = []net.IP{net.ParseIP("10.244.0.20")}
// there are only headless sevices
cdrs := k.nsAddrs(true, true, k.Zones[0])
if len(cdrs) != 1 {
t.Fatalf("Expected 0 results, got %v", cdrs)
}
cdr := cdrs[0]
expected := "10.244.0.20"
if cdr.(*dns.A).A.String() != expected {
t.Errorf("Expected A address to be %q, got %q", expected, cdr.(*dns.A).A.String())
}
expected = "10-244-0-20.hdls-dns-service.kube-system.example.com."
if cdr.Header().Name != expected {
t.Errorf("Expected record name to be %q, got %q", expected, cdr.Header().Name)
}
}
func TestNsAddrsExternal(t *testing.T) {
k := New([]string{"example.com."})
k.APIConn = &APIConnTest{}
k.localIPs = []net.IP{net.ParseIP("10.244.0.20")}
// initially no services have an external IP ...
cdrs := k.nsAddrs(true, k.Zones[0])
cdrs := k.nsAddrs(true, false, k.Zones[0])
if len(cdrs) != 0 {
t.Fatalf("Expected 0 results, got %v", len(cdrs))
@ -151,7 +174,7 @@ func TestNsAddrsExternal(t *testing.T) {
// Add an external IP to one of the services ...
svcs[0].ExternalIPs = []string{"1.2.3.4"}
cdrs = k.nsAddrs(true, k.Zones[0])
cdrs = k.nsAddrs(true, false, k.Zones[0])
if len(cdrs) != 1 {
t.Fatalf("Expected 1 results, got %v", len(cdrs))
@ -166,3 +189,31 @@ func TestNsAddrsExternal(t *testing.T) {
t.Errorf("Expected record name to be %q, got %q", expected, cdr.Header().Name)
}
}
func TestNsAddrsExternalWithPreexistingExternalIP(t *testing.T) {
k := New([]string{"example.com."})
k.APIConn = &APIConnTest{}
k.localIPs = []net.IP{net.ParseIP("10.244.0.20")}
svcs[0].ExternalIPs = []string{"1.2.3.4"}
// initially no services have an external IP ...
cdrs := k.nsAddrs(true, false, k.Zones[0])
if len(cdrs) != 1 {
t.Fatalf("Expected 1 results, got %v", len(cdrs))
}
if len(cdrs) != 1 {
t.Fatalf("Expected 1 results, got %v", len(cdrs))
}
cdr := cdrs[0]
expected := "1.2.3.4"
if cdr.(*dns.A).A.String() != expected {
t.Errorf("Expected A address to be %q, got %q", expected, cdr.(*dns.A).A.String())
}
expected = "dns-service.kube-system.example.com."
if cdr.Header().Name != expected {
t.Errorf("Expected record name to be %q, got %q", expected, cdr.Header().Name)
}
}