Я работаю над пользовательским контроллером kubernetes, который создает секреты kubernetes на основе некоторых входных данных. Как часть этого контроллера требуется скопировать эти секреты в несколько пространств имен. Который это успешно делает.
Например,
CustomSecretGenerator
metadata:
names : mypersonalsecret
spec:
secret:
name: mysecret
namespace: default
target:
namespaces:
- dev
- personal
Выше - грубая CRD входа контроллера. Я могу копировать секреты из одного пространства имен в другое, указав ссылку на владельца на имя моего контроллера.
Моя проблема:
- Если я удалю секрет по умолчанию / mysecret, он будет сгенерирован автоматически (с логикой автогенерации). Но если я удаляю секрет в других пространствах имен, то есть dev / mysecret или personal / mysecret, контроллер не генерирует автоматически (с помощью логики автоматического генерирования). Я пытался перехватить все события, но подозреваю, что Контроллер не может наблюдать секрет, сгенерированный в целевом пространстве имен.
Вот блок кодов часов
err = c.Watch(&source.Kind{Type: &corev1.Secret{}}, &handler.EnqueueRequestForOwner{
IsController: true,
OwnerType: &appv1alpha1.MyCustomController{},
})
и это раздел метаданных для всех секретов, которые генерируются контроллером
name: mysecret
namespace: dev
ownerReferences:
- apiVersion: com.company.app/v1alpha1
blockOwnerDeletion: true
controller: true
kind: MyCustomController
name: example-customer-controller
uid: ed2fa8c5-6855-11e9-94c6-0050569d445e
Кроме того, мой контроллер работает в пространстве имен по умолчанию и играет роль со всем доступом к секретам.
EDIT:
Это часть кода, которая создает Секрет.
mySecret := &corev1.Secret{
TypeMeta: meta_v1.TypeMeta{
APIVersion: "v1",
Kind: "Secret",
},
ObjectMeta: meta_v1.ObjectMeta{
Name: secretName,
Namespace: secretNamespace,
Labels: labelsforRegistryToken(crt.Name),
},
Data: map[string][]byte{
v1.DockerConfigJsonKey: jsonValue,
},
Type: corev1.SecretTypeDockerConfigJson,
}
controllerutil.SetControllerReference(crt, mySecret, r.scheme)
ПРИМЕЧАНИЕ: crt
- это объект пользовательского контроллера, который управляет созданием объекта.
Я попытался скопировать ссылку на владельца из файла по умолчанию / mysecret в dev / mysecret, контроллер все еще не может обнаружить удаление dev / mysecret.