Kubernetes 在与其自定义资源不同的命名空间中创建/监视资源的控制器

Kubernetes 在与其自定义资源不同的命名空间中创建/监视资源的控制器,kubernetes,kubebuilder,Kubernetes,Kubebuilder,我有一个控制器,用于协调“foo”命名空间中的MyKind自定义资源。在协调循环中,它在“bar”命名空间中创建部署MyDeployment。我想知道如何在“bar”命名空间中创建的MyDeployment上设置一个监视,它不同于自定义资源所在的命名空间(“foo”) 我尝试使用以下内容设置我的管理器,但它似乎不起作用,因为我尝试监视的部署位于不同的命名空间中,因此控制器无法接收部署上CRUD操作的任何事件 return controllerruntime.NewControllerMa

我有一个控制器,用于协调“foo”命名空间中的MyKind自定义资源。在协调循环中,它在“bar”命名空间中创建部署MyDeployment。我想知道如何在“bar”命名空间中创建的MyDeployment上设置一个监视,它不同于自定义资源所在的命名空间(“foo”)

我尝试使用以下内容设置我的管理器,但它似乎不起作用,因为我尝试监视的部署位于不同的命名空间中,因此控制器无法接收部署上CRUD操作的任何事件

    return controllerruntime.NewControllerManagedBy(mgr).
        For(&v1alpha1.MyKind{}).
        Owns(&appsv1.Deployment{}).
        Complete(r)
}
是否有任何自定义监视,我可以使用它配置控制器,以便在不同的命名空间中接收部署事件


注意:我尝试了handler.EnqueueRequestsFromMapFunc,IIUC它还可以协调同一名称空间中的种类。

您可以通过在创建对象时传入
ctrl.options{}
对象在管理器选项中指定名称空间

namespace := "namespace1,namespace2"
options := ctrl.Options{
        .
        .
        .
        Namespace: cache.MultiNamespacedCacheBuilder(strings.Split(namespace, ","))
    }

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)

您好,Hazim,谢谢您的快速回答,在启动管理器之前,名称空间是未知的,有什么方法可以在启动管理器后执行此操作吗?将
Namespace
属性设置为空字符串应该可以使控制器在所有名称空间中都可以查看。然后,您需要确保使用正确的RBAC部署它,允许它读取所有名称空间