diff --git a/api/v1beta1/gslb_types.go b/api/v1beta1/gslb_types.go index 7d6b7f8d05..18fc3c074d 100644 --- a/api/v1beta1/gslb_types.go +++ b/api/v1beta1/gslb_types.go @@ -36,7 +36,7 @@ type Strategy struct { PrimaryGeoTag string `json:"primaryGeoTag,omitempty"` // Defines DNS record TTL in seconds DNSTtlSeconds int `json:"dnsTtlSeconds,omitempty"` - // Split brain TXT record expiration in seconds + // Split brain TXT record expiration in seconds. The field is deprecated and not used. SplitBrainThresholdSeconds int `json:"splitBrainThresholdSeconds,omitempty"` } diff --git a/chart/k8gb/README.md b/chart/k8gb/README.md index 94de77aeb1..393363b9a9 100644 --- a/chart/k8gb/README.md +++ b/chart/k8gb/README.md @@ -116,7 +116,6 @@ For Kubernetes `< 1.19` use this chart and k8gb in version `0.8.8` or lower. | k8gb.securityContext.runAsNonRoot | bool | `true` | For more options consult https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#securitycontext-v1-core | | k8gb.securityContext.runAsUser | int | `1000` | | | k8gb.serviceMonitor | object | `{"enabled":false}` | enable ServiceMonitor | -| k8gb.splitBrainCheck | bool | `false` | Enable SplitBrain check (Infoblox only) | | k8gb.validatingAdmissionPolicy | object | `{"enabled":false}` | enable validating admission policies | | ns1.enabled | bool | `false` | Enable NS1 provider | | ns1.ignoreSSL | bool | `false` | optional custom NS1 API endpoint for on-prem setups endpoint: https://api.nsone.net/v1/ | diff --git a/chart/k8gb/crd/k8gb.absa.oss_gslbs.yaml b/chart/k8gb/crd/k8gb.absa.oss_gslbs.yaml index fd62985d8a..3e1b700b3d 100644 --- a/chart/k8gb/crd/k8gb.absa.oss_gslbs.yaml +++ b/chart/k8gb/crd/k8gb.absa.oss_gslbs.yaml @@ -380,7 +380,8 @@ spec: description: Primary Geo Tag. Valid for failover strategy only type: string splitBrainThresholdSeconds: - description: Split brain TXT record expiration in seconds + description: Split brain TXT record expiration in seconds. The + field is deprecated and not used. type: integer type: description: Load balancing strategy type:(roundRobin|failover) diff --git a/chart/k8gb/templates/deployment.yaml b/chart/k8gb/templates/deployment.yaml index 5420f7b74b..bc5a30776d 100644 --- a/chart/k8gb/templates/deployment.yaml +++ b/chart/k8gb/templates/deployment.yaml @@ -132,8 +132,6 @@ spec: value: {{ quote .Values.k8gb.log.level }} - name: NO_COLOR value: "true" - - name: SPLIT_BRAIN_CHECK - value: {{ quote .Values.k8gb.splitBrainCheck }} - name: METRICS_ADDRESS value: {{ .Values.k8gb.metricsAddress }} {{- if .Values.tracing.enabled }} diff --git a/chart/k8gb/values.yaml b/chart/k8gb/values.yaml index 1a46bd48e2..efcf58dc09 100644 --- a/chart/k8gb/values.yaml +++ b/chart/k8gb/values.yaml @@ -41,8 +41,6 @@ k8gb: format: simple # log format (simple,json) # -- log level (panic,fatal,error,warn,info,debug,trace) level: info # log level (panic,fatal,error,warn,info,debug,trace) - # -- Enable SplitBrain check (Infoblox only) - splitBrainCheck: false # -- Metrics server address metricsAddress: "0.0.0.0:8080" securityContext: diff --git a/controllers/depresolver/depresolver.go b/controllers/depresolver/depresolver.go index d4b20f1fe7..7bc0eec22f 100644 --- a/controllers/depresolver/depresolver.go +++ b/controllers/depresolver/depresolver.go @@ -150,8 +150,6 @@ type Config struct { MetricsAddress string `env:"METRICS_ADDRESS, default=0.0.0.0:8080"` // extDNSEnabled hidden. EdgeDNSType defines all enabled Enabled types extDNSEnabled bool `env:"EXTDNS_ENABLED, default=false"` - // SplitBrainCheck flag decides whether split brain TXT records will be stored in edge DNS - SplitBrainCheck bool `env:"SPLIT_BRAIN_CHECK, default=false"` // TracingEnabled flag decides whether to use a real otlp tracer or a noop one TracingEnabled bool `env:"TRACING_ENABLED, default=false"` // TracingSamplingRatio how many traces should be kept and sent (1.0 - all, 0.0 - none) diff --git a/controllers/depresolver/depresolver_config.go b/controllers/depresolver/depresolver_config.go index f9b9a74a94..c76d2d3d9c 100644 --- a/controllers/depresolver/depresolver_config.go +++ b/controllers/depresolver/depresolver_config.go @@ -54,7 +54,6 @@ const ( LogLevelKey = "LOG_LEVEL" LogFormatKey = "LOG_FORMAT" LogNoColorKey = "NO_COLOR" - SplitBrainCheckKey = "SPLIT_BRAIN_CHECK" TracingEnabled = "TRACING_ENABLED" OtelExporterOtlpEndpoint = "OTEL_EXPORTER_OTLP_ENDPOINT" TracingSamplingRatio = "TRACING_SAMPLING_RATIO" @@ -383,18 +382,6 @@ func (c *Config) GetClusterNSName() string { return getNsName(c.ClusterGeoTag, c.DNSZone, c.EdgeDNSZone, c.EdgeDNSServers[0].Host) } -func (c *Config) GetExternalClusterHeartbeatFQDNs(gslbName string) (m map[string]string) { - m = make(map[string]string, len(c.ExtClustersGeoTags)) - for _, tag := range c.ExtClustersGeoTags { - m[tag] = getHeartbeatFQDN(gslbName, tag, c.EdgeDNSZone) - } - return -} - -func (c *Config) GetClusterHeartbeatFQDN(gslbName string) string { - return getHeartbeatFQDN(gslbName, c.ClusterGeoTag, c.EdgeDNSZone) -} - // getNsName returns NS for geo tag. // The values is combination of DNSZone, EdgeDNSZone and (Ext)ClusterGeoTag, see: // DNS_ZONE k8gb-test.gslb.cloud.example.com @@ -412,14 +399,3 @@ func getNsName(tag, dnsZone, edgeDNSZone, edgeDNSServer string) string { domainX := strings.ReplaceAll(d, ".", "-") return fmt.Sprintf("%s-%s-%s.%s", prefix, tag, domainX, edgeDNSZone) } - -// getHeartbeatFQDN returns heartbeat for geo tag. -// The values is combination of EdgeDNSZone and (Ext)ClusterGeoTag, and GSLB name see: -// EDGE_DNS_ZONE: cloud.example.com -// CLUSTER_GEOTAG: us -// gslb.Name: test-gslb-1 -// will generate "test-gslb-1-heartbeat-us.cloud.example.com" -// The function is private and expects only valid inputs. -func getHeartbeatFQDN(name, geoTag, edgeDNSZone string) string { - return fmt.Sprintf("%s-heartbeat-%s.%s", name, geoTag, edgeDNSZone) -} diff --git a/controllers/depresolver/depresolver_spec.go b/controllers/depresolver/depresolver_spec.go index daa10451e3..da206bedab 100644 --- a/controllers/depresolver/depresolver_spec.go +++ b/controllers/depresolver/depresolver_spec.go @@ -29,8 +29,7 @@ import ( ) var predefinedStrategy = k8gbv1beta1.Strategy{ - DNSTtlSeconds: 30, - SplitBrainThresholdSeconds: 300, + DNSTtlSeconds: 30, } // ResolveGslbSpec fills Gslb by spec values. It executes always, when gslb is initialised. @@ -44,9 +43,6 @@ func (dr *DependencyResolver) ResolveGslbSpec(ctx context.Context, gslb *k8gbv1b if gslb.Spec.Strategy.DNSTtlSeconds == 0 { gslb.Spec.Strategy.DNSTtlSeconds = predefinedStrategy.DNSTtlSeconds } - if gslb.Spec.Strategy.SplitBrainThresholdSeconds == 0 { - gslb.Spec.Strategy.SplitBrainThresholdSeconds = predefinedStrategy.SplitBrainThresholdSeconds - } dr.errorSpec = dr.validateSpec(gslb.Spec.Strategy) if dr.errorSpec == nil { dr.errorSpec = client.Update(ctx, gslb) @@ -61,10 +57,6 @@ func (dr *DependencyResolver) validateSpec(strategy k8gbv1beta1.Strategy) (err e if err != nil { return } - err = field("SplitBrainThresholdSeconds", strategy.SplitBrainThresholdSeconds).isHigherOrEqualToZero().err - if err != nil { - return - } err = field("Type", strategy.Type).isOneOf(RoundRobinStrategy, GeoStrategy, FailoverStrategy).err if err != nil { return diff --git a/controllers/depresolver/depresolver_test.go b/controllers/depresolver/depresolver_test.go index 907f4367d0..1959956629 100644 --- a/controllers/depresolver/depresolver_test.go +++ b/controllers/depresolver/depresolver_test.go @@ -70,7 +70,6 @@ var predefinedConfig = Config{ EdgeDNSZone: "example.com", DNSZone: defaultEdgeDNSZone, K8gbNamespace: "k8gb", - SplitBrainCheck: true, MetricsAddress: "0.0.0.0:8080", Infoblox: Infoblox{ "Infoblox.host.com", @@ -97,7 +96,6 @@ func TestResolveSpecWithFilledFields(t *testing.T) { // assert assert.NoError(t, err) assert.Equal(t, 35, gslb.Spec.Strategy.DNSTtlSeconds) - assert.Equal(t, 305, gslb.Spec.Strategy.SplitBrainThresholdSeconds) assert.False(t, len(gslb.Spec.Strategy.Weight) == 0) assert.Equal(t, 15, gslb.Spec.Strategy.Weight["za"]) assert.Equal(t, 25, gslb.Spec.Strategy.Weight["eu"]) @@ -114,22 +112,9 @@ func TestResolveSpecWithoutFields(t *testing.T) { // assert assert.NoError(t, err) assert.Equal(t, predefinedStrategy.DNSTtlSeconds, gslb.Spec.Strategy.DNSTtlSeconds) - assert.Equal(t, predefinedStrategy.SplitBrainThresholdSeconds, gslb.Spec.Strategy.SplitBrainThresholdSeconds) assert.True(t, len(gslb.Spec.Strategy.Weight) == 0) } -func TestResolveSpecWithZeroSplitBrain(t *testing.T) { - // arrange - cl, gslb := getTestContext("./testdata/filled_omitempty_with_zero_splitbrain.yaml") - resolver := NewDependencyResolver() - // act - err := resolver.ResolveGslbSpec(context.TODO(), gslb, cl) - // assert - assert.NoError(t, err) - assert.Equal(t, 35, gslb.Spec.Strategy.DNSTtlSeconds) - assert.Equal(t, predefinedStrategy.SplitBrainThresholdSeconds, gslb.Spec.Strategy.SplitBrainThresholdSeconds) -} - func TestResolveSpecWithEmptyFields(t *testing.T) { // arrange cl, gslb := getTestContext("./testdata/invalid_omitempty_empty.yaml") @@ -139,17 +124,6 @@ func TestResolveSpecWithEmptyFields(t *testing.T) { // assert assert.NoError(t, err) assert.Equal(t, predefinedStrategy.DNSTtlSeconds, gslb.Spec.Strategy.DNSTtlSeconds) - assert.Equal(t, predefinedStrategy.SplitBrainThresholdSeconds, gslb.Spec.Strategy.SplitBrainThresholdSeconds) -} - -func TestResolveSpecWithNegativeFields(t *testing.T) { - // arrange - cl, gslb := getTestContext("./testdata/invalid_omitempty_negative.yaml") - resolver := NewDependencyResolver() - // act - err := resolver.ResolveGslbSpec(context.TODO(), gslb, cl) - // assert - assert.Error(t, err) } func TestResolveSpecWithType(t *testing.T) { @@ -227,13 +201,11 @@ func TestSpecRunWhenChanged(t *testing.T) { resolver := NewDependencyResolver() // act err1 := resolver.ResolveGslbSpec(ctx, gslb, cl) - gslb.Spec.Strategy.SplitBrainThresholdSeconds = 0 err2 := resolver.ResolveGslbSpec(ctx, gslb, cl) // assert assert.NoError(t, err1) // err2 would not be empty assert.NoError(t, err2) - assert.Equal(t, predefinedStrategy.SplitBrainThresholdSeconds, gslb.Spec.Strategy.SplitBrainThresholdSeconds) assert.Equal(t, 35, gslb.Spec.Strategy.DNSTtlSeconds) } @@ -1184,63 +1156,6 @@ func TestResolveLoggerOutputWithInvalidValue(t *testing.T) { assert.Equal(t, NoFormat, config.Log.Format) } -func TestResolveConfigSplitBrainCheckEnabled(t *testing.T) { - // arrange - defer cleanup() - expected := predefinedConfig - expected.SplitBrainCheck = true - // act,assert - arrangeVariablesAndAssert(t, expected, assert.NoError) -} - -func TestHeartBeatWithMultipleExtClusterGeoTag(t *testing.T) { - const geoTag = "test-gslb-1" - // arrange - defer cleanup() - customConfig := predefinedConfig - customConfig.DNSZone = defaultDNSZone - customConfig.EdgeDNSZone = defaultEdgeDNSZone - customConfig.ClusterGeoTag = defaultClusterGeoTagUs1 - customConfig.ExtClustersGeoTags = []string{defaultClusterGeoTagUs2, defaultClusterGeoTagEu} - configureEnvVar(customConfig) - resolver := NewDependencyResolver() - - // act - config, err := resolver.ResolveOperatorConfig() - - // assert - assert.NoError(t, err) - assert.Len(t, config.GetExternalClusterHeartbeatFQDNs(geoTag), 2) - assert.Equal(t, "test-gslb-1-heartbeat-us-west-1.cloud.example.com", config.GetClusterHeartbeatFQDN(geoTag)) - - for k, v := range map[string]string{defaultClusterGeoTagUs2: "test-gslb-1-heartbeat-us-east-1.cloud.example.com", - defaultClusterGeoTagEu: "test-gslb-1-heartbeat-eu-central-1.cloud.example.com"} { - assert.Equal(t, config.GetExternalClusterHeartbeatFQDNs(geoTag)[k], v) - } -} - -func TestHeartBeatWithOneExtClusterGeoTag(t *testing.T) { - const geoTag = "test-gslb-1" - // arrange - defer cleanup() - customConfig := predefinedConfig - customConfig.DNSZone = defaultDNSZone - customConfig.EdgeDNSZone = defaultEdgeDNSZone - customConfig.ClusterGeoTag = defaultClusterGeoTagUs1 - customConfig.ExtClustersGeoTags = []string{defaultClusterGeoTagUs2} - configureEnvVar(customConfig) - resolver := NewDependencyResolver() - - // act - config, err := resolver.ResolveOperatorConfig() - - // assert - assert.NoError(t, err) - assert.Len(t, config.GetExternalClusterHeartbeatFQDNs(geoTag), 1) - assert.Equal(t, "test-gslb-1-heartbeat-us-west-1.cloud.example.com", config.GetClusterHeartbeatFQDN(geoTag)) - assert.Equal(t, config.GetExternalClusterHeartbeatFQDNs(geoTag)[defaultClusterGeoTagUs2], "test-gslb-1-heartbeat-us-east-1.cloud.example.com") -} - func TestNsServerNamesWithMultipleExtClusterGeoTag(t *testing.T) { // arrange defer cleanup() @@ -1526,7 +1441,7 @@ func cleanup() { for _, s := range []string{ReconcileRequeueSecondsKey, NSRecordTTLKey, ClusterGeoTagKey, ExtClustersGeoTagsKey, EdgeDNSZoneKey, DNSZoneKey, EdgeDNSServersKey, ExtDNSEnabledKey, InfobloxGridHostKey, InfobloxVersionKey, InfobloxPortKey, InfobloxUsernameKey, InfobloxPasswordKey, K8gbNamespaceKey, CoreDNSExposedKey, InfobloxHTTPRequestTimeoutKey, - InfobloxHTTPPoolConnectionsKey, LogLevelKey, LogFormatKey, LogNoColorKey, MetricsAddressKey, SplitBrainCheckKey, TracingEnabled, + InfobloxHTTPPoolConnectionsKey, LogLevelKey, LogFormatKey, LogNoColorKey, MetricsAddressKey, TracingEnabled, TracingSamplingRatio, OtelExporterOtlpEndpoint} { if os.Unsetenv(s) != nil { panic(fmt.Errorf("cleanup %s", s)) @@ -1558,7 +1473,6 @@ func configureEnvVar(config Config) { _ = os.Setenv(LogFormatKey, config.Log.Format.String()) _ = os.Setenv(LogNoColorKey, strconv.FormatBool(config.Log.NoColor)) _ = os.Setenv(MetricsAddressKey, config.MetricsAddress) - _ = os.Setenv(SplitBrainCheckKey, strconv.FormatBool(config.SplitBrainCheck)) _ = os.Setenv(TracingEnabled, strconv.FormatBool(config.TracingEnabled)) _ = os.Setenv(TracingSamplingRatio, strconv.FormatFloat(config.TracingSamplingRatio, 'f', 2, 64)) _ = os.Setenv(OtelExporterOtlpEndpoint, config.OtelExporterOtlpEndpoint) diff --git a/controllers/depresolver/testdata/filled_omitempty.yaml b/controllers/depresolver/testdata/filled_omitempty.yaml index 4a406c5fe7..51f4b3db8f 100644 --- a/controllers/depresolver/testdata/filled_omitempty.yaml +++ b/controllers/depresolver/testdata/filled_omitempty.yaml @@ -35,7 +35,6 @@ spec: name: http strategy: type: roundRobin # Use a round robin load balancing strategy, when deciding which downstream clusters to route clients too - splitBrainThresholdSeconds: 305 dnsTtlSeconds: 35 weight: us: 60 diff --git a/controllers/depresolver/testdata/filled_omitempty_with_zero_splitbrain.yaml b/controllers/depresolver/testdata/filled_omitempty_with_zero_splitbrain.yaml index e70a7cda24..ce4f2da78f 100644 --- a/controllers/depresolver/testdata/filled_omitempty_with_zero_splitbrain.yaml +++ b/controllers/depresolver/testdata/filled_omitempty_with_zero_splitbrain.yaml @@ -35,6 +35,5 @@ spec: name: http strategy: type: roundRobin # Use a round robin load balancing strategy, when deciding which downstream clusters to route clients too - splitBrainThresholdSeconds: 0 dnsTtlSeconds: 35 diff --git a/controllers/depresolver/testdata/invalid_omitempty_empty.yaml b/controllers/depresolver/testdata/invalid_omitempty_empty.yaml index 981b89b7e3..0347849b50 100644 --- a/controllers/depresolver/testdata/invalid_omitempty_empty.yaml +++ b/controllers/depresolver/testdata/invalid_omitempty_empty.yaml @@ -35,5 +35,4 @@ spec: name: http strategy: type: roundRobin # Use a round robin load balancing strategy, when deciding which downstream clusters to route clients too - splitBrainThresholdSeconds: weight: diff --git a/controllers/depresolver/testdata/invalid_omitempty_negative.yaml b/controllers/depresolver/testdata/invalid_omitempty_negative.yaml deleted file mode 100644 index 46731946e3..0000000000 --- a/controllers/depresolver/testdata/invalid_omitempty_negative.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: k8gb.absa.oss/v1beta1 -kind: Gslb -metadata: - name: test-gslb - namespace: test-gslb -spec: - ingress: - rules: - - host: notfound.cloud.example.com # This is the GSLB enabled host that clients would use - http: # This section mirrors the same structure as that of an Ingress resource and will be used verbatim when creating the corresponding Ingress resource that will match the GSLB host - paths: - - path: / - backend: - service: - name: non-existing-app # Gslb should reflect NotFound status - port: - name: http - - host: unhealthy.cloud.example.com - http: - paths: - - path: / - backend: - service: - name: unhealthy-app # Gslb should reflect Unhealthy status - port: - name: http - - host: roundrobin.cloud.example.com - http: - paths: - - path: / - backend: - service: - name: frontend-podinfo # Gslb should reflect Healthy status and create associated DNS records - port: - name: http - strategy: - type: roundRobin # Use a round robin load balancing strategy, when deciding which downstream clusters to route clients too - splitBrainThresholdSeconds: -1 - diff --git a/controllers/gslb_controller_reconciliation.go b/controllers/gslb_controller_reconciliation.go index b7cef38abb..0be180d4d1 100644 --- a/controllers/gslb_controller_reconciliation.go +++ b/controllers/gslb_controller_reconciliation.go @@ -56,14 +56,13 @@ type GslbReconciler struct { } const ( - gslbFinalizer = "k8gb.absa.oss/finalizer" - primaryGeoTagAnnotation = "k8gb.io/primary-geotag" - strategyAnnotation = "k8gb.io/strategy" - dnsTTLSecondsAnnotation = "k8gb.io/dns-ttl-seconds" - splitBrainThresholdSecondsAnnotation = "k8gb.io/splitbrain-threshold-seconds" + gslbFinalizer = "k8gb.absa.oss/finalizer" + primaryGeoTagAnnotation = "k8gb.io/primary-geotag" + strategyAnnotation = "k8gb.io/strategy" + dnsTTLSecondsAnnotation = "k8gb.io/dns-ttl-seconds" ) -var k8gbAnnotations = []string{strategyAnnotation, primaryGeoTagAnnotation, dnsTTLSecondsAnnotation, splitBrainThresholdSecondsAnnotation} +var k8gbAnnotations = []string{strategyAnnotation, primaryGeoTagAnnotation, dnsTTLSecondsAnnotation} var log = logging.Logger() diff --git a/controllers/gslb_controller_reconciliation_test.go b/controllers/gslb_controller_reconciliation_test.go index a7aff1e746..79980aee9b 100644 --- a/controllers/gslb_controller_reconciliation_test.go +++ b/controllers/gslb_controller_reconciliation_test.go @@ -49,7 +49,6 @@ import ( "go.uber.org/mock/gomock" corev1 "k8s.io/api/core/v1" netv1 "k8s.io/api/networking/v1" - "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -593,35 +592,6 @@ func TestCanGetExternalTargetsFromK8gbInAnotherLocation(t *testing.T) { }).RequireNoError(t) } -func TestCanCheckExternalGslbTXTRecordForValidityAndFailIfItIsExpired(t *testing.T) { - // arrange - utils.NewFakeDNS(fakeDNSSettings). - AddTXTRecord("test-gslb-heartbeat-eu.example.com.", oldEdgeTimestamp("10m")). - Start(). - RunTestFunc(func() { - settings := provideSettings(t, predefinedConfig) - // act - got := settings.assistant.InspectTXTThreshold("test-gslb-heartbeat-eu.example.com", time.Minute*5) - want := errors.NewResourceExpired("Split brain TXT record expired the time threshold: (5m0s)") - // assert - assert.Equal(t, want, got, "got:\n %s from TXT split brain check,\n\n want error:\n %v", got, want) - }).RequireNoError(t) -} - -func TestCanCheckExternalGslbTXTRecordForValidityAndPAssIfItISNotExpired(t *testing.T) { - // arrange - utils.NewFakeDNS(fakeDNSSettings). - AddTXTRecord("test-gslb-heartbeat-za.example.com.", oldEdgeTimestamp("3m")). - Start(). - RunTestFunc(func() { - settings := provideSettings(t, predefinedConfig) - // act - err2 := settings.assistant.InspectTXTThreshold("test-gslb-heartbeat-za.example.com", time.Minute*5) - // assert - assert.NoError(t, err2, "got:\n %s from TXT split brain check,\n\n want error:\n %v", err2, nil) - }).RequireNoError(t) -} - func TestReturnsOwnRecordsUsingFailoverStrategyWhenPrimary(t *testing.T) { serviceName := defaultPodinfoServiceName want := []*externaldns.Endpoint{ @@ -1495,14 +1465,6 @@ func provideSettings(t *testing.T, expected depresolver.Config) (settings testSe return settings } -func oldEdgeTimestamp(threshold string) string { - now := time.Now() - duration, _ := time.ParseDuration(threshold) - before := now.Add(-duration) - edgeTimestamp := fmt.Sprint(before.UTC().Format("2006-01-02T15:04:05")) - return edgeTimestamp -} - func TestMain(m *testing.M) { var exitCode int defer func() { diff --git a/controllers/gslb_controller_setup.go b/controllers/gslb_controller_setup.go index a62a3db8c6..943d365621 100644 --- a/controllers/gslb_controller_setup.go +++ b/controllers/gslb_controller_setup.go @@ -204,10 +204,6 @@ func (r *GslbReconciler) parseStrategy(annotations map[string]string, strategy s if result.DNSTtlSeconds, err = toInt(annotationKey, annotationValue); err != nil { return result, err } - case splitBrainThresholdSecondsAnnotation: - if result.SplitBrainThresholdSeconds, err = toInt(annotationKey, annotationValue); err != nil { - return result, err - } case primaryGeoTagAnnotation: result.PrimaryGeoTag = annotationValue } diff --git a/controllers/providers/assistant/assistant.go b/controllers/providers/assistant/assistant.go index faef7a2aba..004c56d05f 100644 --- a/controllers/providers/assistant/assistant.go +++ b/controllers/providers/assistant/assistant.go @@ -19,8 +19,6 @@ Generated by GoLic, for more details see: https://github.com/AbsaOSS/golic */ import ( - "time" - corev1 "k8s.io/api/core/v1" externaldns "sigs.k8s.io/external-dns/endpoint" ) @@ -36,7 +34,4 @@ type Assistant interface { SaveDNSEndpoint(namespace string, i *externaldns.DNSEndpoint) error // RemoveEndpoint removes endpoint RemoveEndpoint(endpointName string) error - // InspectTXTThreshold inspects fqdn TXT record from edgeDNSServer. If record doesn't exists or timestamp is greater than - // splitBrainThreshold the error is returned. In case fakeDNSEnabled is true, 127.0.0.1:7753 is used as edgeDNSServer - InspectTXTThreshold(fqdn string, splitBrainThreshold time.Duration) error } diff --git a/controllers/providers/assistant/gslb.go b/controllers/providers/assistant/gslb.go index c8a6dc63b4..53f854ac0f 100644 --- a/controllers/providers/assistant/gslb.go +++ b/controllers/providers/assistant/gslb.go @@ -22,8 +22,6 @@ import ( "context" coreerrors "errors" "fmt" - "strings" - "time" "github.com/k8gb-io/k8gb/controllers/utils" @@ -210,49 +208,6 @@ func (r *Gslb) RemoveEndpoint(endpointName string) error { return err } -// InspectTXTThreshold inspects fqdn TXT record from edgeDNSServer. If record doesn't exists or timestamp is greater than -// splitBrainThreshold the error is returned. -func (r *Gslb) InspectTXTThreshold(fqdn string, splitBrainThreshold time.Duration) error { - m := new(dns.Msg) - m.SetQuestion(dns.Fqdn(fqdn), dns.TypeTXT) - txt, err := utils.Exchange(m, r.edgeDNSServers) - if err != nil { - log.Info(). - Interface("edgeDNSServers", r.edgeDNSServers). - Err(err). - Msg("Contacting EdgeDNS server for TXT split brain record") - return err - } - if len(txt.Answer) > 0 { - if t, ok := txt.Answer[0].(*dns.TXT); ok { - timestamp := strings.Split(t.String(), "\t")[4] - timestamp = strings.Trim(timestamp, "\"") // Otherwise time.Parse() will miserably fail - timeFromTXT, err := time.Parse("2006-01-02T15:04:05", timestamp) - if err != nil { - log.Err(err). - Str("rawRecord", t.String()). - Str("rawTimestamp", timestamp). - Msg("Split brain TXT: can't parse timestamp") - return err - } - now := time.Now().UTC() - diff := now.Sub(timeFromTXT) - log.Debug(). - Str("rawRecord", t.String()). - Str("rawTimestamp", timestamp). - Time("parsed", timeFromTXT). - Str("diff", diff.String()). - Msg("Split brain TXT") - - if diff > splitBrainThreshold { - return errors.NewResourceExpired(fmt.Sprintf("Split brain TXT record expired the time threshold: (%s)", splitBrainThreshold)) - } - return nil - } - } - return errors.NewResourceExpired(fmt.Sprintf("Can't find split brain TXT record at EdgeDNS servers(%+v) and record %s ", r.edgeDNSServers, fqdn)) -} - func getARecords(msg *dns.Msg) []string { var ARecords []string for _, nsA := range msg.Answer { diff --git a/controllers/providers/dns/infoblox.go b/controllers/providers/dns/infoblox.go index fb1fede86c..37202bb70e 100644 --- a/controllers/providers/dns/infoblox.go +++ b/controllers/providers/dns/infoblox.go @@ -102,24 +102,6 @@ func (p *InfobloxProvider) CreateZoneDelegationForExternalDNS(gslb *k8gbv1beta1. sortZones(findZone.DelegateTo) currentList := p.sanitizeDelegateZone(delegateTo, findZone.DelegateTo) - - // Drop external records if they are stale - extClusterHeartbeatFQDNs := p.config.GetExternalClusterHeartbeatFQDNs(gslb.Name) - if p.config.SplitBrainCheck { - for extClusterGeoTag, nsServerNameExt := range p.config.GetExternalClusterNSNames() { - err = p.assistant.InspectTXTThreshold( - extClusterHeartbeatFQDNs[extClusterGeoTag], - time.Second*time.Duration(gslb.Spec.Strategy.SplitBrainThresholdSeconds)) - if err != nil { - log.Err(err). - Str("cluster", nsServerNameExt). - Msg("Got the error from TXT based checkAlive. External cluster doesn't " + - "look alive, filtering it out from delegated zone configuration.") - currentList = p.filterOutDelegateTo(currentList, nsServerNameExt) - } - } - } - if !reflect.DeepEqual(findZone.DelegateTo, currentList) { log.Info(). Interface("records", findZone.DelegateTo). @@ -151,13 +133,10 @@ func (p *InfobloxProvider) CreateZoneDelegationForExternalDNS(gslb *k8gbv1beta1. } m.InfobloxIncrementZoneUpdate(gslb) } - if p.config.SplitBrainCheck { - return p.saveHeartbeatTXTRecord(objMgr, gslb) - } return nil } -func (p *InfobloxProvider) Finalize(gslb *k8gbv1beta1.Gslb, _ client.Client) error { +func (p *InfobloxProvider) Finalize(_ *k8gbv1beta1.Gslb, _ client.Client) error { objMgr, err := p.client.GetObjectManager() if err != nil { return err @@ -182,24 +161,6 @@ func (p *InfobloxProvider) Finalize(gslb *k8gbv1beta1.Gslb, _ client.Client) err } } } - - heartbeatTXTName := p.config.GetClusterHeartbeatFQDN(gslb.Name) - findTXT, err := p.getTXTRecord(objMgr, heartbeatTXTName) - if err != nil { - return err - } - - if findTXT != nil { - if len(findTXT.Ref) > 0 { - log.Info(). - Str("TXTRecords", heartbeatTXTName). - Msg("Deleting split brain TXT record") - _, err := p.deleteTXTRecord(objMgr, findTXT.Ref) - if err != nil { - return err - } - } - } return nil } @@ -215,38 +176,6 @@ func (p *InfobloxProvider) String() string { return "Infoblox" } -func (p *InfobloxProvider) saveHeartbeatTXTRecord(objMgr *ibcl.ObjectManager, gslb *k8gbv1beta1.Gslb) (err error) { - var heartbeatTXTRecord *ibcl.RecordTXT - edgeTimestamp := fmt.Sprint(time.Now().UTC().Format("2006-01-02T15:04:05")) - heartbeatTXTName := p.config.GetClusterHeartbeatFQDN(gslb.Name) - heartbeatTXTRecord, err = p.getTXTRecord(objMgr, heartbeatTXTName) - if err != nil { - return - } - if heartbeatTXTRecord == nil { - log.Info(). - Str("HeartbeatTXTName", heartbeatTXTName). - Msg("Creating split brain TXT record") - //nolint:gosec // in the edge case there is possible integer overflow conversion int -> uint - _, err = p.createTXTRecord(objMgr, heartbeatTXTName, edgeTimestamp, uint(gslb.Spec.Strategy.DNSTtlSeconds)) - if err != nil { - m.InfobloxIncrementHeartbeatError(gslb) - return - } - } else { - log.Info(). - Str("HeartbeatTXTName", heartbeatTXTName). - Msg("Updating split brain TXT record") - _, err = p.updateTXTRecord(objMgr, heartbeatTXTName, edgeTimestamp) - if err != nil { - m.InfobloxIncrementHeartbeatError(gslb) - return - } - } - m.InfobloxIncrementHeartbeat(gslb) - return -} - func (p *InfobloxProvider) checkZoneDelegated(findZone *ibcl.ZoneDelegated) error { if findZone.Fqdn != p.config.DNSZone { err := fmt.Errorf("delegated zone returned from infoblox(%s) does not match requested gslb zone(%s)", findZone.Fqdn, p.config.DNSZone) @@ -293,31 +222,3 @@ func (p *InfobloxProvider) deleteZoneDelegated(o *ibcl.ObjectManager, fqdn strin m.InfobloxObserveRequestDuration(start, metrics.DeleteZoneDelegated, err == nil) return } - -func (p *InfobloxProvider) createTXTRecord(o *ibcl.ObjectManager, name string, text string, ttl uint) (res *ibcl.RecordTXT, err error) { - start := time.Now() - res, err = o.CreateTXTRecord(name, text, ttl, "default") - m.InfobloxObserveRequestDuration(start, metrics.CreateTXTRecord, err == nil) - return -} - -func (p *InfobloxProvider) getTXTRecord(o *ibcl.ObjectManager, name string) (res *ibcl.RecordTXT, err error) { - start := time.Now() - res, err = o.GetTXTRecord(name) - m.InfobloxObserveRequestDuration(start, metrics.GetTXTRecord, err == nil) - return -} - -func (p *InfobloxProvider) updateTXTRecord(o *ibcl.ObjectManager, name string, text string) (res *ibcl.RecordTXT, err error) { - start := time.Now() - res, err = o.UpdateTXTRecord(name, text) - m.InfobloxObserveRequestDuration(start, metrics.UpdateTXTRecord, err == nil) - return -} - -func (p *InfobloxProvider) deleteTXTRecord(o *ibcl.ObjectManager, name string) (res string, err error) { - start := time.Now() - res, err = o.DeleteTXTRecord(name) - m.InfobloxObserveRequestDuration(start, metrics.DeleteTXTRecord, err == nil) - return -} diff --git a/controllers/providers/dns/infoblox_test.go b/controllers/providers/dns/infoblox_test.go index 937001280a..9a720e75f7 100644 --- a/controllers/providers/dns/infoblox_test.go +++ b/controllers/providers/dns/infoblox_test.go @@ -181,57 +181,6 @@ func TestInfobloxCreateZoneDelegationForExternalDNS(t *testing.T) { assert.NoError(t, err) } -func TestInfobloxCreateZoneDelegationForExternalDNSWithSplitBrainEnabled(t *testing.T) { - // arrange - ctrl := gomock.NewController(t) - defer ctrl.Finish() - a := mocks.NewMockAssistant(ctrl) - cl := mocks.NewMockInfobloxClient(ctrl) - con := mocks.NewMockIBConnector(ctrl) - a.EXPECT().InspectTXTThreshold(gomock.Any(), gomock.Any()).Do(func(fqdn string, _ interface{}) { - require.Equal(t, "test-gslb-heartbeat-us-east-1.example.com", fqdn) - }).Return(nil).Times(1) - con.EXPECT().CreateObject(gomock.Any()).Return(ref, nil).AnyTimes() - con.EXPECT().UpdateObject(gomock.Any(), gomock.Any()).Return(ref, nil).Times(2) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) - cl.EXPECT().GetObjectManager().Return(ibclient.NewObjectManager(con, "k8gbclient", ""), nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{{Ref: ref}}). - Return(nil).Do(func(arg0 *ibclient.RecordTXT, _, _ interface{}) { - require.Equal(t, "test-gslb-heartbeat-us-west-1.example.com", arg0.Name) - }).AnyTimes() - config := defaultConfig - config.SplitBrainCheck = true - provider := NewInfobloxDNS(config, a, cl) - - // act - err := provider.CreateZoneDelegationForExternalDNS(defaultGslb) - // assert - assert.NoError(t, err) -} - -func TestInfobloxCreateZoneDelegationForExternalDNSWithSplitBrainEnabledCreatingNewHeartBeatRecord(t *testing.T) { - // arrange - ctrl := gomock.NewController(t) - defer ctrl.Finish() - a := mocks.NewMockAssistant(ctrl) - cl := mocks.NewMockInfobloxClient(ctrl) - con := mocks.NewMockIBConnector(ctrl) - a.EXPECT().InspectTXTThreshold(gomock.Any(), gomock.Any()).Return(nil).Times(1) - con.EXPECT().CreateObject(gomock.Any()).Return(ref, nil).AnyTimes() - con.EXPECT().UpdateObject(gomock.Any(), gomock.Any()).Return(ref, nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) - cl.EXPECT().GetObjectManager().Return(ibclient.NewObjectManager(con, "k8gbclient", ""), nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{}).Return(nil).AnyTimes() - config := defaultConfig - config.SplitBrainCheck = true - provider := NewInfobloxDNS(config, a, cl) - - // act - err := provider.CreateZoneDelegationForExternalDNS(defaultGslb) - // assert - assert.NoError(t, err) -} - func TestInfobloxFinalize(t *testing.T) { // arrange ctrl := gomock.NewController(t) @@ -244,10 +193,6 @@ func TestInfobloxFinalize(t *testing.T) { }).AnyTimes() con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}). Return(nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{{Ref: ref}}). - Return(nil).Do(func(arg0 *ibclient.RecordTXT, _, _ interface{}) { - require.Equal(t, "test-gslb-heartbeat-us-west-1.example.com", arg0.Name) - }).Times(1) cl.EXPECT().GetObjectManager().Return(ibclient.NewObjectManager(con, "k8gbclient", ""), nil).Times(1) config := defaultConfig provider := NewInfobloxDNS(config, a, cl) diff --git a/controllers/refresolver/testdata/gslb_ingress_embedded.yaml b/controllers/refresolver/testdata/gslb_ingress_embedded.yaml index 5099a7275f..b27e2e4a26 100644 --- a/controllers/refresolver/testdata/gslb_ingress_embedded.yaml +++ b/controllers/refresolver/testdata/gslb_ingress_embedded.yaml @@ -19,5 +19,4 @@ spec: name: http strategy: type: roundRobin - splitBrainThresholdSeconds: 300 dnsTtlSeconds: 30 diff --git a/controllers/refresolver/testdata/gslb_ingress_referenced.yaml b/controllers/refresolver/testdata/gslb_ingress_referenced.yaml index b54336f986..8a2100b1f2 100644 --- a/controllers/refresolver/testdata/gslb_ingress_referenced.yaml +++ b/controllers/refresolver/testdata/gslb_ingress_referenced.yaml @@ -11,5 +11,4 @@ spec: app: ingress-referenced strategy: type: roundRobin - splitBrainThresholdSeconds: 300 dnsTtlSeconds: 30 diff --git a/controllers/refresolver/testdata/gslb_ingress_referenced_and_embedded.yaml b/controllers/refresolver/testdata/gslb_ingress_referenced_and_embedded.yaml index 0455a70bbe..11040e329f 100644 --- a/controllers/refresolver/testdata/gslb_ingress_referenced_and_embedded.yaml +++ b/controllers/refresolver/testdata/gslb_ingress_referenced_and_embedded.yaml @@ -24,5 +24,4 @@ spec: name: http strategy: type: roundRobin - splitBrainThresholdSeconds: 300 dnsTtlSeconds: 30 diff --git a/controllers/refresolver/testdata/gslb_istio.yaml b/controllers/refresolver/testdata/gslb_istio.yaml index 0ca91933d5..dcac0b1ebc 100644 --- a/controllers/refresolver/testdata/gslb_istio.yaml +++ b/controllers/refresolver/testdata/gslb_istio.yaml @@ -11,5 +11,4 @@ spec: app: istio strategy: type: roundRobin - splitBrainThresholdSeconds: 300 dnsTtlSeconds: 30 diff --git a/controllers/utils/annotations_test.go b/controllers/utils/annotations_test.go index 4607d980c5..3e2ed8a0e4 100644 --- a/controllers/utils/annotations_test.go +++ b/controllers/utils/annotations_test.go @@ -26,7 +26,7 @@ import ( var a2 = map[string]string{"k8gb.io/primary-geotag": "eu", "k8gb.io/strategy": "failover"} var a1 = map[string]string{"field.cattle.io/publicEndpoints": "dummy"} -var annotations = []string{"k8gb.io/primary-geotag", "k8gb.io/strategy", "k8gb.io/dns-ttl-seconds", "k8gb.io/splitbrain-threshold-seconds"} +var annotations = []string{"k8gb.io/primary-geotag", "k8gb.io/strategy", "k8gb.io/dns-ttl-seconds"} func TestAddNewAnnotations(t *testing.T) { // arrange diff --git a/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_notfound_istio.yaml b/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_notfound_istio.yaml index 8fe4acc725..5d5db48a85 100644 --- a/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_notfound_istio.yaml +++ b/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_notfound_istio.yaml @@ -47,5 +47,4 @@ spec: app: notfound-istio strategy: type: roundRobin - splitBrainThresholdSeconds: 300 dnsTtlSeconds: 30 diff --git a/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_ingress.yaml b/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_ingress.yaml index e1f213ffb5..fdc0ca4902 100644 --- a/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_ingress.yaml +++ b/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_ingress.yaml @@ -39,5 +39,4 @@ spec: name: http strategy: type: roundRobin # Use a round robin load balancing strategy, when deciding which downstream clusters to route clients too - splitBrainThresholdSeconds: 300 # Threshold after which external cluster is filtered out from delegated zone when it doesn't look alive dnsTtlSeconds: 30 # TTL value for automatically created DNS records diff --git a/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_ingress_ref.yaml b/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_ingress_ref.yaml index b4ef6a8abc..0e4c31a8d9 100644 --- a/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_ingress_ref.yaml +++ b/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_ingress_ref.yaml @@ -52,5 +52,4 @@ spec: app: roundrobin-test-gslb strategy: type: roundRobin # Use a round robin load balancing strategy, when deciding which downstream clusters to route clients to - splitBrainThresholdSeconds: 300 # Threshold after which external cluster is filtered out from delegated zone when it doesn't look alive dnsTtlSeconds: 30 # TTL value for automatically created DNS records diff --git a/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_istio.yaml b/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_istio.yaml index 6c54d90dd0..e5c2ad8e90 100644 --- a/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_istio.yaml +++ b/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_roundrobin_istio.yaml @@ -47,5 +47,4 @@ spec: app: roundrobin-istio strategy: type: roundRobin - splitBrainThresholdSeconds: 300 dnsTtlSeconds: 30 diff --git a/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_unhealthy_istio.yaml b/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_unhealthy_istio.yaml index 1c13a5a7de..b3b5a80cf5 100644 --- a/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_unhealthy_istio.yaml +++ b/deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_unhealthy_istio.yaml @@ -47,5 +47,4 @@ spec: app: unhealthy-istio strategy: type: roundRobin - splitBrainThresholdSeconds: 300 dnsTtlSeconds: 30 diff --git a/docs/deploy_cloudflare.md b/docs/deploy_cloudflare.md index ba50f53461..e3b76e22a1 100644 --- a/docs/deploy_cloudflare.md +++ b/docs/deploy_cloudflare.md @@ -93,7 +93,6 @@ spec: strategy: dnsTtlSeconds: 60 # Minimum for non-Enterprise Cloudflare https://developers.cloudflare.com/dns/manage-dns-records/reference/ttl/ primaryGeoTag: eu - splitBrainThresholdSeconds: 300 type: failover ``` diff --git a/docs/examples/cloudflare/test-gslb-failover.yaml b/docs/examples/cloudflare/test-gslb-failover.yaml index f292d857fb..2bcbf57997 100644 --- a/docs/examples/cloudflare/test-gslb-failover.yaml +++ b/docs/examples/cloudflare/test-gslb-failover.yaml @@ -34,5 +34,4 @@ spec: strategy: dnsTtlSeconds: 60 # Minimum for non-Enterprise Cloudflare https://developers.cloudflare.com/dns/manage-dns-records/reference/ttl/ primaryGeoTag: eu - splitBrainThresholdSeconds: 300 type: failover diff --git a/docs/examples/route53/k8gb/gslb-roundrobin.yaml b/docs/examples/route53/k8gb/gslb-roundrobin.yaml index 6eab171515..b52a4f39ed 100644 --- a/docs/examples/route53/k8gb/gslb-roundrobin.yaml +++ b/docs/examples/route53/k8gb/gslb-roundrobin.yaml @@ -50,5 +50,4 @@ spec: app: test-gslb strategy: type: roundRobin # Use a round robin load balancing strategy, when deciding which downstream clusters to route clients too - splitBrainThresholdSeconds: 300 # Threshold after which external cluster is filtered out from delegated zone when it doesn't look alive dnsTtlSeconds: 30 # TTL value for automatically created DNS records diff --git a/docs/examples/windowsdns/k8gb/aks1-helm-values.yaml b/docs/examples/windowsdns/k8gb/aks1-helm-values.yaml index 898c2052ae..e95603545f 100644 --- a/docs/examples/windowsdns/k8gb/aks1-helm-values.yaml +++ b/docs/examples/windowsdns/k8gb/aks1-helm-values.yaml @@ -23,8 +23,6 @@ k8gb: format: json # log format (simple,json) # -- log level (panic,fatal,error,warn,info,debug,trace) level: info # log level (panic,fatal,error,warn,info,debug,trace) - # -- Enable SplitBrain check (Infoblox only) - splitBrainCheck: false # -- Metrics server address metricsAddress: "0.0.0.0:8080" securityContext: diff --git a/docs/examples/windowsdns/k8gb/aks2-helm-values.yaml b/docs/examples/windowsdns/k8gb/aks2-helm-values.yaml index 1f8a1176c4..b2c373141c 100644 --- a/docs/examples/windowsdns/k8gb/aks2-helm-values.yaml +++ b/docs/examples/windowsdns/k8gb/aks2-helm-values.yaml @@ -23,8 +23,6 @@ k8gb: format: json # log format (simple,json) # -- log level (panic,fatal,error,warn,info,debug,trace) level: info # log level (panic,fatal,error,warn,info,debug,trace) - # -- Enable SplitBrain check (Infoblox only) - splitBrainCheck: false # -- Metrics server address metricsAddress: "0.0.0.0:8080" securityContext: diff --git a/terratest/examples/failover-lifecycle.yaml b/terratest/examples/failover-lifecycle.yaml index 3a90a5cdf7..852540f7b5 100644 --- a/terratest/examples/failover-lifecycle.yaml +++ b/terratest/examples/failover-lifecycle.yaml @@ -20,5 +20,4 @@ spec: strategy: type: failover primaryGeoTag: "eu" - splitBrainThresholdSeconds: 600 dnsTtlSeconds: 5 diff --git a/terratest/examples/ingress-annotation-failover.yaml b/terratest/examples/ingress-annotation-failover.yaml index 5d1634b12f..8ef3519d29 100644 --- a/terratest/examples/ingress-annotation-failover.yaml +++ b/terratest/examples/ingress-annotation-failover.yaml @@ -5,7 +5,6 @@ metadata: k8gb.io/strategy: failover k8gb.io/primary-geotag: "eu" k8gb.io/dns-ttl-seconds: "5" - k8gb.io/splitbrain-threshold-seconds: "600" name: test-gslb-annotation-failover spec: ingressClassName: nginx diff --git a/terratest/test/k8gb_ingress_annotation_failover_test.go b/terratest/test/k8gb_ingress_annotation_failover_test.go index acebaf37f9..e9fea07d5b 100644 --- a/terratest/test/k8gb_ingress_annotation_failover_test.go +++ b/terratest/test/k8gb_ingress_annotation_failover_test.go @@ -67,7 +67,6 @@ func TestK8gbIngressAnnotationFailover(t *testing.T) { utils.AssertGslbSpec(t, options, "test-gslb-annotation-failover", ".spec.strategy.type", "failover") utils.AssertGslbSpec(t, options, "test-gslb-annotation-failover", ".spec.strategy.primaryGeoTag", settings.PrimaryGeoTag) utils.AssertGslbSpec(t, options, "test-gslb-annotation-failover", ".spec.strategy.dnsTtlSeconds", "5") - utils.AssertGslbSpec(t, options, "test-gslb-annotation-failover", ".spec.strategy.splitBrainThresholdSeconds", "600") t.Run("Broken ingress is not proccessed", func(t *testing.T) { utils.CreateGslb(t, options, settings, brokenResourcePath) diff --git a/terratest/test/k8gb_lifecycle_test.go b/terratest/test/k8gb_lifecycle_test.go index 01e978795a..7a8f6540c1 100644 --- a/terratest/test/k8gb_lifecycle_test.go +++ b/terratest/test/k8gb_lifecycle_test.go @@ -41,7 +41,6 @@ func TestK8gbRepeatedlyRecreatedFromIngress(t *testing.T) { const name = "test-gslb-failover-simple" assertStrategy := func(t *testing.T, options *k8s.KubectlOptions) { - utils.AssertGslbSpec(t, options, name, "spec.strategy.splitBrainThresholdSeconds", "300") utils.AssertGslbSpec(t, options, name, "spec.strategy.dnsTtlSeconds", "5") utils.AssertGslbSpec(t, options, name, "spec.strategy.primaryGeoTag", settings.PrimaryGeoTag) utils.AssertGslbSpec(t, options, name, "spec.strategy.type", "failover") @@ -103,7 +102,6 @@ func TestK8gbSpecKeepsStableAfterIngressUpdates(t *testing.T) { const name = "test-gslb-lifecycle" assertStrategy := func(t *testing.T, options *k8s.KubectlOptions) { - utils.AssertGslbSpec(t, options, name, "spec.strategy.splitBrainThresholdSeconds", "600") utils.AssertGslbSpec(t, options, name, "spec.strategy.dnsTtlSeconds", "5") utils.AssertGslbSpec(t, options, name, "spec.strategy.primaryGeoTag", settings.PrimaryGeoTag) utils.AssertGslbSpec(t, options, name, "spec.strategy.type", "failover")