Skip to content

Commit f98e33f

Browse files
committed
add an excludeAddresses option in DNSPolicy
Signed-off-by: craig <[email protected]> rh-pre-commit.version: 2.2.0 rh-pre-commit.check-secrets: ENABLED fix lint add integration test for excludeAddresses
1 parent a43c40e commit f98e33f

13 files changed

+443
-39
lines changed

api/v1alpha1/dnspolicy_types.go

+12
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ type DNSPolicySpec struct {
6868
// +kubebuilder:validation:MaxItems=1
6969
// +kubebuilder:validation:MinItems=1
7070
ProviderRefs []dnsv1alpha1.ProviderRef `json:"providerRefs"`
71+
72+
// ExcludeAddresses is a list of addresses (either hostnames, CIDR or IPAddresses) that DNSPolicy should not use as values in the configured DNS provider records. The default is to allow all addresses configured in the Gateway DNSPolicy is targeting
73+
// +optional
74+
// +kubebuilder:validation:MaxItems=20
75+
ExcludeAddresses []string `json:"excludeAddresses,omitempty"`
7176
}
7277

7378
type LoadBalancingSpec struct {
@@ -251,6 +256,13 @@ func (p *DNSPolicy) WithProviderSecret(s corev1.Secret) *DNSPolicy {
251256
})
252257
}
253258

259+
//excludeAddresses
260+
261+
func (p *DNSPolicy) WithExcludeAddresses(excluded []string) *DNSPolicy {
262+
p.Spec.ExcludeAddresses = excluded
263+
return p
264+
}
265+
254266
//TargetRef
255267

256268
func (p *DNSPolicy) WithTargetGateway(gwName string) *DNSPolicy {

api/v1alpha1/zz_generated.deepcopy.go

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bundle/manifests/kuadrant-operator.clusterserviceversion.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ metadata:
106106
capabilities: Basic Install
107107
categories: Integration & Delivery
108108
containerImage: quay.io/kuadrant/kuadrant-operator:latest
109-
createdAt: "2024-09-17T13:54:51Z"
109+
createdAt: "2024-09-23T14:42:42Z"
110110
operators.operatorframework.io/builder: operator-sdk-v1.32.0
111111
operators.operatorframework.io/project_layout: go.kubebuilder.io/v3
112112
repository: https://github.com/Kuadrant/kuadrant-operator

bundle/manifests/kuadrant.io_dnspolicies.yaml

+9
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,15 @@ spec:
6666
spec:
6767
description: DNSPolicySpec defines the desired state of DNSPolicy
6868
properties:
69+
excludeAddresses:
70+
description: ExcludeAddresses is a list of addresses (either hostnames,
71+
CIDR or IPAddresses) that DNSPolicy should not use as values in
72+
the configured DNS provider records. The default is to allow all
73+
addresses configured in the Gateway DNSPolicy is targeting
74+
items:
75+
type: string
76+
maxItems: 20
77+
type: array
6978
healthCheck:
7079
description: |-
7180
HealthCheckSpec configures health checks in the DNS provider.

config/crd/bases/kuadrant.io_dnspolicies.yaml

+9
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ spec:
6565
spec:
6666
description: DNSPolicySpec defines the desired state of DNSPolicy
6767
properties:
68+
excludeAddresses:
69+
description: ExcludeAddresses is a list of addresses (either hostnames,
70+
CIDR or IPAddresses) that DNSPolicy should not use as values in
71+
the configured DNS provider records. The default is to allow all
72+
addresses configured in the Gateway DNSPolicy is targeting
73+
items:
74+
type: string
75+
maxItems: 20
76+
type: array
6877
healthCheck:
6978
description: |-
7079
HealthCheckSpec configures health checks in the DNS provider.

controllers/dnspolicy_controller.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func (r *DNSPolicyReconciler) reconcileResources(ctx context.Context, dnsPolicy
133133
}
134134

135135
if err = r.reconcileDNSRecords(ctx, dnsPolicy, gatewayDiffObj); err != nil {
136-
return fmt.Errorf("reconcile DNSRecords error %w", err)
136+
return fmt.Errorf("error reconciling DNSRecords %w", err)
137137
}
138138

139139
// set direct back ref - i.e. claim the target network object as taken asap

controllers/dnspolicy_dnsrecords.go

+15-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func (r *DNSPolicyReconciler) reconcileDNSRecords(ctx context.Context, dnsPolicy
3535
for _, gw := range append(gwDiffObj.GatewaysWithValidPolicyRef, gwDiffObj.GatewaysMissingPolicyRef...) {
3636
log.V(1).Info("reconcileDNSRecords: gateway with valid or missing policy ref", "key", gw.Key())
3737
if err := r.reconcileGatewayDNSRecords(ctx, gw.Gateway, dnsPolicy); err != nil {
38-
return fmt.Errorf("error reconciling dns records for gateway %v: %w", gw.Gateway.Name, err)
38+
return fmt.Errorf("reconciling dns records for gateway %v: error %w", gw.Gateway.Name, err)
3939
}
4040
}
4141
return nil
@@ -52,6 +52,12 @@ func (r *DNSPolicyReconciler) reconcileGatewayDNSRecords(ctx context.Context, gw
5252
return err
5353
}
5454

55+
//ensure only approved addresses are considered for DNS records
56+
if err := gatewayWrapper.SetValidStatusAddresses(dnsPolicy); err != nil {
57+
log.V(3).Info("error setting valid addresses based on DNSPolicy")
58+
return err
59+
}
60+
5561
if err := r.dnsHelper.removeDNSForDeletedListeners(ctx, gatewayWrapper.Gateway); err != nil {
5662
log.V(3).Info("error removing DNS for deleted listeners")
5763
return err
@@ -98,6 +104,14 @@ func (r *DNSPolicyReconciler) reconcileGatewayDNSRecords(ctx context.Context, gw
98104
return err
99105
}
100106

107+
if len(dnsRecord.Spec.Endpoints) == 0 {
108+
log.V(1).Info("no endpoint addresses for DNSRecord ", "removing any records for listener", listener)
109+
if err := r.dnsHelper.deleteDNSRecordForListener(ctx, gatewayWrapper, listener); client.IgnoreNotFound(err) != nil {
110+
return err
111+
}
112+
return fmt.Errorf("no valid addresses for DNSRecord endpoints. Check allowedAddresses")
113+
}
114+
101115
err = r.ReconcileResource(ctx, &kuadrantdnsv1alpha1.DNSRecord{}, dnsRecord, dnsRecordBasicMutator)
102116
if err != nil && !apierrors.IsAlreadyExists(err) {
103117
log.Error(err, "ReconcileResource failed to create/update DNSRecord resource")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: kuadrant.io/v1alpha1
2+
kind: DNSPolicy
3+
metadata:
4+
name: prod-web
5+
namespace: ${DNSPOLICY_NAMESPACE}
6+
spec:
7+
targetRef:
8+
name: prod-web-istio
9+
group: gateway.networking.k8s.io
10+
kind: Gateway
11+
providerRefs:
12+
- name: aws-credentials
13+
loadBalancing:
14+
weight: 120
15+
geo: EU
16+
defaultGeo: true
17+
excludeAddresses:
18+
- "10.89.0.0/16"
19+
- "some.local.domain"
20+
- "127.0.0.1"

go.mod

+10-10
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ require (
1515
github.com/kuadrant/limitador-operator v0.9.0
1616
github.com/kuadrant/policy-machinery v0.2.0
1717
github.com/martinlindhe/base36 v1.1.1
18-
github.com/onsi/ginkgo/v2 v2.17.2
19-
github.com/onsi/gomega v1.33.1
18+
github.com/onsi/ginkgo/v2 v2.20.2
19+
github.com/onsi/gomega v1.34.1
2020
github.com/prometheus/client_golang v1.19.1
2121
github.com/samber/lo v1.39.0
2222
go.uber.org/zap v1.27.0
@@ -86,7 +86,7 @@ require (
8686
github.com/google/btree v1.1.2 // indirect
8787
github.com/google/gnostic-models v0.6.8 // indirect
8888
github.com/google/gofuzz v1.2.0 // indirect
89-
github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 // indirect
89+
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 // indirect
9090
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
9191
github.com/gorilla/mux v1.8.1 // indirect
9292
github.com/gorilla/websocket v1.5.1 // indirect
@@ -153,16 +153,16 @@ require (
153153
go.opentelemetry.io/otel/trace v1.28.0 // indirect
154154
go.starlark.net v0.0.0-20240520160348-046347dcd104 // indirect
155155
go.uber.org/multierr v1.11.0 // indirect
156-
golang.org/x/crypto v0.25.0 // indirect
157-
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect
158-
golang.org/x/net v0.27.0 // indirect
156+
golang.org/x/crypto v0.26.0 // indirect
157+
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
158+
golang.org/x/net v0.28.0 // indirect
159159
golang.org/x/oauth2 v0.21.0 // indirect
160160
golang.org/x/sync v0.8.0 // indirect
161-
golang.org/x/sys v0.22.0 // indirect
162-
golang.org/x/term v0.22.0 // indirect
163-
golang.org/x/text v0.16.0 // indirect
161+
golang.org/x/sys v0.24.0 // indirect
162+
golang.org/x/term v0.23.0 // indirect
163+
golang.org/x/text v0.17.0 // indirect
164164
golang.org/x/time v0.5.0 // indirect
165-
golang.org/x/tools v0.22.0 // indirect
165+
golang.org/x/tools v0.24.0 // indirect
166166
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
167167
google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect
168168
google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf // indirect

go.sum

+24-26
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
184184
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
185185
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
186186
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
187-
github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg=
188-
github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw=
187+
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA=
188+
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
189189
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
190190
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
191191
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -251,8 +251,6 @@ github.com/kuadrant/dns-operator v0.0.0-20240809151102-e79ebbca8f70 h1:Jiq7dZWae
251251
github.com/kuadrant/dns-operator v0.0.0-20240809151102-e79ebbca8f70/go.mod h1:Aq4LYFwhBzQYUew71KjtWPKr+e0jzgraX10Ki8wIKCY=
252252
github.com/kuadrant/limitador-operator v0.9.0 h1:hTQ6CFPayf/sL7cIzwWjCoU8uTn6fzWdsJgKbDlnFts=
253253
github.com/kuadrant/limitador-operator v0.9.0/go.mod h1:DQOlg9qFOcnWPrwO529JRCMLLOEXJQxkmOes952S/Hw=
254-
github.com/kuadrant/policy-machinery v0.1.1 h1:8NPwL5U79Y+amCpJpyAJBUqWfntfDrce0JK31ueRMns=
255-
github.com/kuadrant/policy-machinery v0.1.1/go.mod h1:fbBqBlh7iyFdU6dRCzaPadypaI/BSHWKiUVl5kesrYY=
256254
github.com/kuadrant/policy-machinery v0.2.0 h1:6kACb+bdEwHXz2tvTs6dlLgvxFgFrowvGTZKMI9p0Qo=
257255
github.com/kuadrant/policy-machinery v0.2.0/go.mod h1:ZV4xS0CCxPgu/Xg6gz+YUaS9zqEXKOiAj33bZ67B6Lo=
258256
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
@@ -329,10 +327,10 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
329327
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
330328
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
331329
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
332-
github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g=
333-
github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc=
334-
github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
335-
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
330+
github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4=
331+
github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag=
332+
github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
333+
github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
336334
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
337335
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
338336
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
@@ -498,15 +496,15 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
498496
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
499497
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
500498
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
501-
golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
502-
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
503-
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY=
504-
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI=
499+
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
500+
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
501+
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
502+
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
505503
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
506504
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
507505
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
508-
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
509-
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
506+
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
507+
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
510508
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
511509
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
512510
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -516,8 +514,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
516514
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
517515
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
518516
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
519-
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
520-
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
517+
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
518+
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
521519
golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
522520
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
523521
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -526,8 +524,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
526524
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
527525
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
528526
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
529-
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
530-
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
527+
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
528+
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
531529
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
532530
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
533531
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -545,28 +543,28 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
545543
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
546544
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
547545
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
548-
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
549-
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
546+
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
547+
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
550548
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
551549
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
552550
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
553-
golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
554-
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
551+
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
552+
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
555553
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
556554
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
557555
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
558556
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
559-
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
560-
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
557+
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
558+
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
561559
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
562560
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
563561
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
564562
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
565563
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
566564
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
567565
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
568-
golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
569-
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
566+
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
567+
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
570568
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
571569
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
572570
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

pkg/multicluster/gateway_wrapper.go

+35
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ package multicluster
22

33
import (
44
"fmt"
5+
"net"
56
"strings"
67

78
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
89
gatewayapiv1 "sigs.k8s.io/gateway-api/apis/v1"
10+
11+
"github.com/kuadrant/kuadrant-operator/api/v1alpha1"
912
)
1013

1114
const (
@@ -24,6 +27,38 @@ func NewGatewayWrapper(g *gatewayapiv1.Gateway, clusterID string) *GatewayWrappe
2427
return &GatewayWrapper{Gateway: g, ClusterID: clusterID}
2528
}
2629

30+
func (g *GatewayWrapper) SetValidStatusAddresses(p *v1alpha1.DNSPolicy) error {
31+
newAddresses := []gatewayapiv1.GatewayStatusAddress{}
32+
for _, address := range g.Gateway.Status.Addresses {
33+
found := false
34+
for _, exclude := range p.Spec.ExcludeAddresses {
35+
//Only a CIDR will have / in the address so attempt to parse fail if not valid
36+
if strings.Contains(exclude, "/") {
37+
_, network, err := net.ParseCIDR(exclude)
38+
if err != nil {
39+
return fmt.Errorf("could not parse the CIDR from the excludeAddresses field %w", err)
40+
}
41+
ip := net.ParseIP(address.Value)
42+
// only check addresses that are actually IPs
43+
if ip != nil && network.Contains(ip) {
44+
found = true
45+
break
46+
}
47+
}
48+
if exclude == address.Value {
49+
found = true
50+
break
51+
}
52+
}
53+
if !found {
54+
newAddresses = append(newAddresses, address)
55+
}
56+
}
57+
// setting this in memory only wont be saved to actual gateway
58+
g.Status.Addresses = newAddresses
59+
return nil
60+
}
61+
2762
func isMultiClusterAddressType(addressType gatewayapiv1.AddressType) bool {
2863
return addressType == MultiClusterIPAddressType || addressType == MultiClusterHostnameAddressType
2964
}

0 commit comments

Comments
 (0)