Стадия жизненного цикла модуля: General Availability
Подключение внешнего плагина планировщика
Пример подключения внешнего плагина планировщика через вебхук.
apiVersion: deckhouse.io/v1alpha1
kind: KubeSchedulerWebhookConfiguration
metadata:
name: sds-replicated-volume
webhooks:
- weight: 5
failurePolicy: Ignore
clientConfig:
service:
name: scheduler
namespace: d8-sds-replicated-volume
port: 8080
path: /scheduler
caBundle: ABCD=
timeoutSeconds: 5
Защита ресурсов с чувствительными полями
Далее показан пример конфигурации с защитой чувствительных полей ресурсов с помощью feature gate CRDSensitiveData и маркера схемы x-kubernetes-sensitive-data.
Инструкция по включению защиты доступна в разделе «FAQ».
-
Включение шифрования etcd с помощью параметра
apiserver.encryptionEnabled. Это автоматически активирует feature gateCRDSensitiveDataдляkube-apiserver.apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: control-plane-manager spec: version: 2 enabled: true settings: apiserver: encryptionEnabled: true -
Определение чувствительных полей в конфигурации.
Поля, помеченные маркером
x-kubernetes-sensitive-data: true, будут шифроваться в etcd и удаляться из ответов API для вызывающих сторон без доступа к субресурсу<resource>/sensitive.apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: dbconfigs.example.com spec: group: example.com scope: Namespaced names: plural: dbconfigs singular: dbconfig kind: DbConfig versions: - name: v1 served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: host: type: string username: type: string password: type: string x-kubernetes-sensitive-data: true -
Создание кастомного ресурса с заполненными значениями в чувствительных полях.
apiVersion: example.com/v1 kind: DbConfig metadata: name: primary namespace: default spec: host: db.example.com username: admin password: s3cr3tПосле сохранения объект целиком шифруется в etcd, значение
passwordмаскируется в журнале аудита и удаляется из ответов API, если у вызывающей стороны нет доступа к субресурсуdbconfigs/sensitive. -
Настройка доступа к чувствительным полям с помощью RBAC через субресурс
<resource>/sensitive.# Обычная роль: может читать ресурс, но чувствительные поля будут удалены из ответа. apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: dbconfig-reader rules: - apiGroups: ["example.com"] resources: ["dbconfigs"] verbs: ["get", "list", "watch"] --- # Привилегированная роль: может читать полные данные, включая чувствительные поля. apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: dbconfig-sensitive-reader rules: - apiGroups: ["example.com"] resources: ["dbconfigs"] verbs: ["get", "list", "watch"] - apiGroups: ["example.com"] resources: ["dbconfigs/sensitive"] verbs: ["get", "list", "watch"] -
Результат защиты чувствительных полей.
-
Пользователь с ролью
dbconfig-reader, выполнивший командуd8 k get dbconfig primary -o json, увидит ресурс с удалёнными чувствительными полями:{ "spec": { "host": "db.example.com", "username": "admin" } } -
Пользователь с ролью
dbconfig-sensitive-readerувидит полные данные:{ "spec": { "host": "db.example.com", "username": "admin", "password": "s3cr3t" } } -
В журнале аудита значения чувствительных полей всегда маскируются, независимо от прав вызывающей стороны:
{ "spec": { "host": "db.example.com", "username": "admin", "password": "******" } }
-