我是 Kubernetes 的新手,正在努力思考如何设置机密。我将尝试用一个例子来说明。假设我有一个如下所示的秘密资源:
apiVersion: v1
kind: Secret
metadata:
name: big-secrets
type: Opaque
data:
secret-password: "secretMeow"
secret-key: "angryWoof"
database-password: "happyWhale"
如何使用 kubectl
设置(不确定这里的设置是否正确)这些机密,以及如何检索它们?我已尝试通读以下 documentation,但仍不确定如何从上述 yaml 文件进行设置。
答案 0 :(得分:2)
使用 stringData
可以使用纯文本值创建秘密:
apiVersion: v1
kind: Secret
metadata:
name: big-secrets
type: Opaque
stringData:
secret-password: "secretMeow"
secret-key: "angryWoof"
database-password: "happyWhale"
但是值得注意的是,它提供了更多便利,docs 说:
<块引用>它是作为只写方便的方法提供的。所有键和值在写入时合并到数据字段中,覆盖任何现有值。从 API 读取时从不输出。
关于如何读取secret的问题,如果你想以编程方式,你可以使用像jq
这样的工具来解析Kubernetes输出和base64解码:
kubectl get secret big-secrets -o json | jq -r '.data["secret-password"] | @base64d'
这会将创建的机密作为 JSON 获取(-o yaml 也是一个选项),读取给定机密的数据字段(在本例中为机密密码),然后对其进行 base64 解码。
答案 1 :(得分:1)
使用 yaml 文件,您无法在没有编码字符串值的情况下创建机密。秘密数据值必须以 yaml 文件中的 base64 编码。如果你想从 yaml 文件创建一个秘密,那么你需要像下面这样解码数据值。
apiVersion: v1
kind: Secret
metadata:
name: big-secrets
type: Opaque
data:
secret-password: c2VjcmV0TWVvdwo=
secret-key: YW5ncnlXb29mCg==
database-password: aGFwcHlXaGFsZQo=
或
您可以使用 kubectl 命令式命令从如下文字值创建一个秘密。
kubectl create secret generic big-secrets --from-literal=secret-password="secretMeow" --from-literal=secret-key="angryWoof"