使用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的用途范围!

请参考下列资料。

 

广告
将在 10 秒后关闭
bannerAds