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