kubernetes:gpg 解密后,来自秘密 yaml 的值在节点 js 容器中被破坏
Posted
技术标签:
【中文标题】kubernetes:gpg 解密后,来自秘密 yaml 的值在节点 js 容器中被破坏【英文标题】:kubernetes: Values from secret yaml are broken in node js container after gpg decryption 【发布时间】:2021-09-22 02:22:46 【问题描述】:我是 Kubernetes 新手。我有一个 Kubernetes 秘密 yaml 文件:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
API_KEY: 123409uhttt
SECRET_KEY: yu676jfjehfuehfu02
我使用 gpg 加密进行了编码:
gpg -a --symmetric --cipher-algo AES256 -o "secrets.yaml.gpg" "secrets.yaml"
并在 github 操作的工作流程中解密它,如下所示:
gpg -q --batch --yes --decrypt --passphrase=$GPG_SECRET my/location/to/secrets.yaml.gpg | kubectl apply -n $NAMESPACE -f -
当我跑步时:
kubectl get secret my-secret -n my-namespace -o yaml
我得到的 yaml 显示为 API_KEY 和 SECRET_KEY 设置的正确值,如下所示:
apiVersion: v1
data:
API_KEY: 123409uhttt
SECRET_KEY: yu676jfjehfuehfu02
kind: Secret
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
"apiVersion":"v1","data":"API_KEY":"123409uhttt","SECRET_KEY":"yu676jfjehfuehfu02","kind":"Secret","metadata":"annotations":,"name":"my-secret","namespace":"my-namespace","type":"Opaque"
creationTimestamp: "2021-07-12T23:28:56Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.:
f:API_KEY:
f:SECRET_KEY:
f:metadata:
f:annotations:
.:
f:kubectl.kubernetes.io/last-applied-configuration:
f:type:
manager: kubectl-client-side-apply
operation: Update
time: "2021-07-10T23:28:56Z"
name: my-secret
namespace: my-namespace
resourceVersion: "29813715"
uid: 89a34b6d-914eded509
type: Opaque
但是当应用程序使用 SECRET_KEY 和 API_KEY 请求时,它会以损坏的编码显示这些值。当我记录它们时,我会打印这些值:
Api_Key - ᶹ��4yÖ·Ó�ӯu�ï¿8
Secret_Key - �V�s��Û[ï¶×¿zoï½9s���ï¿
当我不使用 secrets.yaml 中的 Api_Key 和 Secret_Key(作为应用程序中的硬编码值)时,它会按预期工作。
我需要帮助才能在运行节点 js 应用程序的容器中访问具有正确值的秘密数据(Api_Key 和 Secret_Key)。
【问题讨论】:
【参考方案1】:您的秘密值似乎不是 base64 编码的。 要么将数据类型更改为不需要 base64 编码的“stringData”,要么先对你的秘密值进行编码。
例如echo "§SECRET_KEY" | base64
并在您的秘密中使用此值。
您描述的问题发生在秘密值被注入 base64 解码到您的 pod 中。
但是,当您尝试解码您提供的值时
echo "123409uhttt" | base64 -d
你会得到以下输出:�m��ۡ��base64: invalid input
【讨论】:
以上是关于kubernetes:gpg 解密后,来自秘密 yaml 的值在节点 js 容器中被破坏的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Boot 将来自 Google Secret Manager 的秘密作为环境变量注入 Kubernetes Pod?