Skip to content

Commit

Permalink
GH-545 restrict default geo to local
Browse files Browse the repository at this point in the history
  • Loading branch information
maksymvavilov committed Apr 25, 2024
1 parent 9654134 commit 50c36ef
Show file tree
Hide file tree
Showing 4 changed files with 212 additions and 196 deletions.
35 changes: 9 additions & 26 deletions api/v1alpha1/dnspolicy_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -348,31 +348,14 @@ func (p *DNSPolicy) WithHealthCheckFor(endpoint string, port *int, protocol stri

//LoadBalancing

func (p *DNSPolicy) WithLoadBalancingWeighted(lbWeighted LoadBalancingWeighted) *DNSPolicy {
if p.Spec.LoadBalancing == nil {
p.WithLoadBalancing(LoadBalancingSpec{})
}
p.Spec.LoadBalancing.Weighted = &lbWeighted
return p
}

func (p *DNSPolicy) WithLoadBalancingGeo(lbGeo LoadBalancingGeo) *DNSPolicy {
if p.Spec.LoadBalancing == nil {
p.Spec.LoadBalancing = &LoadBalancingSpec{}
}
p.Spec.LoadBalancing.Geo = &lbGeo
return p
}

func (p *DNSPolicy) WithLoadBalancingWeightedFor(defaultWeight Weight, custom []*CustomWeight) *DNSPolicy {
return p.WithLoadBalancingWeighted(LoadBalancingWeighted{
DefaultWeight: defaultWeight,
Custom: custom,
})
}

func (p *DNSPolicy) WithLoadBalancingGeoFor(defaultGeo string) *DNSPolicy {
return p.WithLoadBalancingGeo(LoadBalancingGeo{
DefaultGeo: defaultGeo,
func (p *DNSPolicy) WithLoadBalancingFor(defaultWeight Weight, custom []*CustomWeight, defaultGeo string) *DNSPolicy {
return p.WithLoadBalancing(LoadBalancingSpec{
Weighted: &LoadBalancingWeighted{
DefaultWeight: defaultWeight,
Custom: custom,
},
Geo: &LoadBalancingGeo{
DefaultGeo: defaultGeo,
},
})
}
26 changes: 9 additions & 17 deletions controllers/dns_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -244,28 +244,20 @@ func (dh *dnsHelper) getLoadBalancedEndpoints(mcgTarget *multicluster.GatewayTar
}
endpoints = append(endpoints, clusterEndpoints...)

//Create lbName CNAME (lb-a1b2.shop.example.com -> default.lb-a1b2.shop.example.com)
endpoint = createOrUpdateEndpoint(lbName, []string{geoLbName}, kuadrantdnsv1alpha1.CNAMERecordType, string(geoCode), DefaultCnameTTL, currentEndpoints)

//Deal with the default geo endpoint first
if geoCode.IsDefaultCode() {
defaultEndpoint = endpoint
// continue here as we will add the `defaultEndpoint` later
continue
} else if (geoCode == mcgTarget.GetDefaultGeo()) || defaultEndpoint == nil {
// Ensure that a `defaultEndpoint` is always set, but the expected default takes precedence
//Deal with the default geo endpoint
if geoCode == mcgTarget.GetDefaultGeo() {

Check warning on line 248 in controllers/dns_helper.go

View check run for this annotation

Codecov / codecov/patch

controllers/dns_helper.go#L248

Added line #L248 was not covered by tests
// Ensure that `defaultEndpoint` is set only if geo of the current cluster is desired default geo
defaultEndpoint = createOrUpdateEndpoint(lbName, []string{geoLbName}, kuadrantdnsv1alpha1.CNAMERecordType, "default", DefaultCnameTTL, currentEndpoints)
defaultEndpoint.SetProviderSpecificProperty(kuadrantdnsv1alpha1.ProviderSpecificGeoCode, string(v1alpha1.WildcardGeo))
endpoints = append(endpoints, defaultEndpoint)

Check warning on line 252 in controllers/dns_helper.go

View check run for this annotation

Codecov / codecov/patch

controllers/dns_helper.go#L251-L252

Added lines #L251 - L252 were not covered by tests
}

endpoint.SetProviderSpecificProperty(kuadrantdnsv1alpha1.ProviderSpecificGeoCode, string(geoCode))

endpoints = append(endpoints, endpoint)
//Create lbName CNAME (lb-a1b2.shop.example.com -> default.lb-a1b2.shop.example.com)
ep := createOrUpdateEndpoint(lbName, []string{geoLbName}, kuadrantdnsv1alpha1.CNAMERecordType, string(geoCode), DefaultCnameTTL, currentEndpoints)
ep.SetProviderSpecificProperty(kuadrantdnsv1alpha1.ProviderSpecificGeoCode, string(geoCode))
endpoints = append(endpoints, ep)

Check warning on line 257 in controllers/dns_helper.go

View check run for this annotation

Codecov / codecov/patch

controllers/dns_helper.go#L255-L257

Added lines #L255 - L257 were not covered by tests
}

if len(endpoints) > 0 {
// Add the `defaultEndpoint`, this should always be set by this point if `endpoints` isn't empty
defaultEndpoint.SetProviderSpecificProperty(kuadrantdnsv1alpha1.ProviderSpecificGeoCode, string(v1alpha1.WildcardGeo))
endpoints = append(endpoints, defaultEndpoint)
//Create gwListenerHost CNAME (shop.example.com -> lb-a1b2.shop.example.com)
endpoint = createOrUpdateEndpoint(hostname, []string{lbName}, kuadrantdnsv1alpha1.CNAMERecordType, "", DefaultCnameTTL, currentEndpoints)
endpoints = append(endpoints, endpoint)
Expand Down
Loading

0 comments on commit 50c36ef

Please sign in to comment.