2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

oci-secrets-store-csi-driver-providerでKubernetes Secretと同期する方法

Last updated at Posted at 2023-04-06

はじめに

以前に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

これをapplyします。

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として同期します。
ちなみにこのManifestをapplyすると、定義した名前でKubernetes Secretが自動的に作成されます。

まとめ

以上が、oci-secrets-store-csi-driver-providerを利用してKubernetes SecretとOCI Vaultのシークレットを同期する方法です。
これを利用すると、oci-secrets-store-csi-driver-providerのユースケースがさらに広がりますね!!

参考資料

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?