Merge pull request #12308 from olemarkus/lb-dns-no-precreate

Do not precreate dns record for api lbs
This commit is contained in:
Kubernetes Prow Robot 2021-09-12 05:18:06 -07:00 committed by GitHub
commit 2645e8410a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 67 additions and 31 deletions

View File

@ -245,18 +245,17 @@ func precreateDNS(ctx context.Context, cluster *kops.Cluster, cloud fi.Cloud) er
// buildPrecreateDNSHostnames returns the hostnames we should precreate
func buildPrecreateDNSHostnames(cluster *kops.Cluster) []string {
var dnsHostnames []string
dnsHostnames := []string{}
if cluster.Spec.MasterPublicName != "" {
hasAPILoadbalancer := cluster.Spec.API != nil && cluster.Spec.API.LoadBalancer != nil
useLBForInternalAPI := hasAPILoadbalancer && cluster.Spec.API.LoadBalancer.UseForInternalApi
if cluster.Spec.MasterPublicName != "" && !hasAPILoadbalancer {
dnsHostnames = append(dnsHostnames, cluster.Spec.MasterPublicName)
} else {
klog.Warningf("cannot pre-create MasterPublicName - not set")
}
if cluster.Spec.MasterInternalName != "" {
if cluster.Spec.MasterInternalName != "" && !useLBForInternalAPI {
dnsHostnames = append(dnsHostnames, cluster.Spec.MasterInternalName)
} else {
klog.Warningf("cannot pre-create MasterInternalName - not set")
}
if apimodel.UseKopsControllerForNodeBootstrap(cluster) {

View File

@ -25,40 +25,77 @@ import (
)
func TestPrecreateDNSNames(t *testing.T) {
cluster := &kops.Cluster{}
cluster.ObjectMeta.Name = "cluster1.example.com"
cluster.Spec.MasterPublicName = "api." + cluster.ObjectMeta.Name
cluster.Spec.MasterInternalName = "api.internal." + cluster.ObjectMeta.Name
cluster.Spec.EtcdClusters = []kops.EtcdClusterSpec{
grid := []struct {
cluster *kops.Cluster
expected []string
}{
{
Name: "main",
Members: []kops.EtcdMemberSpec{
{Name: "zone1"},
{Name: "zone2"},
{Name: "zone3"},
cluster: &kops.Cluster{},
expected: []string{
"api.cluster1.example.com",
"api.internal.cluster1.example.com",
},
},
{
Name: "events",
Members: []kops.EtcdMemberSpec{
{Name: "zonea"},
{Name: "zoneb"},
{Name: "zonec"},
cluster: &kops.Cluster{
Spec: kops.ClusterSpec{
API: &kops.AccessSpec{
LoadBalancer: &kops.LoadBalancerAccessSpec{},
},
},
},
expected: []string{
"api.internal.cluster1.example.com",
},
},
{
cluster: &kops.Cluster{
Spec: kops.ClusterSpec{
API: &kops.AccessSpec{
LoadBalancer: &kops.LoadBalancerAccessSpec{
UseForInternalApi: true,
},
},
},
},
expected: []string{},
},
}
actual := buildPrecreateDNSHostnames(cluster)
for _, g := range grid {
cluster := g.cluster
expected := []string{
"api.cluster1.example.com",
"api.internal.cluster1.example.com",
}
cluster.ObjectMeta.Name = "cluster1.example.com"
cluster.Spec.MasterPublicName = "api." + cluster.ObjectMeta.Name
cluster.Spec.MasterInternalName = "api.internal." + cluster.ObjectMeta.Name
cluster.Spec.EtcdClusters = []kops.EtcdClusterSpec{
{
Name: "main",
Members: []kops.EtcdMemberSpec{
{Name: "zone1"},
{Name: "zone2"},
{Name: "zone3"},
},
},
{
Name: "events",
Members: []kops.EtcdMemberSpec{
{Name: "zonea"},
{Name: "zoneb"},
{Name: "zonec"},
},
},
}
sort.Strings(actual)
sort.Strings(expected)
actual := buildPrecreateDNSHostnames(cluster)
if !reflect.DeepEqual(expected, actual) {
t.Fatalf("unexpected records. expected=%v actual=%v", expected, actual)
expected := g.expected
sort.Strings(actual)
sort.Strings(expected)
if !reflect.DeepEqual(expected, actual) {
t.Errorf("unexpected records. expected=%v actual=%v", expected, actual)
}
}
}