mirror of
https://github.com/alibaba/higress.git
synced 2026-06-09 04:37:31 +08:00
feat: Support only watching key resources in one namespace (#1821)
This commit is contained in:
@@ -139,6 +139,10 @@ spec:
|
|||||||
periodSeconds: 3
|
periodSeconds: 3
|
||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
env:
|
env:
|
||||||
|
{{- if .Values.global.watchNamespace }}
|
||||||
|
- name: ISTIO_WATCH_NAMESPACE
|
||||||
|
value: "{{ .Values.global.watchNamespace }}"
|
||||||
|
{{- end }}
|
||||||
- name: ENABLE_PUSH_ALL_MCP_CLUSTERS
|
- name: ENABLE_PUSH_ALL_MCP_CLUSTERS
|
||||||
value: "{{ .Values.global.enablePushAllMCPClusters }}"
|
value: "{{ .Values.global.enablePushAllMCPClusters }}"
|
||||||
- name: PILOT_ENABLE_LDS_CACHE
|
- name: PILOT_ENABLE_LDS_CACHE
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ func (s *Server) initConfigController() error {
|
|||||||
options.ClusterId = ""
|
options.ClusterId = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
ingressConfig := translation.NewIngressTranslation(s.kubeClient, s.xdsServer, ns, options.ClusterId)
|
ingressConfig := translation.NewIngressTranslation(s.kubeClient, s.xdsServer, ns, options)
|
||||||
ingressConfig.AddLocalCluster(options)
|
ingressConfig.AddLocalCluster(options)
|
||||||
|
|
||||||
s.configStores = append(s.configStores, ingressConfig)
|
s.configStores = append(s.configStores, ingressConfig)
|
||||||
|
|||||||
@@ -153,7 +153,8 @@ type IngressConfig struct {
|
|||||||
httpsConfigMgr *cert.ConfigMgr
|
httpsConfigMgr *cert.ConfigMgr
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewIngressConfig(localKubeClient kube.Client, xdsUpdater istiomodel.XDSUpdater, namespace string, clusterId cluster.ID) *IngressConfig {
|
func NewIngressConfig(localKubeClient kube.Client, xdsUpdater istiomodel.XDSUpdater, namespace string, options common.Options) *IngressConfig {
|
||||||
|
clusterId := options.ClusterId
|
||||||
if clusterId == "Kubernetes" {
|
if clusterId == "Kubernetes" {
|
||||||
clusterId = ""
|
clusterId = ""
|
||||||
}
|
}
|
||||||
@@ -170,17 +171,17 @@ func NewIngressConfig(localKubeClient kube.Client, xdsUpdater istiomodel.XDSUpda
|
|||||||
wasmPlugins: make(map[string]*extensions.WasmPlugin),
|
wasmPlugins: make(map[string]*extensions.WasmPlugin),
|
||||||
http2rpcs: make(map[string]*higressv1.Http2Rpc),
|
http2rpcs: make(map[string]*higressv1.Http2Rpc),
|
||||||
}
|
}
|
||||||
mcpbridgeController := mcpbridge.NewController(localKubeClient, clusterId)
|
mcpbridgeController := mcpbridge.NewController(localKubeClient, options)
|
||||||
mcpbridgeController.AddEventHandler(config.AddOrUpdateMcpBridge, config.DeleteMcpBridge)
|
mcpbridgeController.AddEventHandler(config.AddOrUpdateMcpBridge, config.DeleteMcpBridge)
|
||||||
config.mcpbridgeController = mcpbridgeController
|
config.mcpbridgeController = mcpbridgeController
|
||||||
config.mcpbridgeLister = mcpbridgeController.Lister()
|
config.mcpbridgeLister = mcpbridgeController.Lister()
|
||||||
|
|
||||||
wasmPluginController := wasmplugin.NewController(localKubeClient, clusterId)
|
wasmPluginController := wasmplugin.NewController(localKubeClient, options)
|
||||||
wasmPluginController.AddEventHandler(config.AddOrUpdateWasmPlugin, config.DeleteWasmPlugin)
|
wasmPluginController.AddEventHandler(config.AddOrUpdateWasmPlugin, config.DeleteWasmPlugin)
|
||||||
config.wasmPluginController = wasmPluginController
|
config.wasmPluginController = wasmPluginController
|
||||||
config.wasmPluginLister = wasmPluginController.Lister()
|
config.wasmPluginLister = wasmPluginController.Lister()
|
||||||
|
|
||||||
http2rpcController := http2rpc.NewController(localKubeClient, clusterId)
|
http2rpcController := http2rpc.NewController(localKubeClient, options)
|
||||||
http2rpcController.AddEventHandler(config.AddOrUpdateHttp2Rpc, config.DeleteHttp2Rpc)
|
http2rpcController.AddEventHandler(config.AddOrUpdateHttp2Rpc, config.DeleteHttp2Rpc)
|
||||||
config.http2rpcController = http2rpcController
|
config.http2rpcController = http2rpcController
|
||||||
config.http2rpcLister = http2rpcController.Lister()
|
config.http2rpcLister = http2rpcController.Lister()
|
||||||
@@ -225,7 +226,7 @@ func (m *IngressConfig) RegisterEventHandler(kind config.GroupVersionKind, f ist
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *IngressConfig) AddLocalCluster(options common.Options) {
|
func (m *IngressConfig) AddLocalCluster(options common.Options) {
|
||||||
secretController := secret.NewController(m.localKubeClient, options.ClusterId)
|
secretController := secret.NewController(m.localKubeClient, options)
|
||||||
secretController.AddEventHandler(m.ReflectSecretChanges)
|
secretController.AddEventHandler(m.ReflectSecretChanges)
|
||||||
|
|
||||||
var ingressController common.IngressController
|
var ingressController common.IngressController
|
||||||
|
|||||||
@@ -127,7 +127,14 @@ func TestConvertGatewaysForIngress(t *testing.T) {
|
|||||||
}
|
}
|
||||||
ingressV1Beta1Controller := controllerv1beta1.NewController(fake, fake, v1Beta1Options, nil)
|
ingressV1Beta1Controller := controllerv1beta1.NewController(fake, fake, v1Beta1Options, nil)
|
||||||
ingressV1Controller := controllerv1.NewController(fake, fake, v1Options, nil)
|
ingressV1Controller := controllerv1.NewController(fake, fake, v1Options, nil)
|
||||||
m := NewIngressConfig(fake, nil, "wakanda", "gw-123-istio")
|
options := common.Options{
|
||||||
|
Enable: true,
|
||||||
|
ClusterId: "gw-123-istio",
|
||||||
|
RawClusterId: "gw-123-istio__",
|
||||||
|
GatewayHttpPort: 80,
|
||||||
|
GatewayHttpsPort: 443,
|
||||||
|
}
|
||||||
|
m := NewIngressConfig(fake, nil, "wakanda", options)
|
||||||
m.remoteIngressControllers = map[cluster.ID]common.IngressController{
|
m.remoteIngressControllers = map[cluster.ID]common.IngressController{
|
||||||
"ingress-v1beta1": ingressV1Beta1Controller,
|
"ingress-v1beta1": ingressV1Beta1Controller,
|
||||||
"ingress-v1": ingressV1Controller,
|
"ingress-v1": ingressV1Controller,
|
||||||
|
|||||||
@@ -75,10 +75,11 @@ type KIngressConfig struct {
|
|||||||
clusterId cluster.ID
|
clusterId cluster.ID
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewKIngressConfig(localKubeClient kube.Client, XDSUpdater istiomodel.XDSUpdater, namespace string, clusterId cluster.ID) *KIngressConfig {
|
func NewKIngressConfig(localKubeClient kube.Client, XDSUpdater istiomodel.XDSUpdater, namespace string, options common.Options) *KIngressConfig {
|
||||||
if localKubeClient.KIngressInformer() == nil {
|
if localKubeClient.KIngressInformer() == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
clusterId := options.ClusterId
|
||||||
if clusterId == "Kubernetes" {
|
if clusterId == "Kubernetes" {
|
||||||
clusterId = ""
|
clusterId = ""
|
||||||
}
|
}
|
||||||
@@ -114,7 +115,7 @@ func (m *KIngressConfig) RegisterEventHandler(kind config.GroupVersionKind, f is
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *KIngressConfig) AddLocalCluster(options common.Options) common.KIngressController {
|
func (m *KIngressConfig) AddLocalCluster(options common.Options) common.KIngressController {
|
||||||
secretController := secret.NewController(m.localKubeClient, options.ClusterId)
|
secretController := secret.NewController(m.localKubeClient, options)
|
||||||
secretController.AddEventHandler(m.ReflectSecretChanges)
|
secretController.AddEventHandler(m.ReflectSecretChanges)
|
||||||
|
|
||||||
var ingressController common.KIngressController
|
var ingressController common.KIngressController
|
||||||
|
|||||||
@@ -118,7 +118,14 @@ func TestConvertGatewaysForKIngress(t *testing.T) {
|
|||||||
RawClusterId: "kingress__",
|
RawClusterId: "kingress__",
|
||||||
}
|
}
|
||||||
kingressV1Controller := kcontrollerv1.NewController(fake, fake, v1Options, nil)
|
kingressV1Controller := kcontrollerv1.NewController(fake, fake, v1Options, nil)
|
||||||
m := NewKIngressConfig(fake, nil, "wakanda", "gw-123-istio")
|
options := common.Options{
|
||||||
|
Enable: true,
|
||||||
|
ClusterId: "gw-123-istio",
|
||||||
|
RawClusterId: "gw-123-istio__",
|
||||||
|
GatewayHttpPort: 80,
|
||||||
|
GatewayHttpsPort: 443,
|
||||||
|
}
|
||||||
|
m := NewKIngressConfig(fake, nil, "wakanda", options)
|
||||||
m.remoteIngressControllers = map[cluster.ID]common.KIngressController{
|
m.remoteIngressControllers = map[cluster.ID]common.KIngressController{
|
||||||
"kingress": kingressV1Controller,
|
"kingress": kingressV1Controller,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,21 +15,33 @@
|
|||||||
package http2rpc
|
package http2rpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"istio.io/istio/pkg/cluster"
|
"time"
|
||||||
|
|
||||||
"istio.io/istio/pkg/kube/controllers"
|
"istio.io/istio/pkg/kube/controllers"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/client-go/tools/cache"
|
||||||
|
|
||||||
|
v1 "github.com/alibaba/higress/client/pkg/apis/networking/v1"
|
||||||
|
"github.com/alibaba/higress/client/pkg/clientset/versioned"
|
||||||
|
informersv1 "github.com/alibaba/higress/client/pkg/informers/externalversions/networking/v1"
|
||||||
listersv1 "github.com/alibaba/higress/client/pkg/listers/networking/v1"
|
listersv1 "github.com/alibaba/higress/client/pkg/listers/networking/v1"
|
||||||
|
"github.com/alibaba/higress/pkg/ingress/kube/common"
|
||||||
"github.com/alibaba/higress/pkg/ingress/kube/controller"
|
"github.com/alibaba/higress/pkg/ingress/kube/controller"
|
||||||
kubeclient "github.com/alibaba/higress/pkg/kube"
|
kubeclient "github.com/alibaba/higress/pkg/kube"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Http2RpcController controller.Controller[listersv1.Http2RpcLister]
|
type Http2RpcController controller.Controller[listersv1.Http2RpcLister]
|
||||||
|
|
||||||
func NewController(client kubeclient.Client, clusterId cluster.ID) Http2RpcController {
|
func NewController(client kubeclient.Client, options common.Options) Http2RpcController {
|
||||||
informer := client.HigressInformer().Networking().V1().Http2Rpcs().Informer()
|
var informer cache.SharedIndexInformer
|
||||||
return controller.NewCommonController("http2rpc", client.HigressInformer().Networking().V1().Http2Rpcs().Lister(),
|
if options.WatchNamespace == "" {
|
||||||
informer, GetHttp2Rpc, clusterId)
|
informer = client.HigressInformer().Networking().V1().Http2Rpcs().Informer()
|
||||||
|
} else {
|
||||||
|
informer = client.HigressInformer().InformerFor(&v1.Http2Rpc{}, func(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
||||||
|
return informersv1.NewHttp2RpcInformer(client, options.WatchNamespace, resyncPeriod, nil)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return controller.NewCommonController("http2rpc", listersv1.NewHttp2RpcLister(informer.GetIndexer()), informer, GetHttp2Rpc, options.ClusterId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetHttp2Rpc(lister listersv1.Http2RpcLister, namespacedName types.NamespacedName) (controllers.Object, error) {
|
func GetHttp2Rpc(lister listersv1.Http2RpcLister, namespacedName types.NamespacedName) (controllers.Object, error) {
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ type controller struct {
|
|||||||
// NewController creates a new Kubernetes controller
|
// NewController creates a new Kubernetes controller
|
||||||
func NewController(localKubeClient, client kubeclient.Client, options common.Options,
|
func NewController(localKubeClient, client kubeclient.Client, options common.Options,
|
||||||
secretController secret.SecretController) common.IngressController {
|
secretController secret.SecretController) common.IngressController {
|
||||||
opts := ktypes.InformerOptions{}
|
opts := ktypes.InformerOptions{Namespace: options.WatchNamespace}
|
||||||
ingressInformer := util.GetInformerFiltered(client, opts, gvrIngressV1Beta1, &ingress.Ingress{},
|
ingressInformer := util.GetInformerFiltered(client, opts, gvrIngressV1Beta1, &ingress.Ingress{},
|
||||||
func(options metav1.ListOptions) (runtime.Object, error) {
|
func(options metav1.ListOptions) (runtime.Object, error) {
|
||||||
return client.Kube().NetworkingV1beta1().Ingresses(opts.Namespace).List(context.Background(), options)
|
return client.Kube().NetworkingV1beta1().Ingresses(opts.Namespace).List(context.Background(), options)
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ func TestIngressControllerApplies(t *testing.T) {
|
|||||||
|
|
||||||
options := common.Options{IngressClass: "mse", ClusterId: ""}
|
options := common.Options{IngressClass: "mse", ClusterId: ""}
|
||||||
|
|
||||||
secretController := secret.NewController(localKubeClient, options.ClusterId)
|
secretController := secret.NewController(localKubeClient, options)
|
||||||
ingressController := NewController(localKubeClient, client, options, secretController)
|
ingressController := NewController(localKubeClient, client, options, secretController)
|
||||||
|
|
||||||
testcases := map[string]func(*testing.T, common.IngressController){
|
testcases := map[string]func(*testing.T, common.IngressController){
|
||||||
@@ -253,7 +253,7 @@ func TestIngressControllerConventions(t *testing.T) {
|
|||||||
|
|
||||||
options := common.Options{IngressClass: "mse", ClusterId: "", EnableStatus: true}
|
options := common.Options{IngressClass: "mse", ClusterId: "", EnableStatus: true}
|
||||||
|
|
||||||
secretController := secret.NewController(localKubeClient, options.ClusterId)
|
secretController := secret.NewController(localKubeClient, options)
|
||||||
ingressController := NewController(localKubeClient, client, options, secretController)
|
ingressController := NewController(localKubeClient, client, options, secretController)
|
||||||
|
|
||||||
testcases := map[string]func(*testing.T, common.IngressController){
|
testcases := map[string]func(*testing.T, common.IngressController){
|
||||||
@@ -1142,7 +1142,7 @@ func TestIngressControllerProcessing(t *testing.T) {
|
|||||||
|
|
||||||
options := common.Options{IngressClass: "mse", ClusterId: "", EnableStatus: true}
|
options := common.Options{IngressClass: "mse", ClusterId: "", EnableStatus: true}
|
||||||
|
|
||||||
secretController := secret.NewController(localKubeClient, options.ClusterId)
|
secretController := secret.NewController(localKubeClient, options)
|
||||||
|
|
||||||
opts := ktypes.InformerOptions{}
|
opts := ktypes.InformerOptions{}
|
||||||
ingressInformer := util.GetInformerFiltered(fakeClient, opts, gvrIngressV1Beta1, &ingress.Ingress{},
|
ingressInformer := util.GetInformerFiltered(fakeClient, opts, gvrIngressV1Beta1, &ingress.Ingress{},
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ type controller struct {
|
|||||||
|
|
||||||
// NewController creates a new Kubernetes controller
|
// NewController creates a new Kubernetes controller
|
||||||
func NewController(localKubeClient, client kubeclient.Client, options common.Options, secretController secret.SecretController) common.IngressController {
|
func NewController(localKubeClient, client kubeclient.Client, options common.Options, secretController secret.SecretController) common.IngressController {
|
||||||
opts := ktypes.InformerOptions{}
|
opts := ktypes.InformerOptions{Namespace: options.WatchNamespace}
|
||||||
ingressInformer := schemakubeclient.GetInformerFilteredFromGVR(client, opts, gvr.Ingress)
|
ingressInformer := schemakubeclient.GetInformerFilteredFromGVR(client, opts, gvr.Ingress)
|
||||||
ingressLister := networkinglister.NewIngressLister(ingressInformer.Informer.GetIndexer())
|
ingressLister := networkinglister.NewIngressLister(ingressInformer.Informer.GetIndexer())
|
||||||
serviceInformer := schemakubeclient.GetInformerFilteredFromGVR(client, opts, gvr.Service)
|
serviceInformer := schemakubeclient.GetInformerFilteredFromGVR(client, opts, gvr.Service)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/go-multierror"
|
"github.com/hashicorp/go-multierror"
|
||||||
networking "istio.io/api/networking/v1alpha3"
|
networking "istio.io/api/networking/v1alpha3"
|
||||||
@@ -43,7 +44,9 @@ import (
|
|||||||
listerv1 "k8s.io/client-go/listers/core/v1"
|
listerv1 "k8s.io/client-go/listers/core/v1"
|
||||||
"k8s.io/client-go/tools/cache"
|
"k8s.io/client-go/tools/cache"
|
||||||
ingress "knative.dev/networking/pkg/apis/networking/v1alpha1"
|
ingress "knative.dev/networking/pkg/apis/networking/v1alpha1"
|
||||||
networkingv1alpha1 "knative.dev/networking/pkg/client/listers/networking/v1alpha1"
|
"knative.dev/networking/pkg/client/clientset/versioned"
|
||||||
|
informernetworkingv1alpha1 "knative.dev/networking/pkg/client/informers/externalversions/networking/v1alpha1"
|
||||||
|
listernetworkingv1alpha1 "knative.dev/networking/pkg/client/listers/networking/v1alpha1"
|
||||||
|
|
||||||
"github.com/alibaba/higress/pkg/ingress/kube/annotations"
|
"github.com/alibaba/higress/pkg/ingress/kube/annotations"
|
||||||
"github.com/alibaba/higress/pkg/ingress/kube/common"
|
"github.com/alibaba/higress/pkg/ingress/kube/common"
|
||||||
@@ -76,7 +79,7 @@ type controller struct {
|
|||||||
ingresses map[string]*ingress.Ingress
|
ingresses map[string]*ingress.Ingress
|
||||||
|
|
||||||
ingressInformer cache.SharedInformer
|
ingressInformer cache.SharedInformer
|
||||||
ingressLister networkingv1alpha1.IngressLister
|
ingressLister listernetworkingv1alpha1.IngressLister
|
||||||
serviceInformer informerfactory.StartableInformer
|
serviceInformer informerfactory.StartableInformer
|
||||||
serviceLister listerv1.ServiceLister
|
serviceLister listerv1.ServiceLister
|
||||||
secretController secret.SecretController
|
secretController secret.SecretController
|
||||||
@@ -86,16 +89,23 @@ type controller struct {
|
|||||||
// NewController creates a new Kubernetes controller
|
// NewController creates a new Kubernetes controller
|
||||||
func NewController(localKubeClient, client kube.Client, options common.Options,
|
func NewController(localKubeClient, client kube.Client, options common.Options,
|
||||||
secretController secret.SecretController) common.KIngressController {
|
secretController secret.SecretController) common.KIngressController {
|
||||||
//var namespace string = "default"
|
var ingressInformer cache.SharedIndexInformer
|
||||||
ingressInformer := client.KIngressInformer().Networking().V1alpha1().Ingresses()
|
if options.WatchNamespace == "" {
|
||||||
serviceInformer := schemakubeclient.GetInformerFilteredFromGVR(client, ktypes.InformerOptions{}, gvr.Service)
|
ingressInformer = client.KIngressInformer().Networking().V1alpha1().Ingresses().Informer()
|
||||||
|
} else {
|
||||||
|
ingressInformer = client.KIngressInformer().InformerFor(&ingress.Ingress{}, func(c versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
||||||
|
return informernetworkingv1alpha1.NewIngressInformer(c, options.WatchNamespace, resyncPeriod, nil)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
ingressLister := listernetworkingv1alpha1.NewIngressLister(ingressInformer.GetIndexer())
|
||||||
|
serviceInformer := schemakubeclient.GetInformerFilteredFromGVR(client, ktypes.InformerOptions{Namespace: options.WatchNamespace}, gvr.Service)
|
||||||
serviceLister := listerv1.NewServiceLister(serviceInformer.Informer.GetIndexer())
|
serviceLister := listerv1.NewServiceLister(serviceInformer.Informer.GetIndexer())
|
||||||
|
|
||||||
c := &controller{
|
c := &controller{
|
||||||
options: options,
|
options: options,
|
||||||
ingresses: make(map[string]*ingress.Ingress),
|
ingresses: make(map[string]*ingress.Ingress),
|
||||||
ingressInformer: ingressInformer.Informer(),
|
ingressInformer: ingressInformer,
|
||||||
ingressLister: ingressInformer.Lister(),
|
ingressLister: ingressLister,
|
||||||
serviceInformer: serviceInformer,
|
serviceInformer: serviceInformer,
|
||||||
serviceLister: serviceLister,
|
serviceLister: serviceLister,
|
||||||
secretController: secretController,
|
secretController: secretController,
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ func TestKIngressControllerConventions(t *testing.T) {
|
|||||||
|
|
||||||
options := common.Options{IngressClass: "mse", ClusterId: "", EnableStatus: true}
|
options := common.Options{IngressClass: "mse", ClusterId: "", EnableStatus: true}
|
||||||
|
|
||||||
secretController := secret.NewController(localKubeClient, options.ClusterId)
|
secretController := secret.NewController(localKubeClient, options)
|
||||||
ingressController := NewController(localKubeClient, client, options, secretController)
|
ingressController := NewController(localKubeClient, client, options, secretController)
|
||||||
|
|
||||||
testcases := map[string]func(*testing.T, common.KIngressController){
|
testcases := map[string]func(*testing.T, common.KIngressController){
|
||||||
|
|||||||
@@ -15,21 +15,33 @@
|
|||||||
package mcpbridge
|
package mcpbridge
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"istio.io/istio/pkg/cluster"
|
"time"
|
||||||
|
|
||||||
"istio.io/istio/pkg/kube/controllers"
|
"istio.io/istio/pkg/kube/controllers"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/client-go/tools/cache"
|
||||||
|
|
||||||
|
v1 "github.com/alibaba/higress/client/pkg/apis/networking/v1"
|
||||||
|
"github.com/alibaba/higress/client/pkg/clientset/versioned"
|
||||||
|
informersv1 "github.com/alibaba/higress/client/pkg/informers/externalversions/networking/v1"
|
||||||
listersv1 "github.com/alibaba/higress/client/pkg/listers/networking/v1"
|
listersv1 "github.com/alibaba/higress/client/pkg/listers/networking/v1"
|
||||||
|
"github.com/alibaba/higress/pkg/ingress/kube/common"
|
||||||
"github.com/alibaba/higress/pkg/ingress/kube/controller"
|
"github.com/alibaba/higress/pkg/ingress/kube/controller"
|
||||||
kubeclient "github.com/alibaba/higress/pkg/kube"
|
kubeclient "github.com/alibaba/higress/pkg/kube"
|
||||||
)
|
)
|
||||||
|
|
||||||
type McpBridgeController controller.Controller[listersv1.McpBridgeLister]
|
type McpBridgeController controller.Controller[listersv1.McpBridgeLister]
|
||||||
|
|
||||||
func NewController(client kubeclient.Client, clusterId cluster.ID) McpBridgeController {
|
func NewController(client kubeclient.Client, options common.Options) McpBridgeController {
|
||||||
informer := client.HigressInformer().Networking().V1().McpBridges().Informer()
|
var informer cache.SharedIndexInformer
|
||||||
return controller.NewCommonController("mcpbridge", client.HigressInformer().Networking().V1().McpBridges().Lister(),
|
if options.WatchNamespace == "" {
|
||||||
informer, GetMcpBridge, clusterId)
|
informer = client.HigressInformer().Networking().V1().McpBridges().Informer()
|
||||||
|
} else {
|
||||||
|
informer = client.HigressInformer().InformerFor(&v1.McpBridge{}, func(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
||||||
|
return informersv1.NewMcpBridgeInformer(client, options.WatchNamespace, resyncPeriod, nil)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return controller.NewCommonController("mcpbridge", listersv1.NewMcpBridgeLister(informer.GetIndexer()), informer, GetMcpBridge, options.ClusterId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetMcpBridge(lister listersv1.McpBridgeLister, namespacedName types.NamespacedName) (controllers.Object, error) {
|
func GetMcpBridge(lister listersv1.McpBridgeLister, namespacedName types.NamespacedName) (controllers.Object, error) {
|
||||||
|
|||||||
@@ -15,15 +15,14 @@
|
|||||||
package secret
|
package secret
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/alibaba/higress/pkg/ingress/kube/common"
|
||||||
"github.com/alibaba/higress/pkg/ingress/kube/controller"
|
"github.com/alibaba/higress/pkg/ingress/kube/controller"
|
||||||
"istio.io/istio/pkg/cluster"
|
|
||||||
"istio.io/istio/pkg/config/schema/gvr"
|
"istio.io/istio/pkg/config/schema/gvr"
|
||||||
schemakubeclient "istio.io/istio/pkg/config/schema/kubeclient"
|
schemakubeclient "istio.io/istio/pkg/config/schema/kubeclient"
|
||||||
kubeclient "istio.io/istio/pkg/kube"
|
kubeclient "istio.io/istio/pkg/kube"
|
||||||
"istio.io/istio/pkg/kube/controllers"
|
"istio.io/istio/pkg/kube/controllers"
|
||||||
ktypes "istio.io/istio/pkg/kube/kubetypes"
|
ktypes "istio.io/istio/pkg/kube/kubetypes"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
"k8s.io/apimachinery/pkg/fields"
|
"k8s.io/apimachinery/pkg/fields"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
listersv1 "k8s.io/client-go/listers/core/v1"
|
listersv1 "k8s.io/client-go/listers/core/v1"
|
||||||
@@ -31,17 +30,17 @@ import (
|
|||||||
|
|
||||||
type SecretController controller.Controller[listersv1.SecretLister]
|
type SecretController controller.Controller[listersv1.SecretLister]
|
||||||
|
|
||||||
func NewController(client kubeclient.Client, clusterId cluster.ID) SecretController {
|
func NewController(client kubeclient.Client, options common.Options) SecretController {
|
||||||
opts := ktypes.InformerOptions{
|
opts := ktypes.InformerOptions{
|
||||||
Namespace: metav1.NamespaceAll,
|
Namespace: options.WatchNamespace,
|
||||||
Cluster: clusterId,
|
Cluster: options.ClusterId,
|
||||||
FieldSelector: fields.AndSelectors(
|
FieldSelector: fields.AndSelectors(
|
||||||
fields.OneTermNotEqualSelector("type", "helm.sh/release.v1"),
|
fields.OneTermNotEqualSelector("type", "helm.sh/release.v1"),
|
||||||
fields.OneTermNotEqualSelector("type", string(v1.SecretTypeServiceAccountToken)),
|
fields.OneTermNotEqualSelector("type", string(v1.SecretTypeServiceAccountToken)),
|
||||||
).String(),
|
).String(),
|
||||||
}
|
}
|
||||||
informer := schemakubeclient.GetInformerFilteredFromGVR(client, opts, gvr.Secret)
|
informer := schemakubeclient.GetInformerFilteredFromGVR(client, opts, gvr.Secret)
|
||||||
return controller.NewCommonController("secret", listersv1.NewSecretLister(informer.Informer.GetIndexer()), informer.Informer, GetSecret, clusterId)
|
return controller.NewCommonController("secret", listersv1.NewSecretLister(informer.Informer.GetIndexer()), informer.Informer, GetSecret, options.ClusterId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetSecret(lister listersv1.SecretLister, namespacedName types.NamespacedName) (controllers.Object, error) {
|
func GetSecret(lister listersv1.SecretLister, namespacedName types.NamespacedName) (controllers.Object, error) {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ package secret
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/alibaba/higress/pkg/ingress/kube/common"
|
||||||
"reflect"
|
"reflect"
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
@@ -43,7 +44,7 @@ var period = time.Second
|
|||||||
|
|
||||||
func TestController(t *testing.T) {
|
func TestController(t *testing.T) {
|
||||||
client := kubeclient.NewFakeClient()
|
client := kubeclient.NewFakeClient()
|
||||||
ctrl := NewController(client, "fake-cluster")
|
ctrl := NewController(client, common.Options{ClusterId: "fake-cluster"})
|
||||||
|
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
t.Cleanup(func() {
|
t.Cleanup(func() {
|
||||||
|
|||||||
@@ -15,21 +15,33 @@
|
|||||||
package wasmplugin
|
package wasmplugin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"istio.io/istio/pkg/cluster"
|
"time"
|
||||||
|
|
||||||
"istio.io/istio/pkg/kube/controllers"
|
"istio.io/istio/pkg/kube/controllers"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/client-go/tools/cache"
|
||||||
|
|
||||||
|
v1 "github.com/alibaba/higress/client/pkg/apis/extensions/v1alpha1"
|
||||||
|
"github.com/alibaba/higress/client/pkg/clientset/versioned"
|
||||||
|
informersv1 "github.com/alibaba/higress/client/pkg/informers/externalversions/extensions/v1alpha1"
|
||||||
listersv1 "github.com/alibaba/higress/client/pkg/listers/extensions/v1alpha1"
|
listersv1 "github.com/alibaba/higress/client/pkg/listers/extensions/v1alpha1"
|
||||||
|
"github.com/alibaba/higress/pkg/ingress/kube/common"
|
||||||
"github.com/alibaba/higress/pkg/ingress/kube/controller"
|
"github.com/alibaba/higress/pkg/ingress/kube/controller"
|
||||||
kubeclient "github.com/alibaba/higress/pkg/kube"
|
kubeclient "github.com/alibaba/higress/pkg/kube"
|
||||||
)
|
)
|
||||||
|
|
||||||
type WasmPluginController controller.Controller[listersv1.WasmPluginLister]
|
type WasmPluginController controller.Controller[listersv1.WasmPluginLister]
|
||||||
|
|
||||||
func NewController(client kubeclient.Client, clusterId cluster.ID) WasmPluginController {
|
func NewController(client kubeclient.Client, options common.Options) WasmPluginController {
|
||||||
informer := client.HigressInformer().Extensions().V1alpha1().WasmPlugins().Informer()
|
var informer cache.SharedIndexInformer
|
||||||
return controller.NewCommonController("wasmplugin", client.HigressInformer().Extensions().V1alpha1().WasmPlugins().Lister(),
|
if options.WatchNamespace == "" {
|
||||||
informer, GetWasmPlugin, clusterId)
|
informer = client.HigressInformer().Extensions().V1alpha1().WasmPlugins().Informer()
|
||||||
|
} else {
|
||||||
|
informer = client.HigressInformer().InformerFor(&v1.WasmPlugin{}, func(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
||||||
|
return informersv1.NewWasmPluginInformer(client, options.WatchNamespace, resyncPeriod, nil)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return controller.NewCommonController("wasmplugin", listersv1.NewWasmPluginLister(informer.GetIndexer()), informer, GetWasmPlugin, options.ClusterId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetWasmPlugin(lister listersv1.WasmPluginLister, namespacedName types.NamespacedName) (controllers.Object, error) {
|
func GetWasmPlugin(lister listersv1.WasmPluginLister, namespacedName types.NamespacedName) (controllers.Object, error) {
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import (
|
|||||||
|
|
||||||
"istio.io/istio/pilot/pkg/model"
|
"istio.io/istio/pilot/pkg/model"
|
||||||
istiomodel "istio.io/istio/pilot/pkg/model"
|
istiomodel "istio.io/istio/pilot/pkg/model"
|
||||||
"istio.io/istio/pkg/cluster"
|
|
||||||
"istio.io/istio/pkg/config"
|
"istio.io/istio/pkg/config"
|
||||||
"istio.io/istio/pkg/config/schema/collection"
|
"istio.io/istio/pkg/config/schema/collection"
|
||||||
"istio.io/istio/pkg/config/schema/gvk"
|
"istio.io/istio/pkg/config/schema/gvk"
|
||||||
@@ -45,13 +44,13 @@ type IngressTranslation struct {
|
|||||||
higressDomainCache model.IngressDomainCollection
|
higressDomainCache model.IngressDomainCollection
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewIngressTranslation(localKubeClient kube.Client, xdsUpdater istiomodel.XDSUpdater, namespace string, clusterId cluster.ID) *IngressTranslation {
|
func NewIngressTranslation(localKubeClient kube.Client, xdsUpdater istiomodel.XDSUpdater, namespace string, options common.Options) *IngressTranslation {
|
||||||
if clusterId == "Kubernetes" {
|
if options.ClusterId == "Kubernetes" {
|
||||||
clusterId = ""
|
options.ClusterId = ""
|
||||||
}
|
}
|
||||||
Config := &IngressTranslation{
|
Config := &IngressTranslation{
|
||||||
ingressConfig: ingressconfig.NewIngressConfig(localKubeClient, xdsUpdater, namespace, clusterId),
|
ingressConfig: ingressconfig.NewIngressConfig(localKubeClient, xdsUpdater, namespace, options),
|
||||||
kingressConfig: ingressconfig.NewKIngressConfig(localKubeClient, xdsUpdater, namespace, clusterId),
|
kingressConfig: ingressconfig.NewKIngressConfig(localKubeClient, xdsUpdater, namespace, options),
|
||||||
}
|
}
|
||||||
return Config
|
return Config
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user