VPC環境で利用できます。
Ncloud Kubernetes Serviceで Secret Managerと連携して Secretを使用できます。
Secret Managerで Secretを作成
Secret Manager ご利用ガイドを参照して my-secret Secretを作成し、idと passwordを Keyとする Valueを登録します。
Secret Managerに登録された Secret全体をマウントして使用
- SecretProviderClassの作成
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: my-secret
namespace: default
spec:
provider: ncp
parameters:
objects: |
- objectName: "my-secret"
objectType: "secretmanager"
path: "my-secret.txt"
- SecretProviderClassをマウントして使用する Podを作成
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: default
spec:
containers:
- name: my-pod
command: [ "sleep", "1000000" ]
image: busybox
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: "/var/secrets"
name: my-secret
volumes:
- name: my-secret
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "my-secret"
- Podにアクセスして Secretが正常にマウントされたか確認
$ kubectl exec my-pod -- ls /var/secrets
my-secret.txt
$ kubectl exec my-pod -- cat /var/secrets/my-secret.txt
{"id": "my-id", "password": "my-password"}
Secret Managerに登録された Secretの特定 Keyを使用してマウント
- SecretProviderClassの作成
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: my-secret
namespace: default
spec:
provider: ncp
parameters:
objects: |
- objectName: "my-secret"
objectType: "secretmanager"
secretKey: "id"
path: "id.txt"
- objectName: "my-secret"
objectType: "secretmanager"
secretKey: "password"
path: "password.txt"
- SecretProviderClassをマウントして使用する Podを作成
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: default
spec:
containers:
- name: my-pod
command: [ "sleep", "1000000" ]
image: busybox
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: "/var/secrets"
name: my-secret
volumes:
- name: my-secret
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "my-secret"
- Podにアクセスして Secretが正常にマウントされたか確認
$ kubectl exec my-pod -- ls /var/secrets
id.txt
password.txt
$ kubectl exec my-pod -- cat /var/secrets/id.txt
my-id
$ kubectl exec my-pod -- cat /var/secrets/password.txt
my-password
Secret Managerに登録された Secretを Kubernetes Secretと同期
Secret Managerに登録された Secretを Kubernetes Secretと同期するには、必ずその Secretが Podにマウントされている必要があります。
- SecretProviderClassの作成
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: my-secret
namespace: default
spec:
provider: ncp
parameters:
objects: |
- objectName: "my-secret"
objectType: "secretmanager"
path: "my-secret.txt"
secretObjects:
- secretName: my-secret
type: Opaque
data:
- objectName: my-secret.txt
key: my-key
- SecretProviderClassをマウントして使用する Podを作成
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: default
spec:
containers:
- name: my-pod
command: [ "sleep", "1000000" ]
image: busybox
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: "/var/secrets"
name: my-secret
volumes:
- name: my-secret
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "my-secret"
- 当該 Secretが正常に作成されたか確認
$ kubectl get secret my-secret -o yaml
apiVersion: v1
data:
my-key: eyJpZCI6ICJteS1pZCIsICJwYXNzd29yZCI6ICJteS1wYXNzd29yZCJ9
kind: Secret
metadata:
labels:
secrets-store.csi.k8s.io/managed: "true"
name: my-secret
namespace: default
ownerReferences:
- apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClassPodStatus
name: my-pod-default-my-secret
type: Opaque