kubectl get all -n vault

kubectl -n vault get pods -l app.kubernetes.io/name=vault

kubectl -n vault exec -it vault-0 -- vault status
─╯
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.12.1
Build Date 2022-10-27T12:32:05Z
Storage Type consul
Cluster Name vault-cluster-ea7219cc
Cluster ID 4afce6a6-85d6-c02d-2034-4d962ca11604
HA Enabled true
HA Cluster <https://vault-0.vault-internal:8201>
HA Mode active
Active Since 2023-03-28T04:26:02.952116118Z
...
kubectl -n vault exec -it vault-1 -- vault status
...

CLI :
kubectl -n vault get secrets vault-credential -o jsonpath='{.data.vt-root-key\\.txt}' | base64 -D
> hvs.xxxxx
...
CLUSTER_ROOT_TOKEN=$(kubectl -n vault get secrets vault-credential -o jsonpath='{.data.vt-root-key\\.txt}' | base64 -D)
echo $(CLUSTER_ROOT_TOKEN)
kubectl -n vault exec vault-0 -- vault login $CLUSTER_ROOT_TOKEN
...
kubectl -n vault exec vault-1 -- vault login $CLUSTER_ROOT_TOKEN
...

kubectl -n vault exec -it vault-0 -- /bin/sh
...
kubectl -n vault exec -it vault-1 -- /bin/sh
...
WEB : 아래 도메인과 포트 8200 으로 접속
root-token 확인 >
kubectl -n vault get secrets vault-credential -o jsonpath='{.data.vt-root-key\\.txt}' | base64 -D

# 클러스터로 구성된 vault 아무 서버나 접속하여 셋업 (ex: vault-0 OR vault-1 )
> kubectl -n vault exec -it vault-0 -- /bin/sh
# 예시: secret/test PATH 경로에 아래와 같은 key/vaule 셋업
vault kv put secret/test ID="test" password="passwd"
# 클러스터로 구성된 vault 아무 서버나 접속하여 셋업 (ex: vault-0 OR vault-1 )
❯ kubectl -n vault exec -it vault-1 -- /bin/sh ─╯
/ $ vault kv get secret/test
== Secret Path ==
secret/data/test
======= Metadata =======
Key Value
--- -----
created_time 2023-03-28T04:33:49.87741966Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 1
====== Data ======
Key Value
--- -----
ID test
password passwd
root 토큰으로 로그인 후, 아래와 같이 설정값 확인

# 예시
### step-0 ( vault policy 생성 : vault-side 작업 )
> kubectl -n vault exec -it vault-1 -- /bin/sh
vault policy write secret-read - <<EOF
path "secret/*" {
capabilities = ["read"]
}
EOF
#### step-1 ( vault role 생성 : vault-side 작업 )
# scret-read policy와 kubernetes interanl-app role 연결
# vault-test 네임스페이스에 vault-secret-read 서비스어카운트에게 권한부여
vault write auth/kubernetes/role/internal-app \\
bound_service_account_namespaces=vault \\
bound_service_account_names=vault \\
policies=secret-read \\
ttl=24h
##### 추가로 복수의 SA 및 NS 설정/수정 가능

#pod 배포 예시
apiVersion: v1
kind: Pod
metadata:
name: tested-app-vault-ky-payroll
namespace: vault # vault-role 에서 설정한 NS
labels:
app: payroll
annotations:
vault.hashicorp.com/agent-inject: 'true' # vault key/vaule data 삽입
vault.hashicorp.com/role: 'internal-app' # vault-role 에서 설정한 role 이름
vault.hashicorp.com/agent-inject-status: update # vault-agent 상태값
vault.hashicorp.com/agent-inject-secret-test: 'secret/test' # vault 에서 설정한 PATH
spec:
serviceAccountName: vault # vault-role 에서 설정한 SA
containers:
- name: payroll
image: jweissig/app:0.0.1
# 배포파드 내, vault key/vaule 주입경로
> /vault/< vault key/vaule PATH >
예시>
kubectl exec \\
$(kubectl get pod -l app=payroll -o jsonpath="{.items[0].metadata.name}" -n vault) \\
-c payroll -- cat /vault/secrets/test
data: map[ID:test password:passwd]
metadata: map[created_time:2023-03-28T04:33:49.87741966Z custom_metadata:<nil> deletion_time: destroyed:false version:1]
DONE.