使用oci-secrets-store-csi-driver-provider与Kubernetes Secret进行同步的方法
首先
以前我写过一篇关于在OKE上使用oci-secrets-store-csi-driver-provider的文章。
在这篇文章中,我介绍了将OCI Vault中存储的秘钥挂载到Pod并使用的方法。
然而,实际情况中,有些容器应用程序或中间件可能会强制从环境变量中读取凭据,或者这种方式更加方便的情况也是存在的。
因此,本次我们将使用oci-secrets-store-csi-driver-provider来同步Kubernetes Secret和OCI Vault的密钥。
构建环境
本次将省略环境搭建步骤,直接从oci-secrets-store-csi-driver-provider已安装的地方开始进行。有关环境搭建请参阅上一篇文章。
oci-secrets-store-csi-driver-providerの再インストール
OCI VaultとKubernetes Secretを同期するためのsyncSecretはオプションになるので、インストール時に有効化するフラグを設定する必要があります。
前回はHelmでインストールを行いましたが、今回もHelmを利用して再インストールしたいと思います。
helm upgrade --install oci-provider oci-provider/oci-secrets-store-csi-driver-provider --namespace kube-system --set secrets-store-csi-driver.syncSecret.enabled=true
这个重新安装已经完成了。
编辑SecretProviderClass
为了使用syncSecret,需要稍微更改之前定义的SecretProviderClass的内容。
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: test-oci-provider-class
spec:
provider: oci
secretObjects:
- secretName: sample-secret ## ここにSync対象のKubernetes Secret名を指定
type: Opaque ## Kubernetes Secretのデータタイプを指定
data:
- key: some-creds # Kubernetes Secretのキー名
objectName: oke # Sync対象のVaultのシークレット名
parameters:
secrets: |
- name: oke
stage: LATEST
vaultId: <OCI VaultのOCID>
authType: instance
我会申请这个。
Pod側の設定
Pod这一侧也需要进行一些调整。
这次我们将将同步目标Kubernetes Secret作为名为SECRET_DATA的环境变量来读取。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21.4-alpine
ports:
- containerPort: 80
resources:
limits:
memory: 128Mi
cpu: 200m
env:
- name: SECRET_DATA ## 従来通りのSecretの定義
valueFrom:
secretKeyRef:
name: sample-secret
key: some-creds
volumeMounts: ## 必ずマウントが必要
- name: sample-secret
mountPath: '/mnt/secrets-store'
readOnly: true
volumes: ## 必ずマウントが必要
- name: sample-secret
csi:
driver: 'secrets-store.csi.k8s.io'
readOnly: true
volumeAttributes:
secretProviderClass: 'test-oci-provider-class'
由于使用了csi-driver-provider,所以需要定义卷挂载。OCI Vault的机密本身作为卷被挂载,并将其内容与Kubernetes Secret同步。顺便提一下,当应用此清单时,将自动创建以定义的名称命名的Kubernetes Secret。
結論
通过使用oci-secrets-store-csi-driver-provider,可以实现Kubernetes Secret和OCI Vault的密钥同步。利用这个方法,可以进一步扩大oci-secrets-store-csi-driver-provider的用途范围!
请参考下列资料。