你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
可以在四个位置配置 SSE:创建或更新扩展、资源、 AKVSyncSecretSync kubernetes 资源和 kubernetes 资源 SecretProviderClass 时提供给 Arc 基础结构的配置设置。
Arc 扩展配置设置
可以在创建 SSE Arc 扩展实例时设置配置设置,也可以稍后进行更新。 分别用于--configuration-settings <setting>=<value>az k8s-extension create ...或az k8s-extension update ...创建或更新 SSE 实例。
SSE 接受以下 Arc 扩展配置参数:
| 参数名称 | DESCRIPTION | 默认值 |
|---|---|---|
rotationPollIntervalInSeconds |
指定 SSE 检查或更新其管理机密的频率。 |
3600(1 小时) |
enablePartialSecretSync |
false仅当成功从 Azure Key Vault (AKV) 提取每个包含的项时,才会更新机密。
true如果机密中的每个项成功提取,则更新机密中的每个项时,而不考虑机密中的其他项是否成功。 |
true |
jitterSeconds |
指定最大附加 SecretSync 抖动。 SSE 等待 0 和 jitterSeconds 每次考虑 SecretSync 资源的随机时间。 每次更新 SecretSync 或经过之后 rotationPollIntervalInSeconds ,都会发生此延迟。 有关更多指南,请参阅 AKV 速率限制 。 |
0 (无抖动) |
AKVSync 资源(预览版)
AKVSync 资源通过将配置合并到单个资源中来简化最常见的 SSE 用例。 此单一资源更易于人工配置,并且不太容易出现不一致。 应用后, AKVSync 资源将转换为其等效 SecretSync 资源和资源 SecretProviderClass 。 请勿修改自动生成 SecretSync 的资源 SecretProviderClass ;它们将根据需要自动更新。
简化的配置是一项预览功能,可能受益于即将推出的版本中的细微更改。 直接配置样式仍可用于所有部署。
示例:
kind: AKVSync
apiVersion: secret-sync.x-k8s.io/v1alpha1
metadata:
name: my-akv-secrets
namespace: workload-namespace
spec:
keyvaultName: exampleKeyvault
clientID: "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
tenantID: "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
serviceAccountName: workload-serviceaccountname
objects:
- secretInAKV: "secret-A"
- secretInAKV: "secret-B"
kubernetesSecretName: "k8s-secret-b"
labels:
- test-label-0: "label-value-0"
annotations:
- test-annotation-0: "annotation-value-0"
versionHistory: 3
- kubernetesSecretName: "compound-secret"
mapping:
- dataKey: "username"
secretInAKV: secret-A
- dataKey: "password"
secretInAKV: secret-B
version: 1
价值观
-
metadata.name(必需):此
AKVSync资源的名称。
在 .spec 中:
serviceAccountName(必需):用于访问 Kubernetes 机密存储的 Kubernetes 服务帐户。 此服务帐户应与托管标识联合,并有权访问 Azure Key Vault 中的机密。
clientID(必需):有权访问所需机密的托管标识的 clientID。 此托管标识必须具有与命名服务帐户关联的联合凭据。
tenantID(必需):包含 AKV 实例的 Azure 租户的 ID。
keyvaultName(必需):密钥保管库的名称。
objects(required):项列表(secretInAKV 或 kubernetesSecretName)。 项可以是从 AKV 提取的机密,也可以是可能包含 AKV 中许多项的复杂“复合机密”。
secretInAKV(可选):应从 AKV 中提取的机密的名称。
- kubernetesSecretName(可选):新 Kubernetes 机密的名称。
- labels(可选):要应用于机密对象的附加标签的键值对列表。
- annotations(可选):要应用于机密对象的附加批注的键值对列表。
- versionHistory(可选):默认值为 1。 SSE 从 AKV 下载此多版本的机密。 版本存储在 Kubernetes 机密中,其密钥名为“v0”、“v1”、“v2”等,“v0”是最新版本。
kubernetesSecretName(可选):定义 Kubernetes 中复合机密的名称,该机密可以包含任意数量的项。 在这种情况下,无法使用 versionHistory。 如果需要多个版本,则必须显式枚举它们。 可以选择指定 标签 和 批注。
-
mapping(required):数据键及其 AKV 源的列表。 没有默认键。
dataKey(必需):Kubernetes 机密中保存从 AKV 提取的机密的数据密钥的名称。
secretInAKV(必需):应从 AKV 提取并存储在指定数据密钥中的机密的名称。
version(可选):要从 AKV 提取的机密的版本。 0 是最新版本,1 是第二个最新版本,等等。
-
mapping(required):数据键及其 AKV 源的列表。 没有默认键。
SecretSync 资源
SecretSync 资源配置 SSE 如何将机密和证书存储在 Kubernetes 机密存储中。 每个 SecretSync 资源定义一个 Kubernetes 机密,尽管它可能包含多个机密。
示例:
apiVersion: secret-sync.x-k8s.io/v1alpha1
kind: SecretSync
metadata:
name: secret-sync-name
namespace: workload-namespace
spec:
serviceAccountName: workload-serviceaccountname
secretProviderClassName: secret-provider-class-name
secretObject:
type: Opaque
data:
- sourcePath: aSecret/0
targetKey: aSecret-data-key0
- sourcePath: aSecret/1
targetKey: aSecret-data-key1
labels:
- fromExample: absolutelyYes
annotations:
- exampleAnnotation: annotationValue
forceSynchronization: ArbitraryValue12354
价值观
- metadata.name(必需):此 SecretSync 资源的名称。 注意:自动创建的机密资源的名称与此资源相同。
在 .spec 中:
- serviceAccountName(必需):用于访问 Kubernetes 机密存储的 Kubernetes 服务帐户。 此服务帐户应与托管标识联合,并有权访问 Azure Key Vault 中的机密。
- secretProviderClassName(必需):用于定义从 Azure Key Vault 提取的机密的 SecretProviderClass 资源的名称。
-
secretObject(必需):定义存储的机密资源的结构。
-
type(required):Kubernetes 机密对象的类型。 将此字段设置为
Opaque不带强制结构的常规用途机密。 请参阅 Kubernetes 机密类型 ,获取有关如何构建特殊用途机密类型的指南。 -
data(必需):机密资源中的数据项列表。 必须至少有一项。 每个数据项必须包含以下两个字段:
-
sourcePath(必需):从 AKV 提取的项的路径。 从 AKV 提取命名机密的一个版本时,路径就是这样
<secret name>。
如果从 AKV 提取了多个命名机密版本,则最新版本的 sourcePath 为<secret name>/0、第二个最新版本<secret name>/1等。
从 AKV 提取证书时,sourcePaths 取决于 SecretProviderClass 中的值objectType。objectType当 SPC 中的密钥为“机密”时,证书和私钥在 sourcePaths<secret name>/tls.crt中<secret name>/tls.key以及分别提供。 - targetKey(必需):要将数据存储到的 Kubernetes 机密对象中的密钥。
-
sourcePath(必需):从 AKV 提取的项的路径。 从 AKV 提取命名机密的一个版本时,路径就是这样
- labels(可选):要应用于机密对象的附加标签的键值对列表。
- annotations(可选):要应用于机密对象的附加批注的键值对列表。
- forceSynchronization(可选):更改此字段会触发 SSE 以重新检查 AKV 中的更改。 如果 SSE 找到更新的数据,Kubernetes 会像往常一样更新。 此字段的值不会影响 SSE 的行为方式。
-
type(required):Kubernetes 机密对象的类型。 将此字段设置为
SecretProviderClass 资源
SecretProviderClass 资源配置从 Azure Key Vault 提取的内容和方法。 此引用仅涵盖 SecretProviderClass 的 SSE 用例所需的字段。
示例:
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: secret-provider-class-name
namespace: workload-namespace
spec:
provider: azure
parameters:
clientID: "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
tenantID: "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
keyvaultName: exampleKeyvault
objects: |
array:
- |
objectName: aSecret
objectType: secret
objectVersionHistory: 2
- |
objectName: aCertificate
objectType: secret
价值观
在 .spec 中:
-
provider(必需):使用 SSE 从 Azure Key Vault 提取机密时,请将此字段设置为此字段
azure。 -
parameters(required):定义从中提取 AKV 机密的方式和位置。
- clientID(必需):有权访问所需机密的托管标识的 clientID。 此托管标识必须具有与使用此 SecretProviderClass 的 SecretSync 资源中命名的服务帐户关联的联合凭据。
- tenantID(必需):包含 AKV 实例的 Azure 租户的 ID。
- keyvaultName(必需):keyvault 的名称。
-
objects(必需):一个 字符串 ,包含一个 YAML 片段,表示要从此 AKV 提取的项。 请密切关注该示例,了解对象字段的构造方式。 可以在 AKV 提供程序文档中找到用于 Azure Key Vault 的 SecretProviderClass 资源的其他示例。 对象 必须在“array”子对象中至少包含一个项。
- objectName(必需):要从 AKV 提取的机密或证书的名称。
-
objectType(必需):从 AKV 提取机密时将此字段设置为
secret此字段。
提取证书时,将此字段设置为:-
cert(仅提取证书)。 -
key仅提取证书的公钥。 -
secret获取证书 和 私钥。
-
- objectVersionHistory(可选):如果存在且大于一个,则从 AKV 提取此多个版本,从最新版本开始。