2 回答

TA貢獻1805條經驗 獲得超10個贊
根據這個github源代碼,您應該能夠使用EnqueueRequestForObject
. 但是,不可能(目前)只關注特定的秘密 CRUD 更改。
EnqueueRequestForObject以監視您的 CRD 資源更改。在您的 CRD 協調器中,您將使用基于搜索定義的標簽選擇器獲取所有 TLS 機密,然后使用匹配的機密運行您的合并邏輯。
EnqueueRequestFromMapFunc以監視秘密更改并觸發一個或多個 CR 的協調。在您的映射器函數中,您將獲取所有 CR。對于每個具有與傳遞的秘密匹配的搜索定義的 CR,您將為 CR 創建一個新的 reconcile.Request,并返回請求列表,這將為每個匹配的 CR 觸發您的 CRD 協調器。
最干凈的方法是使用標簽選擇器,然后將結果與現有代碼合并。這篇文章中給出了使用標簽選擇器的示例:
func GetSecret(version string) (retVal interface{}, err error){
clientset := GetClientOutOfCluster()
labelSelector := metav1.LabelSelector{MatchLabels: map[string]string{"version":version}}
listOptions := metav1.ListOptions{
LabelSelector: labels.Set(labelSelector.MatchLabels).String(),
Limit: 100,
}
secretList, err := clientset.CoreV1().Secrets("namespace").List(listOptions)
retVal = secretList.Items[0]
return retVal, err
}

TA貢獻1829條經驗 獲得超13個贊
這是可能的,以一種迂回的方式。您需要將選擇器配置到用于設置協調器的控制器管理器中。
您可以為此使用標簽或字段選擇器。您可以使用 為所有類型的對象設置相同的選擇器DefaultSelector,也可以SelectorsByObject為不同類型的對象設置不同的選擇器。
import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/selection"
"k8s.io/client-go/rest"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/cache"
"sigs.k8s.io/controller-runtime/pkg/manager"
)
func startReconciler(cnf *rest.Config) error {
mgr, err := ctrl.NewManager(cnf, manager.Options{
NewCache: func(conf *rest.Config, opts cache.Options) (cache.Cache, error) {
// Use this selector for everything that is not mentioned in SelectorsByObject
opts.DefaultSelector = cache.ObjectSelector{
Label: labels.SelectorFromSet(labels.Set{"foo": "bar"}),
}
// Specific selectors per type of object
opts.SelectorsByObject[&corev1.Secret{}] = cache.ObjectSelector{
Label: labels.SelectorFromSet(labels.Set{"foo": "bar"}),
}
return cache.New(conf, opts)
},
})
if err != nil {
return err
}
r := &InvReconciler{}
if err := r.SetupWithManager(mgr); err != nil {
return err
}
- 2 回答
- 0 關注
- 178 瀏覽
添加回答
舉報