SecretsRefresh - это Custom Resource для автоматического отслеживания и обновления секретов в Kubernetes кластере.
- Фильтрация по неймспейсам: используйте
namespaceSelectorдля выбора неймспейсов по меткам - Фильтрация по секретам: используйте
secretSelectorдля выбора конкретных секретов внутри отфильтрованных неймспейсов - Автоматическое отслеживание: контроллер автоматически подписывается на изменения секретов в отфильтрованных неймспейсах
Отслеживание всех секретов с меткой refresh: enabled в неймспейсах с меткой watch-secrets: true:
apiVersion: traktor.gdxcloud.net/v1alpha1
kind: SecretsRefresh
metadata:
name: secretsrefresh-simple
spec:
namespaceSelector:
matchLabels:
watch-secrets: "true"
secretSelector:
matchLabels:
refresh: "enabled"
refreshInterval: "10m"Применение:
kubectl apply -f apps_v1alpha1_secretsrefresh_simple.yamlПодготовка неймспейса:
# Создать неймспейс с нужной меткой
kubectl create namespace my-namespace
kubectl label namespace my-namespace watch-secrets=true
# Создать секрет с нужной меткой
kubectl create secret generic my-secret \
--from-literal=key=value \
-n my-namespace
kubectl label secret my-secret refresh=enabled -n my-namespaceОтслеживание секретов в production неймспейсах для команд backend и frontend:
apiVersion: traktor.gdxcloud.net/v1alpha1
kind: SecretsRefresh
metadata:
name: secretsrefresh-sample
spec:
namespaceSelector:
matchLabels:
environment: production
matchExpressions:
- key: team
operator: In
values:
- backend
- frontend
secretSelector:
matchLabels:
auto-refresh: "true"
refreshInterval: "5m"Применение:
kubectl apply -f apps_v1alpha1_secretsrefresh.yamlПодготовка неймспейсов:
# Backend production namespace
kubectl create namespace backend-prod
kubectl label namespace backend-prod environment=production team=backend
# Frontend production namespace
kubectl create namespace frontend-prod
kubectl label namespace frontend-prod environment=production team=frontend
# Создать секреты с auto-refresh
kubectl create secret generic db-credentials \
--from-literal=password=secret \
-n backend-prod
kubectl label secret db-credentials auto-refresh=true -n backend-prodЕсли не указать селекторы, будут отслеживаться все секреты во всех неймспейсах:
apiVersion: traktor.gdxcloud.net/v1alpha1
kind: SecretsRefresh
metadata:
name: secretsrefresh-all
spec:
refreshInterval: "15m"Проверить статус SecretsRefresh:
kubectl get secretsrefresh
kubectl describe secretsrefresh secretsrefresh-simpleПосмотреть логи контроллера:
kubectl logs -n traktor-system deployment/traktor-controller-manager -fИспользуется для фильтрации неймспейсов по меткам.
Поддерживаемые операторы:
In- метка должна быть в списке значенийNotIn- метка не должна быть в списке значенийExists- метка должна существоватьDoesNotExist- метка не должна существовать
Примеры:
# Только production
namespaceSelector:
matchLabels:
environment: production
# Production или staging
namespaceSelector:
matchExpressions:
- key: environment
operator: In
values:
- production
- staging
# Все, кроме development
namespaceSelector:
matchExpressions:
- key: environment
operator: NotIn
values:
- development
# Все с меткой 'team'
namespaceSelector:
matchExpressions:
- key: team
operator: ExistsАналогично namespaceSelector, но применяется к секретам внутри отфильтрованных неймспейсов.
Контроллер требует следующие права:
# Чтение SecretsRefresh CRD
- apiGroups: ["traktor.gdxcloud.net"]
resources: ["secretsrefreshes"]
verbs: ["get", "list", "watch"]
# Обновление статуса
- apiGroups: ["traktor.gdxcloud.net"]
resources: ["secretsrefreshes/status"]
verbs: ["get", "update", "patch"]
# Работа с секретами
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list", "watch", "update", "patch"]
# Чтение неймспейсов
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "list", "watch"]-
Проверьте метки на неймспейсах:
kubectl get namespaces --show-labels
-
Проверьте метки на секретах:
kubectl get secrets -n <namespace> --show-labels
-
Проверьте условия в статусе:
kubectl get secretsrefresh <name> -o jsonpath='{.status.conditions}' | jq
Проверьте логи:
kubectl logs -n traktor-system deployment/traktor-controller-managerПроверьте RBAC права:
kubectl get clusterrole manager-role -o yaml