From 9027208556e99adc721acdde9c9c3a8eecdae14a Mon Sep 17 00:00:00 2001 From: norbjd Date: Sat, 29 Jul 2023 18:09:00 +0200 Subject: [PATCH 1/2] Update getReadyIngresses to load ingresses at startup Indeed, we can't use label selector as kourier class is not a label, but an annotation. As a result, kourier does not sync ingresses at startup --- config/300-controller.yaml | 4 ++++ pkg/reconciler/ingress/controller.go | 21 +++++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/config/300-controller.yaml b/config/300-controller.yaml index e2cc7fcf8..f26aaa029 100644 --- a/config/300-controller.yaml +++ b/config/300-controller.yaml @@ -59,6 +59,10 @@ spec: value: "kourier-system" - name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID value: "false" + - name: KUBE_API_BURST + value: "200" + - name: KUBE_API_QPS + value: "200" ports: - name: http2-xds containerPort: 18000 diff --git a/pkg/reconciler/ingress/controller.go b/pkg/reconciler/ingress/controller.go index 35070f4c6..0a9d27aa6 100644 --- a/pkg/reconciler/ingress/controller.go +++ b/pkg/reconciler/ingress/controller.go @@ -25,7 +25,6 @@ import ( "go.uber.org/zap" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" v1 "k8s.io/client-go/informers/core/v1" @@ -35,9 +34,10 @@ import ( "knative.dev/net-kourier/pkg/generator" rconfig "knative.dev/net-kourier/pkg/reconciler/ingress/config" "knative.dev/networking/pkg/apis/networking/v1alpha1" + networkingClientSet "knative.dev/networking/pkg/client/clientset/versioned/typed/networking/v1alpha1" + knativeclient "knative.dev/networking/pkg/client/injection/client" ingressinformer "knative.dev/networking/pkg/client/injection/informers/networking/v1alpha1/ingress" v1alpha1ingress "knative.dev/networking/pkg/client/injection/reconciler/networking/v1alpha1/ingress" - ingresslister "knative.dev/networking/pkg/client/listers/networking/v1alpha1" netconfig "knative.dev/networking/pkg/config" "knative.dev/networking/pkg/status" kubeclient "knative.dev/pkg/client/injection/kube/client" @@ -71,6 +71,7 @@ func NewController(ctx context.Context, cmw configmap.Watcher) *controller.Impl logger := logging.FromContext(ctx) kubernetesClient := kubeclient.Get(ctx) + knativeClient := knativeclient.Get(ctx) ingressInformer := ingressinformer.Get(ctx) endpointsInformer := endpointsinformer.Get(ctx) serviceInformer := serviceinformer.Get(ctx) @@ -203,7 +204,7 @@ func NewController(ctx context.Context, cmw configmap.Watcher) *controller.Impl } // Get the current list of ingresses that are ready and seed the Envoy config with them. - ingressesToSync, err := getReadyIngresses(ingressInformer.Lister()) + ingressesToSync, err := getReadyIngresses(ctx, knativeClient.NetworkingV1alpha1()) if err != nil { logger.Fatalw("Failed to fetch ready ingresses", zap.Error(err)) } @@ -310,16 +311,16 @@ func NewController(ctx context.Context, cmw configmap.Watcher) *controller.Impl return impl } -func getReadyIngresses(ingressLister ingresslister.IngressLister) ([]*v1alpha1.Ingress, error) { - ingresses, err := ingressLister.List(labels.SelectorFromSet(map[string]string{ - v1alpha1ingress.ClassAnnotationKey: config.KourierIngressClassName, - })) +func getReadyIngresses(ctx context.Context, knativeClient networkingClientSet.NetworkingV1alpha1Interface) ([]*v1alpha1.Ingress, error) { + ingresses, err := knativeClient.Ingresses("").List(ctx, metav1.ListOptions{}) if err != nil { return nil, err } - ingressesToWarm := make([]*v1alpha1.Ingress, 0, len(ingresses)) - for _, ingress := range ingresses { - if ingress.GetDeletionTimestamp() == nil && // Ignore ingresses that are already marked for deletion. + ingressesToWarm := make([]*v1alpha1.Ingress, 0, len(ingresses.Items)) + for i := range ingresses.Items { + ingress := &ingresses.Items[i] + if isKourierIngress(ingress) && + ingress.GetDeletionTimestamp() == nil && // Ignore ingresses that are already marked for deletion. ingress.GetStatus().GetCondition(v1alpha1.IngressConditionNetworkConfigured).IsTrue() { ingressesToWarm = append(ingressesToWarm, ingress) } From 0a3a7d4e56c7bca12092981b3ac4835001492122 Mon Sep 17 00:00:00 2001 From: norbjd Date: Sun, 30 Jul 2023 15:24:13 +0200 Subject: [PATCH 2/2] Explain KUBE_API_BURST and KUBE_API_QPS --- config/300-controller.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/300-controller.yaml b/config/300-controller.yaml index f26aaa029..53dbd9d87 100644 --- a/config/300-controller.yaml +++ b/config/300-controller.yaml @@ -59,6 +59,9 @@ spec: value: "kourier-system" - name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID value: "false" + # KUBE_API_BURST and KUBE_API_QPS allows to configure maximum burst for throttle and maximum QPS to the server from the client. + # Setting these values using env vars is possible since https://github.com/knative/pkg/pull/2755. + # 200 is an arbitrary value, but it speeds up kourier startup duration, and the whole ingress reconciliation process as a whole. - name: KUBE_API_BURST value: "200" - name: KUBE_API_QPS