Skip to content

Commit 4f63c3b

Browse files
committed
feat: support custom gatewayproxy namespace for ingressclass
Signed-off-by: Ashing Zheng <[email protected]>
1 parent d23f7bf commit 4f63c3b

File tree

5 files changed

+20
-21
lines changed

5 files changed

+20
-21
lines changed

internal/controller/indexer/indexer.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
3535
"github.com/apache/apisix-ingress-controller/internal/adc/translator/annotations"
3636
internaltypes "github.com/apache/apisix-ingress-controller/internal/types"
37+
k8sutils "github.com/apache/apisix-ingress-controller/internal/utils"
3738
"github.com/apache/apisix-ingress-controller/pkg/utils"
3839
)
3940

@@ -859,11 +860,8 @@ func IngressClassParametersRefIndexFunc(rawObj client.Object) []string {
859860
ingressClass.Spec.Parameters.APIGroup != nil &&
860861
*ingressClass.Spec.Parameters.APIGroup == v1alpha1.GroupVersion.Group &&
861862
ingressClass.Spec.Parameters.Kind == internaltypes.KindGatewayProxy {
862-
ns := ingressClass.GetNamespace()
863-
if ingressClass.Spec.Parameters.Namespace != nil {
864-
ns = *ingressClass.Spec.Parameters.Namespace
865-
}
866-
return []string{GenIndexKey(ns, ingressClass.Spec.Parameters.Name)}
863+
namespace := k8sutils.GetIngressClassParametersNamespace(*ingressClass)
864+
return []string{GenIndexKey(namespace, ingressClass.Spec.Parameters.Name)}
867865
}
868866
return nil
869867
}

internal/controller/ingressclass_controller.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,10 +187,7 @@ func (r *IngressClassReconciler) processInfrastructure(tctx *provider.TranslateC
187187
return nil
188188
}
189189

190-
namespace := ingressClass.Namespace
191-
if ingressClass.Spec.Parameters.Namespace != nil {
192-
namespace = *ingressClass.Spec.Parameters.Namespace
193-
}
190+
namespace := utils.GetIngressClassParametersNamespace(*ingressClass)
194191

195192
gatewayProxy := new(v1alpha1.GatewayProxy)
196193
if err := r.Get(context.Background(), client.ObjectKey{

internal/controller/utils.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,10 +1354,7 @@ func ProcessIngressClassParameters(tctx *provider.TranslateContext, c client.Cli
13541354
parameters := ingressClass.Spec.Parameters
13551355
// check if the parameters reference GatewayProxy
13561356
if parameters.APIGroup != nil && *parameters.APIGroup == v1alpha1.GroupVersion.Group && parameters.Kind == KindGatewayProxy {
1357-
ns := object.GetNamespace()
1358-
if parameters.Namespace != nil {
1359-
ns = *parameters.Namespace
1360-
}
1357+
ns := utils.GetIngressClassParametersNamespace(*ingressClass)
13611358

13621359
gatewayProxy := &v1alpha1.GatewayProxy{}
13631360
if err := c.Get(tctx, client.ObjectKey{
@@ -1553,10 +1550,7 @@ func GetGatewayProxyByIngressClass(ctx context.Context, r client.Client, ingress
15531550
return nil, nil
15541551
}
15551552

1556-
namespace := ingressClass.Namespace
1557-
if ingressClass.Spec.Parameters.Namespace != nil {
1558-
namespace = *ingressClass.Spec.Parameters.Namespace
1559-
}
1553+
namespace := utils.GetIngressClassParametersNamespace(*ingressClass)
15601554

15611555
gatewayProxy := new(v1alpha1.GatewayProxy)
15621556
if err := r.Get(ctx, client.ObjectKey{

internal/utils/k8s.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"net"
2222
"regexp"
2323

24+
networkingv1 "k8s.io/api/networking/v1"
2425
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2526
k8stypes "k8s.io/apimachinery/pkg/types"
2627
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -99,3 +100,14 @@ func ConditionStatus(status bool) metav1.ConditionStatus {
99100
}
100101
return metav1.ConditionFalse
101102
}
103+
104+
func GetIngressClassParametersNamespace(ingressClass networkingv1.IngressClass) string {
105+
namespace := "default"
106+
if ingressClass.Spec.Parameters.Namespace != nil {
107+
namespace = *ingressClass.Spec.Parameters.Namespace
108+
}
109+
if annotationNamespace, exists := ingressClass.Annotations["apisix.apache.org/parameters-namespace"]; exists && annotationNamespace != "" {
110+
namespace = annotationNamespace
111+
}
112+
return namespace
113+
}

internal/webhook/v1/ingressclass_webhook.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
v1alpha1 "github.com/apache/apisix-ingress-controller/api/v1alpha1"
3232
"github.com/apache/apisix-ingress-controller/internal/controller/config"
3333
internaltypes "github.com/apache/apisix-ingress-controller/internal/types"
34+
"github.com/apache/apisix-ingress-controller/internal/utils"
3435
)
3536

3637
// nolint:unused
@@ -106,10 +107,7 @@ func (v *IngressClassCustomValidator) warnIfMissingGatewayProxyForIngressClass(c
106107
return nil
107108
}
108109

109-
ns := ingressClass.GetNamespace()
110-
if params.Namespace != nil && *params.Namespace != "" {
111-
ns = *params.Namespace
112-
}
110+
ns := utils.GetIngressClassParametersNamespace(*ingressClass)
113111
name := params.Name
114112

115113
var gp v1alpha1.GatewayProxy

0 commit comments

Comments
 (0)