Комментарии 11
Про kubed вы неправильно написали "т.к. он полагается на лейблы, которые нужно проставить как на сами Secret или ConfigMap, так и на неймспейсы, в которые их нужно скопировать.", он может синхронизировать в любые НС без того чтобы давать аннотацию неймспейсам. Нужно только для секрета указать аннотацию, обычно нет проблем указать аннотацию ресурсы которым управляете вы сами.
If a ConfigMap or a Secret has the annotation
kubed.appscode.com/sync: "", Kubed will create a copy of that ConfigMap/Secret in all existing namespaces. Kubed will also create this ConfigMap/Secret, when you create a new namespace.Так же он может и между кластерами, но я не пробовал
Для получения секрета из волта или других мест есть https://external-secrets.io/
Мы какое то время назад тоже делали чтото подобное и как минимум у вас не хватает еще в реализации списка исключений, чтобы были правила не только в какие НС синкать, но и наоборот, какие нужно исключить
Да, я согласен, что в kubed есть возможность синхронизировать secret или configmap по всем неймспейсам сразу. Но это не подходит для нас. Для нас важно было копировать TLS-сертификат между неймспейсами "текущего" проекта. То есть, например, есть проект A и он раскладывается по веткам на домены main.projectA.example.com, feature-1.projectA.example.com, feature-2.projectA.example.com и т.д. Сертификат для *.projectA.example.com должен быть выпущен в единственном экземпляре (мы условились что будем это делать для ветки main) и в остальные фича-бранчи сертификат должен быть скопирован. А каждая фича-бранч раскладывается в отдельном неймспейса, поэтому нужно уметь указать в какие нс копировать. Ну и нам этот сертификат не нужен, например в неймспейсах для проекта B. Поэтому в общем единственный возможный сценарий использования kubed - это прослатвлять лейблы на нс, а это затруднительно для нас было.
Спасибо за ссылку!
Согласен, пока просто такого сценария у нас не возникало, но добавить можно, спасибо.
А kyverno не рассматривали?
https://kyverno.io/policies/other/sync_secrets/sync_secrets/
Не рассматривали, спасибо за ссылку. Правда не до конца понимаю, как с помощью kyverno в данном случае решить наш сценарий - чтобы Secret копировался только в нужные неймспейсы, а не во все?
У меня так - создается ns, вешается лейбл на него, kyverno переносит секрет
Hidden text
- name: sync-pullsecret
match:
any:
- resources:
kinds:
- Namespace
selector:
matchLabels:
pullsecret-rollout: "true"
generate:
kind: Secret
name: reg-pullsecret
namespace: "{{request.object.metadata.name}}"
synchronize: true
clone:
namespace: default
name: reg-pullsecretПолучается нужно все равно вешать лейблы на неймспейсы? Это нас как раз не устраивало в том же kubed - хотелось просто описать регулярку, под которую должны попадать нс-ы, чтоб сикрет в них прилетал.
Я просто оставлю это здесь
https://letsencrypt.org/docs/faq/#does-let-s-encrypt-issue-wildcard-certificates
Зачем мы сделали собственный контроллер для копирования секретов в Kubernetes