Vault Secrets Store CSI provider 예시
Vault Secrets Store CSI provider 예시
다음 예시는 Vault Secrets Store CSI provider의 일반적인 사용법을 보여줍니다.
출처: 문서
본문
파일 기반 동적 데이터베이스 자격증명
다음 Secret Provider Class는 Vault에서 동적 데이터베이스 자격증명을 가져와 생성된 사용자 이름과 비밀번호를 추출합니다. 그런 다음 시크릿은 구성된 마운트 위치에 파일로 마운트됩니다.
---
apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: vault-db-creds
spec:
provider: vault
parameters:
roleName: 'app'
objects: |
- objectName: "dbUsername"
secretPath: "database/creds/db-app"
secretKey: "username"
- objectName: "dbPassword"
secretPath: "database/creds/db-app"
secretKey: "password"
다음으로, 이 Secret Provider Class를 사용해 파드의 시크릿을 채우는 파드를 만들 수 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
labels:
app: demo
spec:
selector:
matchLabels:
app: demo
replicas: 1
template:
metadata:
annotations:
labels:
app: demo
spec:
serviceAccountName: app
containers:
- name: app
image: my-app:1.0.0
volumeMounts:
- name: 'vault-db-creds'
mountPath: '/mnt/secrets-store'
readOnly: true
volumes:
- name: vault-db-creds
csi:
driver: 'secrets-store.csi.k8s.io'
readOnly: true
volumeAttributes:
secretProviderClass: 'vault-db-creds'
파드는 CSI 볼륨을 마운트하고 위에서 만든 Secret Provider Class(vault-db-creds)를 지정합니다. 그 프로바이더 클래스에서 만들어진 시크릿은 /mnt/secrets-store에 마운트됩니다. 이 파드가 생성되면 컨테이너는 시크릿을 담은 두 개의 파일을 찾게 됩니다.
/mnt/secrets-store/dbUsername/mnt/secrets-store/dbPassword
환경 변수 동적 데이터베이스 자격증명
다음 Secret Provider Class는 Vault에서 동적 데이터베이스 자격증명을 가져와 생성된 사용자 이름과 비밀번호를 추출합니다. 그런 다음 시크릿을 Kubernetes 시크릿에 동기화해 컨테이너에서 환경 변수로 마운트할 수 있게 합니다.
---
apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: vault-db-creds
spec:
provider: vault
secretObjects:
- secretName: vault-db-creds-secret
type: Opaque
data:
- objectName: dbUsername # References dbUsername below
key: username # Key within k8s secret for this value
- objectName: dbPassword
key: password
parameters:
roleName: 'app'
objects: |
- objectName: "dbUsername"
secretPath: "database/creds/db-app"
secretKey: "username"
- objectName: "dbPassword"
secretPath: "database/creds/db-app"
secretKey: "password"
다음으로, 이 Secret Provider Class를 사용해 파드의 환경에 시크릿을 채우는 파드를 만들 수 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
labels:
app: demo
spec:
selector:
matchLabels:
app: demo
replicas: 1
template:
metadata:
annotations:
labels:
app: demo
spec:
serviceAccountName: app
containers:
- name: app
image: my-app:1.0.0
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: vault-db-creds-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: vault-db-creds-secret
key: password
volumeMounts:
- name: 'vault-db-creds'
mountPath: '/mnt/secrets-store'
readOnly: true
volumes:
- name: vault-db-creds
csi:
driver: 'secrets-store.csi.k8s.io'
readOnly: true
volumeAttributes:
secretProviderClass: 'vault-db-creds'
파드는 CSI 볼륨을 마운트하고 위에서 만든 Secret Provider Class(vault-db-creds)를 지정합니다. 그 프로바이더 클래스에서 만들어진 시크릿은 /mnt/secrets-store에 마운트되며, 추가로 vault-db-creds-secret이라는 Kubernetes 시크릿이 생성되어 두 환경 변수에서 참조됩니다.