From 5a321b6fb6bc1b599dc6ace2a9490506fb759a67 Mon Sep 17 00:00:00 2001 From: Ivan Ka <5395690+ivankatliarchuk@users.noreply.github.com> Date: Wed, 25 Jun 2025 08:40:29 +0100 Subject: [PATCH] docs(traefik): public and private routing (#5559) * docs: added treafik public and private routing Signed-off-by: ivan katliarchuk docs: added treafik public and private routing Signed-off-by: ivan katliarchuk docs: added treafik public and private routing Signed-off-by: ivan katliarchuk docs: added treafik public and private routing Signed-off-by: ivan katliarchuk docs: added treafik public and private routing Signed-off-by: ivan katliarchuk docs: added treafik public and private routing Signed-off-by: ivan katliarchuk docs: added treafik public and private routing Signed-off-by: ivan katliarchuk docs: added treafik public and private routing Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> docs(traefik): public and private routing Signed-off-by: ivan katliarchuk * docs(traefik): public and private routing Signed-off-by: ivan katliarchuk * docs(traefik): public and private routing Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> * docs(traefik): public and private routing Signed-off-by: ivan katliarchuk * docs(traefik): public and private routing Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> --------- Signed-off-by: ivan katliarchuk Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> --- docs/flags.md | 2 +- .../traefik-proxy/ingress-route-default.yaml | 18 ++ .../ingress-route-public-private.yaml | 40 ++++ .../traefik-public-private-config.yaml | 16 ++ .../traefik-proxy/with-cluster-rbac.yaml | 59 ++++++ docs/snippets/traefik-proxy/without-rbac.yaml | 24 +++ docs/sources/traefik-proxy.md | 151 ++++---------- pkg/apis/externaldns/types.go | 2 +- source/traefik_proxy.go | 78 ++++---- source/traefik_proxy_test.go | 188 +++++++++--------- 10 files changed, 338 insertions(+), 240 deletions(-) create mode 100644 docs/snippets/traefik-proxy/ingress-route-default.yaml create mode 100644 docs/snippets/traefik-proxy/ingress-route-public-private.yaml create mode 100644 docs/snippets/traefik-proxy/traefik-public-private-config.yaml create mode 100644 docs/snippets/traefik-proxy/with-cluster-rbac.yaml create mode 100644 docs/snippets/traefik-proxy/without-rbac.yaml diff --git a/docs/flags.md b/docs/flags.md index b4f2d76c9..4dd73bc8c 100644 --- a/docs/flags.md +++ b/docs/flags.md @@ -38,7 +38,7 @@ | `--[no-]ignore-ingress-rules-spec` | Ignore the spec.rules section in Ingress resources (default: false) | | `--[no-]ignore-ingress-tls-spec` | Ignore the spec.tls section in Ingress resources (default: false) | | `--[no-]ignore-non-host-network-pods` | Ignore pods not running on host network when using pod source (default: false) | -| `--ingress-class=INGRESS-CLASS` | Require an Ingress to have this class name (defaults to any class; specify multiple times to allow more than one class) | +| `--ingress-class=INGRESS-CLASS` | Require an Ingress to have this class name; specify multiple times to allow more than one class (optional; defaults to any class) | | `--label-filter=""` | Filter resources queried for endpoints by label selector; currently supported by source types crd, gateway-httproute, gateway-grpcroute, gateway-tlsroute, gateway-tcproute, gateway-udproute, ingress, node, openshift-route, service and ambassador-host | | `--managed-record-types=A...` | Record types to manage; specify multiple times to include many; (default: A,AAAA,CNAME) (supported records: A, AAAA, CNAME, NS, SRV, TXT) | | `--namespace=""` | Limit resources queried for endpoints to a specific namespace (default: all namespaces) | diff --git a/docs/snippets/traefik-proxy/ingress-route-default.yaml b/docs/snippets/traefik-proxy/ingress-route-default.yaml new file mode 100644 index 000000000..ded35c78e --- /dev/null +++ b/docs/snippets/traefik-proxy/ingress-route-default.yaml @@ -0,0 +1,18 @@ +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: traefik-ingress + annotations: + external-dns.alpha.kubernetes.io/target: traefik.example.com + kubernetes.io/ingress.class: traefik +spec: + entryPoints: + - web + - websecure + routes: + - match: Host(`application.example.com`) + kind: Rule + services: + - name: service + namespace: namespace + port: port diff --git a/docs/snippets/traefik-proxy/ingress-route-public-private.yaml b/docs/snippets/traefik-proxy/ingress-route-public-private.yaml new file mode 100644 index 000000000..44c096085 --- /dev/null +++ b/docs/snippets/traefik-proxy/ingress-route-public-private.yaml @@ -0,0 +1,40 @@ +--- +apiVersion: traefik.io/v1 +kind: IngressRoute +metadata: + name: traefik-public-abc + annotations: + kubernetes.io/ingress.class: traefik-public +spec: + entryPoints: + - web + - websecure + routes: + - match: Host(`application.public.example.com`) + kind: Rule + services: + - name: service + namespace: namespace + port: port + tls: + secretName: traefik-tls-cert-public +--- +apiVersion: traefik.io/v1 +kind: IngressRoute +metadata: + name: traefik-private-abc + annotations: + kubernetes.io/ingress.class: traefik-private +spec: + entryPoints: + - web + - websecure + routes: + - match: Host(`application.private.tlc`) + kind: Rule + services: + - name: service + namespace: namespace + port: port + tls: + secretName: traefik-tls-cert-private diff --git a/docs/snippets/traefik-proxy/traefik-public-private-config.yaml b/docs/snippets/traefik-proxy/traefik-public-private-config.yaml new file mode 100644 index 000000000..91a99c1fd --- /dev/null +++ b/docs/snippets/traefik-proxy/traefik-public-private-config.yaml @@ -0,0 +1,16 @@ +--- +type: public +providers: + kubernetesCRD: + ingressClass: traefik-public + + kubernetesIngress: + ingressClass: traefik-public +--- +type: private +providers: + kubernetesCRD: + ingressClass: traefik-private + + kubernetesIngress: + ingressClass: traefik-private diff --git a/docs/snippets/traefik-proxy/with-cluster-rbac.yaml b/docs/snippets/traefik-proxy/with-cluster-rbac.yaml new file mode 100644 index 000000000..5568e51ba --- /dev/null +++ b/docs/snippets/traefik-proxy/with-cluster-rbac.yaml @@ -0,0 +1,59 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: external-dns +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: external-dns +rules: +- apiGroups: [""] + resources: ["services","endpoints","pods"] + verbs: ["get","watch","list"] +- apiGroups: [""] + resources: ["nodes"] + verbs: ["list","watch"] +- apiGroups: ["traefik.containo.us","traefik.io"] + resources: ["ingressroutes", "ingressroutetcps", "ingressrouteudps"] + verbs: ["get","watch","list"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: external-dns-viewer +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: external-dns +subjects: +- kind: ServiceAccount + name: external-dns + namespace: default +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: external-dns +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: external-dns + template: + metadata: + labels: + app: external-dns + spec: + serviceAccountName: external-dns + containers: + - name: external-dns + # update this to the desired external-dns version + image: registry.k8s.io/external-dns/external-dns:v0.17.0 + args: + - --source=traefik-proxy + - --provider=aws + - --registry=txt + - --txt-owner-id=my-identifier diff --git a/docs/snippets/traefik-proxy/without-rbac.yaml b/docs/snippets/traefik-proxy/without-rbac.yaml new file mode 100644 index 000000000..3cff71d13 --- /dev/null +++ b/docs/snippets/traefik-proxy/without-rbac.yaml @@ -0,0 +1,24 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: external-dns +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: external-dns + template: + metadata: + labels: + app: external-dns + spec: + containers: + - name: external-dns + # update this to the desired external-dns version + image: registry.k8s.io/external-dns/external-dns:v0.17.0 + args: + - --source=traefik-proxy + - --provider=aws + - --registry=txt + - --txt-owner-id=my-identifier diff --git a/docs/sources/traefik-proxy.md b/docs/sources/traefik-proxy.md index c842bc12d..20689a1ab 100644 --- a/docs/sources/traefik-proxy.md +++ b/docs/sources/traefik-proxy.md @@ -1,123 +1,29 @@ # Traefik Proxy Source +- [Traefik Documentation](https://doc.traefik.io/traefik/) +- [Traefik Helm Chart](https://github.com/traefik/traefik-helm-chart) + This tutorial describes how to configure ExternalDNS to use the Traefik Proxy source. It is meant to supplement the other provider-specific setup tutorials. ## Manifest (for clusters without RBAC enabled) ```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - containers: - - name: external-dns - # update this to the desired external-dns version - image: registry.k8s.io/external-dns/external-dns:v0.17.0 - args: - - --source=traefik-proxy - - --provider=aws - - --registry=txt - - --txt-owner-id=my-identifier +[[% include 'traefik-proxy/without-rbac.yaml' %]] ``` ## Manifest (for clusters with RBAC enabled) ```yaml -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-dns ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: external-dns -rules: -- apiGroups: [""] - resources: ["services","endpoints","pods"] - verbs: ["get","watch","list"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["list","watch"] -- apiGroups: ["traefik.containo.us","traefik.io"] - resources: ["ingressroutes", "ingressroutetcps", "ingressrouteudps"] - verbs: ["get","watch","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: external-dns-viewer -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: external-dns -subjects: -- kind: ServiceAccount - name: external-dns - namespace: default ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - serviceAccountName: external-dns - containers: - - name: external-dns - # update this to the desired external-dns version - image: registry.k8s.io/external-dns/external-dns:v0.17.0 - args: - - --source=traefik-proxy - - --provider=aws - - --registry=txt - - --txt-owner-id=my-identifier +[[% include 'traefik-proxy/with-cluster-rbac.yaml' %]] ``` ## Deploying a Traefik IngressRoute -Create a IngressRoute file called 'traefik-ingress.yaml' with the following contents: +Create an IngressRoute file called 'ingress-route-default' with the following contents: ```yaml -apiVersion: traefik.io/v1alpha1 -kind: IngressRoute -metadata: - name: traefik-ingress - annotations: - external-dns.alpha.kubernetes.io/target: traefik.example.com - kubernetes.io/ingress.class: traefik -spec: - entryPoints: - - web - - websecure - routes: - - match: Host(`application.example.com`) - kind: Rule - services: - - name: service - namespace: namespace - port: port +[[% include 'traefik-proxy/ingress-route-default.yaml' %]] ``` Note the annotation on the IngressRoute (`external-dns.alpha.kubernetes.io/target`); use the same hostname as the traefik DNS. @@ -127,30 +33,61 @@ ExternalDNS uses this annotation to determine what services should be registered Create the IngressRoute: ```sh -kubectl create -f traefik-ingress.yaml +kubectl create -f docs/snippets/traefik-proxy/ingress-route-default.yaml ``` Depending where you run your IngressRoute it can take a little while for ExternalDNS synchronize the DNS record. +## Support private and public routing + +To create a more robust and manageable Kubernetes environment, leverage separate Ingress classes to finely control public and private routing's security, performance, and operational policies. Similar approach could work in multi-tenant environments. + +For this we are going to need two instances of `traefik` (public and private) as well as two instances of `external-dns`. + +The `traefik` configuration should contain (for more detailed configured validate with the vendor) + +```yaml +[[% include 'traefik-proxy/traefik-public-private-config.yaml' %]] +``` + +Create a IngressRoutes files with the following contents: + +```yaml +[[% include 'traefik-proxy/ingress-route-public-private.yaml' %]] +``` + +And the arguments for `external-dns` instances should looks like + +```yaml +--- +args: + - --source=traefik-proxy + - --annotation-filter="kubernetes.io/ingress.class=traefik-public" +--- +args: + - --source=traefik-proxy + - --annotation-filter="kubernetes.io/ingress.class=traefik-private" +``` + ## Cleanup Now that we have verified that ExternalDNS will automatically manage Traefik DNS records, we can delete the tutorial's example: ```sh -kubectl delete -f traefik-ingress.yaml +kubectl delete -f docs/snippets/traefik-proxy/ingress-route-default.yaml kubectl delete -f externaldns.yaml ``` ## Additional Flags -| Flag | Description | -| --- | --- | +| Flag | Description | +|--------------------------|----------------------------------------------------------| | --traefik-disable-legacy | Disable listeners on Resources under traefik.containo.us | -| --traefik-disable-new | Disable listeners on Resources under traefik.io | +| --traefik-disable-new | Disable listeners on Resources under traefik.io | ### Disabling Resource Listeners -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 +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 ```sh FATA[0060] failed to sync traefik.io/v1alpha1, Resource=ingressroutes: context deadline exceeded diff --git a/pkg/apis/externaldns/types.go b/pkg/apis/externaldns/types.go index ea2ee135e..2929d0362 100644 --- a/pkg/apis/externaldns/types.go +++ b/pkg/apis/externaldns/types.go @@ -473,7 +473,7 @@ func App(cfg *Config) *kingpin.Application { app.Flag("ignore-ingress-rules-spec", "Ignore the spec.rules section in Ingress resources (default: false)").BoolVar(&cfg.IgnoreIngressRulesSpec) app.Flag("ignore-ingress-tls-spec", "Ignore the spec.tls section in Ingress resources (default: false)").BoolVar(&cfg.IgnoreIngressTLSSpec) app.Flag("ignore-non-host-network-pods", "Ignore pods not running on host network when using pod source (default: false)").BoolVar(&cfg.IgnoreNonHostNetworkPods) - app.Flag("ingress-class", "Require an Ingress to have this class name (defaults to any class; specify multiple times to allow more than one class)").StringsVar(&cfg.IngressClassNames) + app.Flag("ingress-class", "Require an Ingress to have this class name; specify multiple times to allow more than one class (optional; defaults to any class)").StringsVar(&cfg.IngressClassNames) app.Flag("label-filter", "Filter resources queried for endpoints by label selector; currently supported by source types crd, gateway-httproute, gateway-grpcroute, gateway-tlsroute, gateway-tcproute, gateway-udproute, ingress, node, openshift-route, service and ambassador-host").Default(defaultConfig.LabelFilter).StringVar(&cfg.LabelFilter) managedRecordTypesHelp := fmt.Sprintf("Record types to manage; specify multiple times to include many; (default: %s) (supported records: A, AAAA, CNAME, NS, SRV, TXT)", strings.Join(defaultConfig.ManagedDNSRecordTypes, ",")) app.Flag("managed-record-types", managedRecordTypesHelp).Default(defaultConfig.ManagedDNSRecordTypes...).StringsVar(&cfg.ManagedDNSRecordTypes) diff --git a/source/traefik_proxy.go b/source/traefik_proxy.go index 48fb2335d..792efec24 100644 --- a/source/traefik_proxy.go +++ b/source/traefik_proxy.go @@ -43,32 +43,32 @@ import ( ) var ( - ingressrouteGVR = schema.GroupVersionResource{ + ingressRouteGVR = schema.GroupVersionResource{ Group: "traefik.io", Version: "v1alpha1", Resource: "ingressroutes", } - ingressrouteTCPGVR = schema.GroupVersionResource{ + ingressRouteTCPGVR = schema.GroupVersionResource{ Group: "traefik.io", Version: "v1alpha1", Resource: "ingressroutetcps", } - ingressrouteUDPGVR = schema.GroupVersionResource{ + ingressRouteUDPGVR = schema.GroupVersionResource{ Group: "traefik.io", Version: "v1alpha1", Resource: "ingressrouteudps", } - oldIngressrouteGVR = schema.GroupVersionResource{ + oldIngressRouteGVR = schema.GroupVersionResource{ Group: "traefik.containo.us", Version: "v1alpha1", Resource: "ingressroutes", } - oldIngressrouteTCPGVR = schema.GroupVersionResource{ + oldIngressRouteTCPGVR = schema.GroupVersionResource{ Group: "traefik.containo.us", Version: "v1alpha1", Resource: "ingressroutetcps", } - oldIngressrouteUDPGVR = schema.GroupVersionResource{ + oldIngressRouteUDPGVR = schema.GroupVersionResource{ Group: "traefik.containo.us", Version: "v1alpha1", Resource: "ingressrouteudps", @@ -81,21 +81,26 @@ var ( ) type traefikSource struct { - annotationFilter string - ignoreHostnameAnnotation bool dynamicKubeClient dynamic.Interface + kubeClient kubernetes.Interface + annotationFilter string + namespace string + ignoreHostnameAnnotation bool ingressRouteInformer kubeinformers.GenericInformer ingressRouteTcpInformer kubeinformers.GenericInformer ingressRouteUdpInformer kubeinformers.GenericInformer oldIngressRouteInformer kubeinformers.GenericInformer oldIngressRouteTcpInformer kubeinformers.GenericInformer oldIngressRouteUdpInformer kubeinformers.GenericInformer - kubeClient kubernetes.Interface - namespace string unstructuredConverter *unstructuredConverter } -func NewTraefikSource(ctx context.Context, dynamicKubeClient dynamic.Interface, kubeClient kubernetes.Interface, namespace string, annotationFilter string, ignoreHostnameAnnotation bool, disableLegacy bool, disableNew bool) (Source, error) { +func NewTraefikSource( + ctx context.Context, + dynamicKubeClient dynamic.Interface, + kubeClient kubernetes.Interface, + namespace, annotationFilter string, + ignoreHostnameAnnotation, disableLegacy, disableNew bool) (Source, error) { // Use shared informer to listen for add/update/delete of Host in the specified namespace. // Set resync period to 0, to prevent processing when nothing has changed. informerFactory := dynamicinformer.NewFilteredDynamicSharedInformerFactory(dynamicKubeClient, 0, namespace, nil) @@ -104,40 +109,40 @@ func NewTraefikSource(ctx context.Context, dynamicKubeClient dynamic.Interface, // Add default resource event handlers to properly initialize informers. if !disableNew { - ingressRouteInformer = informerFactory.ForResource(ingressrouteGVR) - ingressRouteTcpInformer = informerFactory.ForResource(ingressrouteTCPGVR) - ingressRouteUdpInformer = informerFactory.ForResource(ingressrouteUDPGVR) - ingressRouteInformer.Informer().AddEventHandler( + ingressRouteInformer = informerFactory.ForResource(ingressRouteGVR) + ingressRouteTcpInformer = informerFactory.ForResource(ingressRouteTCPGVR) + ingressRouteUdpInformer = informerFactory.ForResource(ingressRouteUDPGVR) + _, _ = ingressRouteInformer.Informer().AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) {}, }, ) - ingressRouteTcpInformer.Informer().AddEventHandler( + _, _ = ingressRouteTcpInformer.Informer().AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) {}, }, ) - ingressRouteUdpInformer.Informer().AddEventHandler( + _, _ = ingressRouteUdpInformer.Informer().AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) {}, }, ) } if !disableLegacy { - oldIngressRouteInformer = informerFactory.ForResource(oldIngressrouteGVR) - oldIngressRouteTcpInformer = informerFactory.ForResource(oldIngressrouteTCPGVR) - oldIngressRouteUdpInformer = informerFactory.ForResource(oldIngressrouteUDPGVR) - oldIngressRouteInformer.Informer().AddEventHandler( + oldIngressRouteInformer = informerFactory.ForResource(oldIngressRouteGVR) + oldIngressRouteTcpInformer = informerFactory.ForResource(oldIngressRouteTCPGVR) + oldIngressRouteUdpInformer = informerFactory.ForResource(oldIngressRouteUDPGVR) + _, _ = oldIngressRouteInformer.Informer().AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) {}, }, ) - oldIngressRouteTcpInformer.Informer().AddEventHandler( + _, _ = oldIngressRouteTcpInformer.Informer().AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) {}, }, ) - oldIngressRouteUdpInformer.Informer().AddEventHandler( + _, _ = oldIngressRouteUdpInformer.Informer().AddEventHandler( cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) {}, }, @@ -460,24 +465,24 @@ func (ts *traefikSource) AddEventHandler(ctx context.Context, handler func()) { // https://github.com/kubernetes/kubernetes/issues/79610 log.Debug("Adding event handler for IngressRoute") if ts.ingressRouteInformer != nil { - ts.ingressRouteInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) + _, _ = ts.ingressRouteInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) } if ts.oldIngressRouteInformer != nil { - ts.oldIngressRouteInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) + _, _ = ts.oldIngressRouteInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) } log.Debug("Adding event handler for IngressRouteTCP") if ts.ingressRouteTcpInformer != nil { - ts.ingressRouteTcpInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) + _, _ = ts.ingressRouteTcpInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) } if ts.oldIngressRouteTcpInformer != nil { - ts.oldIngressRouteTcpInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) + _, _ = ts.oldIngressRouteTcpInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) } log.Debug("Adding event handler for IngressRouteUDP") if ts.ingressRouteUdpInformer != nil { - ts.ingressRouteUdpInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) + _, _ = ts.ingressRouteUdpInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) } if ts.oldIngressRouteUdpInformer != nil { - ts.oldIngressRouteUdpInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) + _, _ = ts.oldIngressRouteUdpInformer.Informer().AddEventHandler(eventHandlerFunc(handler)) } } @@ -488,12 +493,12 @@ func newTraefikUnstructuredConverter() (*unstructuredConverter, error) { } // Add the core types we need - uc.scheme.AddKnownTypes(ingressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - uc.scheme.AddKnownTypes(oldIngressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - uc.scheme.AddKnownTypes(ingressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - uc.scheme.AddKnownTypes(oldIngressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - uc.scheme.AddKnownTypes(ingressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) - uc.scheme.AddKnownTypes(oldIngressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + uc.scheme.AddKnownTypes(ingressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + uc.scheme.AddKnownTypes(oldIngressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + uc.scheme.AddKnownTypes(ingressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + uc.scheme.AddKnownTypes(oldIngressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + uc.scheme.AddKnownTypes(ingressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + uc.scheme.AddKnownTypes(oldIngressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) if err := scheme.AddToScheme(uc.scheme); err != nil { return nil, err } @@ -917,8 +922,7 @@ func filterResourcesByAnnotations[T any](resources []*T, annotationFilter string var filteredList []*T for _, resource := range resources { - annotations := getAnnotations(resource) - if selector.Matches(labels.Set(annotations)) { + if selector.Matches(labels.Set(getAnnotations(resource))) { filteredList = append(filteredList, resource) } } diff --git a/source/traefik_proxy_test.go b/source/traefik_proxy_test.go index 208783118..9e345208a 100644 --- a/source/traefik_proxy_test.go +++ b/source/traefik_proxy_test.go @@ -55,7 +55,7 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) { title: "IngressRoute with hostname annotation", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteGVR.GroupVersion().String(), + APIVersion: ingressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -85,7 +85,7 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) { title: "IngressRoute with host rule", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteGVR.GroupVersion().String(), + APIVersion: ingressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -121,7 +121,7 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) { title: "IngressRoute with hostheader rule", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteGVR.GroupVersion().String(), + APIVersion: ingressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -157,7 +157,7 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) { title: "IngressRoute with multiple host rules", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteGVR.GroupVersion().String(), + APIVersion: ingressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -203,7 +203,7 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) { title: "IngressRoute with multiple host rules and annotation", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteGVR.GroupVersion().String(), + APIVersion: ingressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -260,7 +260,7 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) { title: "IngressRoute ignoring annotation", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteGVR.GroupVersion().String(), + APIVersion: ingressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -308,7 +308,7 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) { title: "IngressRoute omit wildcard", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteGVR.GroupVersion().String(), + APIVersion: ingressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -336,12 +336,12 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) { fakeKubernetesClient := fakeKube.NewSimpleClientset() scheme := runtime.NewScheme() - scheme.AddKnownTypes(ingressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(ingressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(ingressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) - scheme.AddKnownTypes(oldIngressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(oldIngressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(oldIngressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(ingressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(ingressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(ingressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(oldIngressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(oldIngressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(oldIngressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) fakeDynamicClient := fakeDynamic.NewSimpleDynamicClient(scheme) ir := unstructured.Unstructured{} @@ -352,7 +352,7 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) { assert.NoError(t, ir.UnmarshalJSON(ingressRouteAsJSON)) // Create proxy resources - _, err = fakeDynamicClient.Resource(ingressrouteGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) + _, err = fakeDynamicClient.Resource(ingressRouteGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) assert.NoError(t, err) source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, false, false) @@ -361,7 +361,7 @@ func TestTraefikProxyIngressRouteEndpoints(t *testing.T) { count := &unstructured.UnstructuredList{} for len(count.Items) < 1 { - count, _ = fakeDynamicClient.Resource(ingressrouteGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) + count, _ = fakeDynamicClient.Resource(ingressRouteGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) } endpoints, err := source.Endpoints(context.Background()) @@ -385,7 +385,7 @@ func TestTraefikProxyIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP with hostname annotation", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteTCPGVR.GroupVersion().String(), + APIVersion: ingressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -415,7 +415,7 @@ func TestTraefikProxyIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP with host sni rule", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteTCPGVR.GroupVersion().String(), + APIVersion: ingressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -451,7 +451,7 @@ func TestTraefikProxyIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP with multiple host sni rules", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteTCPGVR.GroupVersion().String(), + APIVersion: ingressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -497,7 +497,7 @@ func TestTraefikProxyIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP with multiple host sni rules and annotation", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteTCPGVR.GroupVersion().String(), + APIVersion: ingressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -554,7 +554,7 @@ func TestTraefikProxyIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP ignoring annotation", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteTCPGVR.GroupVersion().String(), + APIVersion: ingressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -602,7 +602,7 @@ func TestTraefikProxyIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP omit wildcard host sni", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteTCPGVR.GroupVersion().String(), + APIVersion: ingressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -630,12 +630,12 @@ func TestTraefikProxyIngressRouteTCPEndpoints(t *testing.T) { fakeKubernetesClient := fakeKube.NewSimpleClientset() scheme := runtime.NewScheme() - scheme.AddKnownTypes(ingressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(ingressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(ingressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) - scheme.AddKnownTypes(oldIngressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(oldIngressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(oldIngressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(ingressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(ingressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(ingressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(oldIngressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(oldIngressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(oldIngressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) fakeDynamicClient := fakeDynamic.NewSimpleDynamicClient(scheme) ir := unstructured.Unstructured{} @@ -646,7 +646,7 @@ func TestTraefikProxyIngressRouteTCPEndpoints(t *testing.T) { require.NoError(t, ir.UnmarshalJSON(ingressRouteAsJSON)) // Create proxy resources - _, err = fakeDynamicClient.Resource(ingressrouteTCPGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) + _, err = fakeDynamicClient.Resource(ingressRouteTCPGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) require.NoError(t, err) source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, false, false) @@ -655,7 +655,7 @@ func TestTraefikProxyIngressRouteTCPEndpoints(t *testing.T) { count := &unstructured.UnstructuredList{} for len(count.Items) < 1 { - count, _ = fakeDynamicClient.Resource(ingressrouteTCPGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) + count, _ = fakeDynamicClient.Resource(ingressRouteTCPGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) } endpoints, err := source.Endpoints(context.Background()) @@ -679,7 +679,7 @@ func TestTraefikProxyIngressRouteUDPEndpoints(t *testing.T) { title: "IngressRouteTCP with hostname annotation", ingressRouteUDP: IngressRouteUDP{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteUDPGVR.GroupVersion().String(), + APIVersion: ingressRouteUDPGVR.GroupVersion().String(), Kind: "IngressRouteUDP", }, ObjectMeta: metav1.ObjectMeta{ @@ -709,7 +709,7 @@ func TestTraefikProxyIngressRouteUDPEndpoints(t *testing.T) { title: "IngressRouteTCP with multiple hostname annotation", ingressRouteUDP: IngressRouteUDP{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteUDPGVR.GroupVersion().String(), + APIVersion: ingressRouteUDPGVR.GroupVersion().String(), Kind: "IngressRouteUDP", }, ObjectMeta: metav1.ObjectMeta{ @@ -749,7 +749,7 @@ func TestTraefikProxyIngressRouteUDPEndpoints(t *testing.T) { title: "IngressRouteTCP ignoring hostname annotation", ingressRouteUDP: IngressRouteUDP{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteUDPGVR.GroupVersion().String(), + APIVersion: ingressRouteUDPGVR.GroupVersion().String(), Kind: "IngressRouteUDP", }, ObjectMeta: metav1.ObjectMeta{ @@ -772,12 +772,12 @@ func TestTraefikProxyIngressRouteUDPEndpoints(t *testing.T) { fakeKubernetesClient := fakeKube.NewSimpleClientset() scheme := runtime.NewScheme() - scheme.AddKnownTypes(ingressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(ingressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(ingressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) - scheme.AddKnownTypes(oldIngressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(oldIngressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(oldIngressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(ingressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(ingressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(ingressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(oldIngressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(oldIngressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(oldIngressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) fakeDynamicClient := fakeDynamic.NewSimpleDynamicClient(scheme) ir := unstructured.Unstructured{} @@ -788,7 +788,7 @@ func TestTraefikProxyIngressRouteUDPEndpoints(t *testing.T) { assert.NoError(t, ir.UnmarshalJSON(ingressRouteAsJSON)) // Create proxy resources - _, err = fakeDynamicClient.Resource(ingressrouteUDPGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) + _, err = fakeDynamicClient.Resource(ingressRouteUDPGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) assert.NoError(t, err) source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, false, false) @@ -797,7 +797,7 @@ func TestTraefikProxyIngressRouteUDPEndpoints(t *testing.T) { count := &unstructured.UnstructuredList{} for len(count.Items) < 1 { - count, _ = fakeDynamicClient.Resource(ingressrouteUDPGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) + count, _ = fakeDynamicClient.Resource(ingressRouteUDPGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) } endpoints, err := source.Endpoints(context.Background()) @@ -821,7 +821,7 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) { title: "IngressRoute with hostname annotation", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteGVR.GroupVersion().String(), + APIVersion: oldIngressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -851,7 +851,7 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) { title: "IngressRoute with host rule", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteGVR.GroupVersion().String(), + APIVersion: oldIngressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -887,7 +887,7 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) { title: "IngressRoute with hostheader rule", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteGVR.GroupVersion().String(), + APIVersion: oldIngressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -923,7 +923,7 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) { title: "IngressRoute with multiple host rules", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteGVR.GroupVersion().String(), + APIVersion: oldIngressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -969,7 +969,7 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) { title: "IngressRoute with multiple host rules and annotation", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteGVR.GroupVersion().String(), + APIVersion: oldIngressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -1026,7 +1026,7 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) { title: "IngressRoute ignoring annotation", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteGVR.GroupVersion().String(), + APIVersion: oldIngressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -1074,7 +1074,7 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) { title: "IngressRoute omit wildcard", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteGVR.GroupVersion().String(), + APIVersion: oldIngressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -1102,12 +1102,12 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) { fakeKubernetesClient := fakeKube.NewSimpleClientset() scheme := runtime.NewScheme() - scheme.AddKnownTypes(ingressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(ingressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(ingressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) - scheme.AddKnownTypes(oldIngressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(oldIngressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(oldIngressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(ingressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(ingressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(ingressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(oldIngressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(oldIngressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(oldIngressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) fakeDynamicClient := fakeDynamic.NewSimpleDynamicClient(scheme) ir := unstructured.Unstructured{} @@ -1118,7 +1118,7 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) { assert.NoError(t, ir.UnmarshalJSON(ingressRouteAsJSON)) // Create proxy resources - _, err = fakeDynamicClient.Resource(oldIngressrouteGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) + _, err = fakeDynamicClient.Resource(oldIngressRouteGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) assert.NoError(t, err) source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, false, false) @@ -1127,7 +1127,7 @@ func TestTraefikProxyOldIngressRouteEndpoints(t *testing.T) { count := &unstructured.UnstructuredList{} for len(count.Items) < 1 { - count, _ = fakeDynamicClient.Resource(oldIngressrouteGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) + count, _ = fakeDynamicClient.Resource(oldIngressRouteGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) } endpoints, err := source.Endpoints(context.Background()) @@ -1151,7 +1151,7 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP with hostname annotation", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteTCPGVR.GroupVersion().String(), + APIVersion: oldIngressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -1181,7 +1181,7 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP with host sni rule", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteTCPGVR.GroupVersion().String(), + APIVersion: oldIngressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -1217,7 +1217,7 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP with multiple host sni rules", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteTCPGVR.GroupVersion().String(), + APIVersion: oldIngressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -1263,7 +1263,7 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP with multiple host sni rules and annotation", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteTCPGVR.GroupVersion().String(), + APIVersion: oldIngressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -1320,7 +1320,7 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP ignoring annotation", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteTCPGVR.GroupVersion().String(), + APIVersion: oldIngressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -1368,7 +1368,7 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) { title: "IngressRouteTCP omit wildcard host sni", ingressRouteTCP: IngressRouteTCP{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteTCPGVR.GroupVersion().String(), + APIVersion: oldIngressRouteTCPGVR.GroupVersion().String(), Kind: "IngressRouteTCP", }, ObjectMeta: metav1.ObjectMeta{ @@ -1396,12 +1396,12 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) { fakeKubernetesClient := fakeKube.NewSimpleClientset() scheme := runtime.NewScheme() - scheme.AddKnownTypes(ingressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(ingressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(ingressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) - scheme.AddKnownTypes(oldIngressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(oldIngressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(oldIngressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(ingressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(ingressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(ingressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(oldIngressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(oldIngressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(oldIngressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) fakeDynamicClient := fakeDynamic.NewSimpleDynamicClient(scheme) ir := unstructured.Unstructured{} @@ -1412,7 +1412,7 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) { assert.NoError(t, ir.UnmarshalJSON(ingressRouteAsJSON)) // Create proxy resources - _, err = fakeDynamicClient.Resource(oldIngressrouteTCPGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) + _, err = fakeDynamicClient.Resource(oldIngressRouteTCPGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) assert.NoError(t, err) source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, false, false) @@ -1421,7 +1421,7 @@ func TestTraefikProxyOldIngressRouteTCPEndpoints(t *testing.T) { count := &unstructured.UnstructuredList{} for len(count.Items) < 1 { - count, _ = fakeDynamicClient.Resource(oldIngressrouteTCPGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) + count, _ = fakeDynamicClient.Resource(oldIngressRouteTCPGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) } endpoints, err := source.Endpoints(context.Background()) @@ -1445,7 +1445,7 @@ func TestTraefikProxyOldIngressRouteUDPEndpoints(t *testing.T) { title: "IngressRouteTCP with hostname annotation", ingressRouteUDP: IngressRouteUDP{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteUDPGVR.GroupVersion().String(), + APIVersion: oldIngressRouteUDPGVR.GroupVersion().String(), Kind: "IngressRouteUDP", }, ObjectMeta: metav1.ObjectMeta{ @@ -1475,7 +1475,7 @@ func TestTraefikProxyOldIngressRouteUDPEndpoints(t *testing.T) { title: "IngressRouteTCP with multiple hostname annotation", ingressRouteUDP: IngressRouteUDP{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteUDPGVR.GroupVersion().String(), + APIVersion: oldIngressRouteUDPGVR.GroupVersion().String(), Kind: "IngressRouteUDP", }, ObjectMeta: metav1.ObjectMeta{ @@ -1515,7 +1515,7 @@ func TestTraefikProxyOldIngressRouteUDPEndpoints(t *testing.T) { title: "IngressRouteTCP ignoring hostname annotation", ingressRouteUDP: IngressRouteUDP{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteUDPGVR.GroupVersion().String(), + APIVersion: oldIngressRouteUDPGVR.GroupVersion().String(), Kind: "IngressRouteUDP", }, ObjectMeta: metav1.ObjectMeta{ @@ -1538,12 +1538,12 @@ func TestTraefikProxyOldIngressRouteUDPEndpoints(t *testing.T) { fakeKubernetesClient := fakeKube.NewSimpleClientset() scheme := runtime.NewScheme() - scheme.AddKnownTypes(ingressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(ingressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(ingressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) - scheme.AddKnownTypes(oldIngressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(oldIngressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(oldIngressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(ingressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(ingressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(ingressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(oldIngressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(oldIngressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(oldIngressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) fakeDynamicClient := fakeDynamic.NewSimpleDynamicClient(scheme) ir := unstructured.Unstructured{} @@ -1554,7 +1554,7 @@ func TestTraefikProxyOldIngressRouteUDPEndpoints(t *testing.T) { assert.NoError(t, ir.UnmarshalJSON(ingressRouteAsJSON)) // Create proxy resources - _, err = fakeDynamicClient.Resource(oldIngressrouteUDPGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) + _, err = fakeDynamicClient.Resource(oldIngressRouteUDPGVR).Namespace(defaultTraefikNamespace).Create(context.Background(), &ir, metav1.CreateOptions{}) assert.NoError(t, err) source, err := NewTraefikSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, defaultTraefikNamespace, "kubernetes.io/ingress.class=traefik", ti.ignoreHostnameAnnotation, false, false) @@ -1563,7 +1563,7 @@ func TestTraefikProxyOldIngressRouteUDPEndpoints(t *testing.T) { count := &unstructured.UnstructuredList{} for len(count.Items) < 1 { - count, _ = fakeDynamicClient.Resource(oldIngressrouteUDPGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) + count, _ = fakeDynamicClient.Resource(oldIngressRouteUDPGVR).Namespace(defaultTraefikNamespace).List(context.Background(), metav1.ListOptions{}) } endpoints, err := source.Endpoints(context.Background()) @@ -1590,7 +1590,7 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) { title: "IngressRoute.traefik.containo.us with the legacy API group enabled", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteGVR.GroupVersion().String(), + APIVersion: oldIngressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -1603,7 +1603,7 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) { }, }, }, - gvr: oldIngressrouteGVR, + gvr: oldIngressRouteGVR, disableLegacy: false, disableNew: false, expected: []*endpoint.Endpoint{ @@ -1623,7 +1623,7 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) { title: "IngressRoute.traefik.containo.us with the legacy API group disabled", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: oldIngressrouteGVR.GroupVersion().String(), + APIVersion: oldIngressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -1636,7 +1636,7 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) { }, }, }, - gvr: oldIngressrouteGVR, + gvr: oldIngressRouteGVR, disableLegacy: true, disableNew: false, }, @@ -1644,7 +1644,7 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) { title: "IngressRoute.traefik.io with the new API group enabled", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteGVR.GroupVersion().String(), + APIVersion: ingressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -1657,7 +1657,7 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) { }, }, }, - gvr: ingressrouteGVR, + gvr: ingressRouteGVR, disableLegacy: false, disableNew: false, expected: []*endpoint.Endpoint{ @@ -1677,7 +1677,7 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) { title: "IngressRoute.traefik.io with the new API group disabled", ingressRoute: IngressRoute{ TypeMeta: metav1.TypeMeta{ - APIVersion: ingressrouteGVR.GroupVersion().String(), + APIVersion: ingressRouteGVR.GroupVersion().String(), Kind: "IngressRoute", }, ObjectMeta: metav1.ObjectMeta{ @@ -1690,7 +1690,7 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) { }, }, }, - gvr: ingressrouteGVR, + gvr: ingressRouteGVR, disableLegacy: false, disableNew: true, }, @@ -1701,12 +1701,12 @@ func TestTraefikAPIGroupDisableFlags(t *testing.T) { fakeKubernetesClient := fakeKube.NewSimpleClientset() scheme := runtime.NewScheme() - scheme.AddKnownTypes(ingressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(ingressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(ingressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) - scheme.AddKnownTypes(oldIngressrouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) - scheme.AddKnownTypes(oldIngressrouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) - scheme.AddKnownTypes(oldIngressrouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(ingressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(ingressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(ingressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) + scheme.AddKnownTypes(oldIngressRouteGVR.GroupVersion(), &IngressRoute{}, &IngressRouteList{}) + scheme.AddKnownTypes(oldIngressRouteTCPGVR.GroupVersion(), &IngressRouteTCP{}, &IngressRouteTCPList{}) + scheme.AddKnownTypes(oldIngressRouteUDPGVR.GroupVersion(), &IngressRouteUDP{}, &IngressRouteUDPList{}) fakeDynamicClient := fakeDynamic.NewSimpleDynamicClient(scheme) ir := unstructured.Unstructured{}