VPC 환경에서 이용 가능합니다.
Ncloud Kubernetes Service에서는 Secret Manager에 저장된 Secret을 연동하여 사용할 수 있습니다. 해당 기능은 Kubernetes에서 제공하는 Secrets 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의 알파 버전으로 제공되고 있으며 사용 전에 공식 가이드 참고 바랍니다.