VPC環境で利用できます。
Ncloud Kubernetes Serviceでは Secret Managerに保存された Secretを連携して使用できます。この機能は Kubernetesで提供する Screts Store CSI Driverと Ncloud Kubernetes Serviceで提供する secrets-store-csi-drvier-provider-ncpを通じて提供します。
制限事項
- Secret Managerは、韓国と日本リージョンでのみ提供します。
システム要件
- Secret Managerを使用している必要があります。
- サブアカウントの場合、Secret Managerを照会するために NCP_SECRETMANAGER_USER権限が必要です。
機能
- Secret Managerに保存された Secretを Podにボリュームとしてマウントして使用できます。
- Secret Managerに保存された Secretロテーションが発生する場合、Podにマウントされた Secretも自動的にロテーションできます。
- Secret Managerに保存された Secretを Kubernetesの Secretと同期できます。
インストール
Secret Manager連携のために secrets-store-csi-driverと secrets-store-csi-driver-provider-ncpをインストールします。
-
以下のコマンドを通じて secrets-store-csi-driverをインストールします。
- Secretロテーション機能を使用するには、
--set enableSecretRotation=true設定を追加します。 - Kubernetes Secret同期化機能を使用するには、
--set syncSecret.enabled=true設定を追加します。
$ helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts $ helm install csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver --namespace kube-system - Secretロテーション機能を使用するには、
-
Secret Manager API呼び出しのために認証情報を作成します。
- ncloud_access_key_id: Ncloud AcessKey
- ncloud_secret_access_key: Ncloud SecretKey
- secretmanager_api_url
- 韓国: https://ocapi-kr.ncloud.com/secretmanager/api/v1
- 日本: https://ocapi-jp.ncloud.com/secretmanager/api/v1
$ vi configure ncloud_access_key_id=<ACCESS_KEY_ID> ncloud_secret_access_key=<SECRET_ACESS_KEY> secretmanager_api_url=<SecretManager API URL> -
以下のコマンドを通じて認証情報を Kubernetes Secretで作成します。
$ kubectl -n kube-system create secret generic ncp-secrets-store-credentials --from-file=./configure -
以下のコマンドを通じて該当するリージョンの secrets-store-csi-driver-provider-ncpをインストールします。
# 韓国リージョン $ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://kr.object.ncloudstorage.com/nks-download/secrets-store-csi-driver-provider-ncp/pub/kr/v0.1.0/provider-ncp.yaml # 日本リージョン $ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://kr.object.ncloudstorage.com/nks-download/secrets-store-csi-driver-provider-ncp/pub/jp/v0.1.0/provider-ncp.yaml -
以下のコマンドを通じてインストールされた Podが正常に動作するか確認します。
$ kubectl -n kube-system get po -l app.kubernetes.io/instance=csi-secrets-store
$ kubectl -n kube-system get po -l app=secrets-store-csi-driver-provider-ncp
使用
SecretProviderClassの定義
SecretProviderClassを定義して Secret Managerと連携された Secretを使用できます。
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: my-secret
namespace: my-namespace
spec:
provider: ncp
parameters:
objects: |
- objectName: "my-secret"
objectType: "secretmanager"
path: "my-secret.txt"
- objectName: "my-secret"
objectType: "secretmanager"
secretKey: "id"
path: "id.txt"
- objectName: "my-secret"
objectType: "secretmanager"
secretKey: "password"
path: "password.txt"
secretObjects:
- secretName: my-secret
type: Opaque
data:
- objectName: my-secret.txt
key: my-key
- provider: ncp
- Objects: ファイルとしてマウントする Secretを定義します。
- objectName: SecretManagerに作成した Secret名
- objectType: secretmanager
- path: Podにマウントされるファイル名
- secretKey(任意項目): SecretManagerに保存された Secretの中から、その Keyの Valueのみ使用。定義しないとその Secretに保存されたすべての Key/Valueを JSON形式で使用
- secretObjects(任意項目): Kubernetes Secretと同期する場合に設定
- secretName: 作成される Kubernetes Secret
- data.objectName: Podにマウントされているファイル名(path)
- data.key: 作成された Secret dataの key名
Podマウント設定
Podの volumesに secretProviderClassを設定して使用できます。
volumes:
- name: my-secret
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "my-secret"
Secretマウントステータスの確認
SecretProviderClassPodStatusを照会して現在 Podにマウントされている Secretのステータスを確認できます。
$ kubectl get secretproviderclasspodstatuses <pod_name>-<namespace>-<secretproviderclass_name> -o yaml
...
status:
mounted: true
objects:
- id: secretmanager/my-secret
version: "1"
podName: my-pod
secretProviderClassName: my-secret
targetPath: /var/lib/kubelet/pods/1d401b1a-9a16-4335-b015-59e11e87b349/volumes/kubernetes.io~csi/my-secret/mount
Secretロテーション機能の使用
Secret Managerの Secretロテーション設定を参照して Secretロテーションを実行できます。Secret Managerの Secretをロテーションすると、その Secretにマウントされたファイルも自動的に同期します。この機能は secrets-store-csi-driverのアルファバージョンで提供されており、使用する前に公式ガイドをご参照ください。