我按照此文档创建了一个 GKE 集群 (1.13.6-gke.6),其--database-encryption-key
标志提供了一个 KMS 密钥,用于启用Application-layer Secrets Encryption。
我使用以下命令创建了一个秘密:
kubectl create secret generic dev-db-secret --from-literal=username=someuser --from-literal=password=somepass
因此,如果我的假设是正确的,这些秘密将使用我在创建集群时提供的 KMS 密钥加密存储。但是,即使在我销毁了所有使用密钥的版本之后,我也能够看到存储在 GKEetcd
中的秘密kubectl get secret dev-db-secret -o yaml
,并且我能够在使用以下清单创建的 pod 中看到它们:
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: mycontainer
image: redis
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: dev-db-secret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: test-secret
key: password
restartPolicy: Never
如果我执行到上面的 pod 并执行echo SECRET_USERNAME
,echo SECRET_PASSWORD
我会在控制台上以纯文本形式打印用户名和密码。
这是加密应该工作的方式吗?如果是,加密到底发生在哪里?我究竟做错了什么?秘密真的加密了吗?