Skip to content

Commit b28c089

Browse files
mloiseleurtroll-os
authored andcommitted
feat(traefik)!: disable legacy listeners on traefik.containo.us API Group (kubernetes-sigs#5565)
* feat(traefik)!: disable legacy listeners on traefik.containo.us API Group * update docs accordingly * update test accordingly * type argument is infered * fix rebase
1 parent 46f5cad commit b28c089

File tree

6 files changed

+37
-47
lines changed

6 files changed

+37
-47
lines changed

docs/flags.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
| `--service-type-filter=SERVICE-TYPE-FILTER` | The service types to filter by. Specify multiple times for multiple filters to be applied. (optional, default: all, expected: ClusterIP, NodePort, LoadBalancer or ExternalName) |
5151
| `--source=source` | The resource types that are queried for endpoints; specify multiple times for multiple sources (required, options: service, ingress, node, pod, fake, connector, gateway-httproute, gateway-grpcroute, gateway-tlsroute, gateway-tcproute, gateway-udproute, istio-gateway, istio-virtualservice, cloudfoundry, contour-httpproxy, gloo-proxy, crd, empty, skipper-routegroup, openshift-route, ambassador-host, kong-tcpingress, f5-virtualserver, f5-transportserver, traefik-proxy) |
5252
| `--target-net-filter=TARGET-NET-FILTER` | Limit possible targets by a net filter; specify multiple times for multiple possible nets (optional) |
53-
| `--[no-]traefik-disable-legacy` | Disable listeners on Resources under the traefik.containo.us API Group |
53+
| `--[no-]traefik-enable-legacy` | Enable legacy listeners on Resources under the traefik.containo.us API Group |
5454
| `--[no-]traefik-disable-new` | Disable listeners on Resources under the traefik.io API Group |
5555
| `--provider=provider` | The DNS provider where the DNS records will be created (required, options: akamai, alibabacloud, aws, aws-sd, azure, azure-dns, azure-private-dns, civo, cloudflare, coredns, digitalocean, dnsimple, exoscale, gandi, godaddy, google, inmemory, linode, ns1, oci, ovh, pdns, pihole, plural, rfc2136, scaleway, skydns, transip, webhook) |
5656
| `--provider-cache-time=0s` | The time to cache the DNS provider record list requests. |

docs/sources/traefik-proxy.md

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,11 @@ kubectl delete -f externaldns.yaml
8282

8383
| Flag | Description |
8484
|--------------------------|----------------------------------------------------------|
85-
| --traefik-disable-legacy | Disable listeners on Resources under traefik.containo.us |
85+
| --traefik-enable-legacy | Enable listeners on Resources under traefik.containo.us |
8686
| --traefik-disable-new | Disable listeners on Resources under traefik.io |
8787

88-
### Disabling Resource Listeners
88+
### Resource Listeners
8989

90-
Traefik has deprecated the legacy API group, `traefik.containo.us`, in favor of `traefik.io`. By default the `traefik-proxy` source will listen for resources under both API groups; however, this may cause timeouts with the following message
90+
Traefik has deprecated the legacy API group, _traefik.containo.us_, in favor of _traefik.io_. By default the `traefik-proxy` source listen for resources under traefik.io API groups.
9191

92-
```sh
93-
FATA[0060] failed to sync traefik.io/v1alpha1, Resource=ingressroutes: context deadline exceeded
94-
```
95-
96-
In this case you can disable one or the other API groups with `--traefik-disable-new` or `--traefik-disable-legacy`
92+
If needed, you can enable legacy listener with `--traefik-enable-legacy` and also disable new listener with `--traefik-disable-new`.

pkg/apis/externaldns/types.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ type Config struct {
211211
WebhookProviderReadTimeout time.Duration
212212
WebhookProviderWriteTimeout time.Duration
213213
WebhookServer bool
214-
TraefikDisableLegacy bool
214+
TraefikEnableLegacy bool
215215
TraefikDisableNew bool
216216
NAT64Networks []string
217217
ExcludeUnschedulable bool
@@ -361,7 +361,7 @@ var defaultConfig = &Config{
361361
TLSCA: "",
362362
TLSClientCert: "",
363363
TLSClientCertKey: "",
364-
TraefikDisableLegacy: false,
364+
TraefikEnableLegacy: false,
365365
TraefikDisableNew: false,
366366
TransIPAccountName: "",
367367
TransIPPrivateKeyFile: "",
@@ -490,7 +490,7 @@ func App(cfg *Config) *kingpin.Application {
490490
app.Flag("service-type-filter", "The service types to filter by. Specify multiple times for multiple filters to be applied. (optional, default: all, expected: ClusterIP, NodePort, LoadBalancer or ExternalName)").Default(defaultConfig.ServiceTypeFilter...).StringsVar(&cfg.ServiceTypeFilter)
491491
app.Flag("source", "The resource types that are queried for endpoints; specify multiple times for multiple sources (required, options: service, ingress, node, pod, fake, connector, gateway-httproute, gateway-grpcroute, gateway-tlsroute, gateway-tcproute, gateway-udproute, istio-gateway, istio-virtualservice, cloudfoundry, contour-httpproxy, gloo-proxy, crd, empty, skipper-routegroup, openshift-route, ambassador-host, kong-tcpingress, f5-virtualserver, f5-transportserver, traefik-proxy)").Required().PlaceHolder("source").EnumsVar(&cfg.Sources, "service", "ingress", "node", "pod", "gateway-httproute", "gateway-grpcroute", "gateway-tlsroute", "gateway-tcproute", "gateway-udproute", "istio-gateway", "istio-virtualservice", "cloudfoundry", "contour-httpproxy", "gloo-proxy", "fake", "connector", "crd", "empty", "skipper-routegroup", "openshift-route", "ambassador-host", "kong-tcpingress", "f5-virtualserver", "f5-transportserver", "traefik-proxy")
492492
app.Flag("target-net-filter", "Limit possible targets by a net filter; specify multiple times for multiple possible nets (optional)").StringsVar(&cfg.TargetNetFilter)
493-
app.Flag("traefik-disable-legacy", "Disable listeners on Resources under the traefik.containo.us API Group").Default(strconv.FormatBool(defaultConfig.TraefikDisableLegacy)).BoolVar(&cfg.TraefikDisableLegacy)
493+
app.Flag("traefik-enable-legacy", "Enable legacy listeners on Resources under the traefik.containo.us API Group").Default(strconv.FormatBool(defaultConfig.TraefikEnableLegacy)).BoolVar(&cfg.TraefikEnableLegacy)
494494
app.Flag("traefik-disable-new", "Disable listeners on Resources under the traefik.io API Group").Default(strconv.FormatBool(defaultConfig.TraefikDisableNew)).BoolVar(&cfg.TraefikDisableNew)
495495

496496
// Flags related to providers

source/store.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ type Config struct {
9696
OCPRouterName string
9797
UpdateEvents bool
9898
ResolveLoadBalancerHostname bool
99-
TraefikDisableLegacy bool
99+
TraefikEnableLegacy bool
100100
TraefikDisableNew bool
101101
ExcludeUnschedulable bool
102102
ExposeInternalIPv6 bool
@@ -142,7 +142,7 @@ func NewSourceConfig(cfg *externaldns.Config) *Config {
142142
OCPRouterName: cfg.OCPRouterName,
143143
UpdateEvents: cfg.UpdateEvents,
144144
ResolveLoadBalancerHostname: cfg.ResolveServiceLoadBalancerHostname,
145-
TraefikDisableLegacy: cfg.TraefikDisableLegacy,
145+
TraefikEnableLegacy: cfg.TraefikEnableLegacy,
146146
TraefikDisableNew: cfg.TraefikDisableNew,
147147
ExcludeUnschedulable: cfg.ExcludeUnschedulable,
148148
ExposeInternalIPv6: cfg.ExposeInternalIPV6,
@@ -533,7 +533,7 @@ func buildTraefikProxySource(ctx context.Context, p ClientGenerator, cfg *Config
533533
if err != nil {
534534
return nil, err
535535
}
536-
return NewTraefikSource(ctx, dynamicClient, kubernetesClient, cfg.Namespace, cfg.AnnotationFilter, cfg.IgnoreHostnameAnnotation, cfg.TraefikDisableLegacy, cfg.TraefikDisableNew)
536+
return NewTraefikSource(ctx, dynamicClient, kubernetesClient, cfg.Namespace, cfg.AnnotationFilter, cfg.IgnoreHostnameAnnotation, cfg.TraefikEnableLegacy, cfg.TraefikDisableNew)
537537
}
538538

539539
func buildOpenShiftRouteSource(ctx context.Context, p ClientGenerator, cfg *Config) (Source, error) {

source/traefik_proxy.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ func NewTraefikSource(
100100
dynamicKubeClient dynamic.Interface,
101101
kubeClient kubernetes.Interface,
102102
namespace, annotationFilter string,
103-
ignoreHostnameAnnotation, disableLegacy, disableNew bool) (Source, error) {
103+
ignoreHostnameAnnotation, enableLegacy, disableNew bool,
104+
) (Source, error) {
104105
// Use shared informer to listen for add/update/delete of Host in the specified namespace.
105106
// Set resync period to 0, to prevent processing when nothing has changed.
106107
informerFactory := dynamicinformer.NewFilteredDynamicSharedInformerFactory(dynamicKubeClient, 0, namespace, nil)
@@ -128,7 +129,7 @@ func NewTraefikSource(
128129
},
129130
)
130131
}
131-
if !disableLegacy {
132+
if enableLegacy {
132133
oldIngressRouteInformer = informerFactory.ForResource(oldIngressRouteGVR)
133134
oldIngressRouteTcpInformer = informerFactory.ForResource(oldIngressRouteTCPGVR)
134135
oldIngressRouteUdpInformer = informerFactory.ForResource(oldIngressRouteUDPGVR)
@@ -232,7 +233,7 @@ func (ts *traefikSource) Endpoints(_ context.Context) ([]*endpoint.Endpoint, err
232233

233234
// ingressRouteEndpoints extracts endpoints from all IngressRoute objects
234235
func (ts *traefikSource) ingressRouteEndpoints() ([]*endpoint.Endpoint, error) {
235-
return extractEndpoints[IngressRoute](
236+
return extractEndpoints(
236237
ts.ingressRouteInformer.Lister(),
237238
ts.namespace,
238239
func(u *unstructured.Unstructured) (*IngressRoute, error) {
@@ -297,7 +298,7 @@ func (ts *traefikSource) ingressRouteTCPEndpoints() ([]*endpoint.Endpoint, error
297298

298299
// ingressRouteUDPEndpoints extracts endpoints from all IngressRouteUDP objects
299300
func (ts *traefikSource) ingressRouteUDPEndpoints() ([]*endpoint.Endpoint, error) {
300-
return extractEndpoints[IngressRouteUDP](
301+
return extractEndpoints(
301302
ts.ingressRouteUdpInformer.Lister(),
302303
ts.namespace,
303304
func(u *unstructured.Unstructured) (*IngressRouteUDP, error) {
@@ -311,7 +312,7 @@ func (ts *traefikSource) ingressRouteUDPEndpoints() ([]*endpoint.Endpoint, error
311312

312313
// oldIngressRouteEndpoints extracts endpoints from all IngressRoute objects
313314
func (ts *traefikSource) oldIngressRouteEndpoints() ([]*endpoint.Endpoint, error) {
314-
return extractEndpoints[IngressRoute](
315+
return extractEndpoints(
315316
ts.oldIngressRouteInformer.Lister(),
316317
ts.namespace,
317318
func(u *unstructured.Unstructured) (*IngressRoute, error) {
@@ -327,7 +328,7 @@ func (ts *traefikSource) oldIngressRouteEndpoints() ([]*endpoint.Endpoint, error
327328

328329
// oldIngressRouteTCPEndpoints extracts endpoints from all IngressRouteTCP objects
329330
func (ts *traefikSource) oldIngressRouteTCPEndpoints() ([]*endpoint.Endpoint, error) {
330-
return extractEndpoints[IngressRouteTCP](
331+
return extractEndpoints(
331332
ts.oldIngressRouteTcpInformer.Lister(),
332333
ts.namespace,
333334
func(u *unstructured.Unstructured) (*IngressRouteTCP, error) {
@@ -341,7 +342,7 @@ func (ts *traefikSource) oldIngressRouteTCPEndpoints() ([]*endpoint.Endpoint, er
341342

342343
// oldIngressRouteUDPEndpoints extracts endpoints from all IngressRouteUDP objects
343344
func (ts *traefikSource) oldIngressRouteUDPEndpoints() ([]*endpoint.Endpoint, error) {
344-
return extractEndpoints[IngressRouteUDP](
345+
return extractEndpoints(
345346
ts.oldIngressRouteUdpInformer.Lister(),
346347
ts.namespace,
347348
func(u *unstructured.Unstructured) (*IngressRouteUDP, error) {

source/traefik_proxy_test.go

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,6 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) {
330330
expected: nil,
331331
},
332332
} {
333-
334333
t.Run(ti.title, func(t *testing.T) {
335334
t.Parallel()
336335

@@ -624,7 +623,6 @@ func TestTraefikProxyIngressRouteTCPEndpoints(t *testing.T) {
624623
expected: nil,
625624
},
626625
} {
627-
628626
t.Run(ti.title, func(t *testing.T) {
629627
t.Parallel()
630628

@@ -766,7 +764,6 @@ func TestTraefikProxyIngressRouteUDPEndpoints(t *testing.T) {
766764
expected: nil,
767765
},
768766
} {
769-
770767
t.Run(ti.title, func(t *testing.T) {
771768
t.Parallel()
772769

@@ -1096,7 +1093,6 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) {
10961093
expected: nil,
10971094
},
10981095
} {
1099-
11001096
t.Run(ti.title, func(t *testing.T) {
11011097
t.Parallel()
11021098

@@ -1121,7 +1117,7 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) {
11211117
_, err = fakeDynamicClient.Resource(oldIngressRouteGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{})
11221118
assert.NoError(t, err)
11231119

1124-
source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, false, false)
1120+
source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, true, false)
11251121
assert.NoError(t, err)
11261122
assert.NotNil(t, source)
11271123

@@ -1390,7 +1386,6 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) {
13901386
expected: nil,
13911387
},
13921388
} {
1393-
13941389
t.Run(ti.title, func(t *testing.T) {
13951390
t.Parallel()
13961391

@@ -1415,7 +1410,7 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) {
14151410
_, err = fakeDynamicClient.Resource(oldIngressRouteTCPGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{})
14161411
assert.NoError(t, err)
14171412

1418-
source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, false, false)
1413+
source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, true, false)
14191414
assert.NoError(t, err)
14201415
assert.NotNil(t, source)
14211416

@@ -1532,7 +1527,6 @@ func TestTraefikProxyOldIngressRouteUDPEndpoints(t *testing.T) {
15321527
expected: nil,
15331528
},
15341529
} {
1535-
15361530
t.Run(ti.title, func(t *testing.T) {
15371531
t.Parallel()
15381532

@@ -1557,7 +1551,7 @@ func TestTraefikProxyOldIngressRouteUDPEndpoints(t *testing.T) {
15571551
_, err = fakeDynamicClient.Resource(oldIngressRouteUDPGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{})
15581552
assert.NoError(t, err)
15591553

1560-
source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, false, false)
1554+
source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, true, false)
15611555
assert.NoError(t, err)
15621556
assert.NotNil(t, source)
15631557

@@ -1574,15 +1568,15 @@ func TestTraefikProxyOldIngressRouteUDPEndpoints(t *testing.T) {
15741568
}
15751569
}
15761570

1577-
func TestTraefikAPIGroupDisableFlags(t *testing.T) {
1571+
func TestTraefikAPIGroupFlags(t *testing.T) {
15781572
t.Parallel()
15791573

15801574
for _, ti := range []struct {
15811575
title string
15821576
ingressRoute IngressRoute
15831577
gvr schema.GroupVersionResource
15841578
ignoreHostnameAnnotation bool
1585-
disableLegacy bool
1579+
enableLegacy bool
15861580
disableNew bool
15871581
expected []*endpoint.Endpoint
15881582
}{
@@ -1603,9 +1597,9 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) {
16031597
},
16041598
},
16051599
},
1606-
gvr: oldIngressRouteGVR,
1607-
disableLegacy: false,
1608-
disableNew: false,
1600+
gvr: oldIngressRouteGVR,
1601+
enableLegacy: true,
1602+
disableNew: false,
16091603
expected: []*endpoint.Endpoint{
16101604
{
16111605
DNSName: "a.example.com",
@@ -1636,9 +1630,9 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) {
16361630
},
16371631
},
16381632
},
1639-
gvr: oldIngressRouteGVR,
1640-
disableLegacy: true,
1641-
disableNew: false,
1633+
gvr: oldIngressRouteGVR,
1634+
enableLegacy: false,
1635+
disableNew: false,
16421636
},
16431637
{
16441638
title: "IngressRoute.traefik.io with the new API group enabled",
@@ -1657,9 +1651,9 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) {
16571651
},
16581652
},
16591653
},
1660-
gvr: ingressRouteGVR,
1661-
disableLegacy: false,
1662-
disableNew: false,
1654+
gvr: ingressRouteGVR,
1655+
enableLegacy: true,
1656+
disableNew: false,
16631657
expected: []*endpoint.Endpoint{
16641658
{
16651659
DNSName: "a.example.com",
@@ -1690,12 +1684,11 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) {
16901684
},
16911685
},
16921686
},
1693-
gvr: ingressRouteGVR,
1694-
disableLegacy: false,
1695-
disableNew: true,
1687+
gvr: ingressRouteGVR,
1688+
enableLegacy: true,
1689+
disableNew: true,
16961690
},
16971691
} {
1698-
16991692
t.Run(ti.title, func(t *testing.T) {
17001693
t.Parallel()
17011694

@@ -1720,7 +1713,7 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) {
17201713
_, err = fakeDynamicClient.Resource(ti.gvr).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{})
17211714
assert.NoError(t, err)
17221715

1723-
source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, ti.disableLegacy, ti.disableNew)
1716+
source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, ti.enableLegacy, ti.disableNew)
17241717
assert.NoError(t, err)
17251718
assert.NotNil(t, source)
17261719

0 commit comments

Comments
 (0)