This is an automated email from the ASF dual-hosted git repository. ronething pushed a commit to branch feat/ingressannotaions in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git
commit 4f63c3b2a9ea846cb18ef64daeb9e6aba63a4ab4 Author: Ashing Zheng <[email protected]> AuthorDate: Mon Jan 12 13:10:44 2026 +0800 feat: support custom gatewayproxy namespace for ingressclass Signed-off-by: Ashing Zheng <[email protected]> --- internal/controller/indexer/indexer.go | 8 +++----- internal/controller/ingressclass_controller.go | 5 +---- internal/controller/utils.go | 10 ++-------- internal/utils/k8s.go | 12 ++++++++++++ internal/webhook/v1/ingressclass_webhook.go | 6 ++---- 5 files changed, 20 insertions(+), 21 deletions(-) diff --git a/internal/controller/indexer/indexer.go b/internal/controller/indexer/indexer.go index 91bec714..6f0d66a4 100644 --- a/internal/controller/indexer/indexer.go +++ b/internal/controller/indexer/indexer.go @@ -34,6 +34,7 @@ import ( apiv2 "github.com/apache/apisix-ingress-controller/api/v2" "github.com/apache/apisix-ingress-controller/internal/adc/translator/annotations" internaltypes "github.com/apache/apisix-ingress-controller/internal/types" + k8sutils "github.com/apache/apisix-ingress-controller/internal/utils" "github.com/apache/apisix-ingress-controller/pkg/utils" ) @@ -859,11 +860,8 @@ func IngressClassParametersRefIndexFunc(rawObj client.Object) []string { ingressClass.Spec.Parameters.APIGroup != nil && *ingressClass.Spec.Parameters.APIGroup == v1alpha1.GroupVersion.Group && ingressClass.Spec.Parameters.Kind == internaltypes.KindGatewayProxy { - ns := ingressClass.GetNamespace() - if ingressClass.Spec.Parameters.Namespace != nil { - ns = *ingressClass.Spec.Parameters.Namespace - } - return []string{GenIndexKey(ns, ingressClass.Spec.Parameters.Name)} + namespace := k8sutils.GetIngressClassParametersNamespace(*ingressClass) + return []string{GenIndexKey(namespace, ingressClass.Spec.Parameters.Name)} } return nil } diff --git a/internal/controller/ingressclass_controller.go b/internal/controller/ingressclass_controller.go index 5594ee6c..0afbf6f2 100644 --- a/internal/controller/ingressclass_controller.go +++ b/internal/controller/ingressclass_controller.go @@ -187,10 +187,7 @@ func (r *IngressClassReconciler) processInfrastructure(tctx *provider.TranslateC return nil } - namespace := ingressClass.Namespace - if ingressClass.Spec.Parameters.Namespace != nil { - namespace = *ingressClass.Spec.Parameters.Namespace - } + namespace := utils.GetIngressClassParametersNamespace(*ingressClass) gatewayProxy := new(v1alpha1.GatewayProxy) if err := r.Get(context.Background(), client.ObjectKey{ diff --git a/internal/controller/utils.go b/internal/controller/utils.go index 892d027c..a00ef916 100644 --- a/internal/controller/utils.go +++ b/internal/controller/utils.go @@ -1354,10 +1354,7 @@ func ProcessIngressClassParameters(tctx *provider.TranslateContext, c client.Cli parameters := ingressClass.Spec.Parameters // check if the parameters reference GatewayProxy if parameters.APIGroup != nil && *parameters.APIGroup == v1alpha1.GroupVersion.Group && parameters.Kind == KindGatewayProxy { - ns := object.GetNamespace() - if parameters.Namespace != nil { - ns = *parameters.Namespace - } + ns := utils.GetIngressClassParametersNamespace(*ingressClass) gatewayProxy := &v1alpha1.GatewayProxy{} if err := c.Get(tctx, client.ObjectKey{ @@ -1553,10 +1550,7 @@ func GetGatewayProxyByIngressClass(ctx context.Context, r client.Client, ingress return nil, nil } - namespace := ingressClass.Namespace - if ingressClass.Spec.Parameters.Namespace != nil { - namespace = *ingressClass.Spec.Parameters.Namespace - } + namespace := utils.GetIngressClassParametersNamespace(*ingressClass) gatewayProxy := new(v1alpha1.GatewayProxy) if err := r.Get(ctx, client.ObjectKey{ diff --git a/internal/utils/k8s.go b/internal/utils/k8s.go index 0bca19d0..0d58f301 100644 --- a/internal/utils/k8s.go +++ b/internal/utils/k8s.go @@ -21,6 +21,7 @@ import ( "net" "regexp" + networkingv1 "k8s.io/api/networking/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" k8stypes "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" @@ -99,3 +100,14 @@ func ConditionStatus(status bool) metav1.ConditionStatus { } return metav1.ConditionFalse } + +func GetIngressClassParametersNamespace(ingressClass networkingv1.IngressClass) string { + namespace := "default" + if ingressClass.Spec.Parameters.Namespace != nil { + namespace = *ingressClass.Spec.Parameters.Namespace + } + if annotationNamespace, exists := ingressClass.Annotations["apisix.apache.org/parameters-namespace"]; exists && annotationNamespace != "" { + namespace = annotationNamespace + } + return namespace +} diff --git a/internal/webhook/v1/ingressclass_webhook.go b/internal/webhook/v1/ingressclass_webhook.go index 4d77fe8a..67d2c360 100644 --- a/internal/webhook/v1/ingressclass_webhook.go +++ b/internal/webhook/v1/ingressclass_webhook.go @@ -31,6 +31,7 @@ import ( v1alpha1 "github.com/apache/apisix-ingress-controller/api/v1alpha1" "github.com/apache/apisix-ingress-controller/internal/controller/config" internaltypes "github.com/apache/apisix-ingress-controller/internal/types" + "github.com/apache/apisix-ingress-controller/internal/utils" ) // nolint:unused @@ -106,10 +107,7 @@ func (v *IngressClassCustomValidator) warnIfMissingGatewayProxyForIngressClass(c return nil } - ns := ingressClass.GetNamespace() - if params.Namespace != nil && *params.Namespace != "" { - ns = *params.Namespace - } + ns := utils.GetIngressClassParametersNamespace(*ingressClass) name := params.Name var gp v1alpha1.GatewayProxy
