问题描述
我试图实现的最终目标是创建一个 kubernetes secret(可能带有密钥)和一个使用它的 pod。但问题是,创建的 pod 应该无法在没有特定密钥的情况下解码/解密秘密值。 我已经尝试了静态数据加密的秘密,但这还不足以满足我的要求。
解决方法
编辑:我正在尝试将其作为逐步解决方案。 (如@Dawid 在评论中所问)
- 使用您的密钥(您的加密逻辑,可能在脚本中)加密您的数据。
./encrypt.sh --key your-key --data your-data
- 创建这个加密数据的秘密
kubectl create secret generic your-secret-name --from-literal=secretdata=your-encrypted-data
- 您可以在 pod 中添加这样的解密逻辑(作为 sidecar 或 initContainer)
# decrypt.sh will decode base64 then your decryption logic using your-key
./decrypt.sh --key your-key --data /var/my-secrets
- 此外,您还需要将此机密作为卷安装到您的容器中。
spec:
containers:
- image: "image"
name: app
...
volumeMounts:
- mountPath: "/var/my-secrets"
name: my-secret
volumes:
- name: my-secret
secret:
secretName: your-secret-name
,
正如@Kiran 所回答的,这里是我获得解决方案所遵循的步骤。
-
使用
openssl
加密echo -n "preetham" | openssl enc -e -aes-256-cbc -a -salt -pass pass:<PASSWORD>
-
从 YAML 文件创建机密。
preetham-secrets-test.yaml
apiVersion: v1 kind: Secret metadata: name: preetham-secrets type: Opaque stringData: # Using stringData instead data username: U2FsdGVkX18VsbQaVpeqrCCJCDEd3LCbefT6nupChvw= # output from the step 1
-
创建秘密
kubectl apply -f preetham-secrets-test.yaml -n <NAMESPACE>
-
将 secret 安装到 volume 并执行到 pod 中。 Kubernetes reference
-
在 pod 内部,假设机密已安装到
/opt/mnt/secrets/
。bash-4.2# cat /opt/mnt/secrets/username U2FsdGVkX18VsbQaVpeqrCCJCDEd3LCbefT6nupChvw=bash-4.2#
-
使用
根据图像安装openssl
进行解密。(您可能需要使用openssl
bash-4.2# echo "U2FsdGVkX18VsbQaVpeqrCCJCDEd3LCbefT6nupChvw=" | openssl enc -d -aes-256-cbc -a -salt -pass pass:<PASSWORD> preethambash-4.2#