我有一个外部秘密存储-带有秘密密码的Azure密钥库。
我需要创建一个Kubernetes secret,包含多个字段: password -仅来自Azure密钥库,用户名硬编码,url硬编码,带有硬编码的注释和标签。
:
apiVersion: v1
kind: Secret
metadata:
name: my-external-secret
labels:
mylable: external
annotations:
myannotation: external
type: Opaque
stringData:
name: credentials
url: https://example.com
username: user
password: <from-Azure-Key-Vault>
我使用Azure Kubernetes服务。
与AKS集成的azure密钥库创建并控制秘密,因此您无法修改它。
我建议将非KV秘密移动到它们自己的秘密中,然后在您的部署中安装两个秘密。
这可以通过外部秘密轻松实现Kubernets集群中安装的软件。external-secrets支持许多不同的秘密存储,包括Azure密钥库。external-secrets有一个模板引擎,可以生成一个秘密与多个字段,标签和注释。
的例子:使用托管身份将外部秘密连接到密钥库
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
name: external-secrets-kv
namespace: myspace
spec:
provider:
azurekv:
authType: ManagedIdentity
identityId: "<ManagedIdentityID>"
vaultUrl: "https://<keyvault-name>.vault.azure.net"
现在让我们创建一个带有注释、标签和多个字段的模板:
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: template-my-external-secret
namespace: myspace
spec:
refreshInterval: 1h
secretStoreRef:
kind: SecretStore
name: external-secrets-kv
target:
name: my-external-secret
template:
type: Opaque
engineVersion: v2
metadata:
labels:
mylable: external
annotations:
myannotation: external
data:
name: credentials
url: https://example.com
password: '{{ .password }}'
username: '{{ .username }}'
data:
- secretKey: password
remoteRef:
key: azure-kv-password
- secretKey: username
remoteRef:
key: azure-kv-username
,external-secrets将创建一个真正的秘密,用户名和密码字段的值来自Azure密钥库。
apiVersion: v1
kind: Secret
metadata:
name: my-external-secret
namespace: myspace
labels:
mylable: external
annotations:
myannotation: external
type: Opaque
stringData:
name: credentials
url: https://example.com
username: <from-Azure-Key-Vault>
password: <from-Azure-Key-Vault>