在前端领域中,Kubernetes 是一款非常流行的容器编排平台。在使用 Kubernetes 的过程中,我们常常需要传递一些敏感信息给我们的应用,例如密码、证书等等。为了避免泄露这些敏感信息,我们需要使用 Kubernetes 的 Secret 功能。但是,使用 Secret 功能并不是一件简单的事情。本文将介绍 Kubernetes 传递 Secrets 的正确姿势,希望可以帮助大家避免一些常见的错误。
什么是 Kubernetes Secret?
Kubernetes Secret 是一种用于保护敏感信息的 Kubernetes 对象。Secret 可以保存密码、密钥、证书、API token 等敏感信息,并且可以安全地传递给容器。
Kubernetes Secret 是以 base64 编码的形式储存的,可以直接在 Kubernetes YAML 文件中使用。
如何创建 Kubernetes Secret?
创建 Secret 可以通过 kubectl create secret
命令来实现。例如,下面的命令会创建一个名为 mysecret
的 Secret:
$ kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123abc
在这个例子中,我们创建了一个包含两个 key-value 对的 Secret。其中,username=admin
和 password=123abc
是明文存储的,并且在创建时会被自动编码为 base64。
在编写 Kubernetes YAML 文件时,可以直接使用 mysecret
这个对象名:
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: nginx env: - name: USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: PASSWORD valueFrom: secretKeyRef: name: mysecret key: password
在这个例子中,我们使用了 valueFrom
来引用 Secret 中的值。secretKeyRef
指定了 Secret 的名字和 key,从而获取 Secret 中对应的值。
如何管理 Kubernetes Secret?
Kubernetes 中的 Secret 是可以被修改和删除的。例如,下面的命令会将 mysecret
的 password
属性修改为 456def
:
$ kubectl edit secret mysecret
在弹出的编辑器中,我们可以直接修改 YAML 文件,然后保存退出即可。
如果需要删除 Secret,可以使用 kubectl delete secret
命令:
$ kubectl delete secret mysecret
如何避免泄露 Kubernetes Secret?
虽然 Kubernetes Secret 是一种保护敏感信息的好方法,但是在使用过程中还是需要注意避免泄露。下面是一些避免泄露的方法:
- 避免在 Git 仓库中明文存储 Secret。可以通过使用 Git 钩子脚本的方式,在代码提交之前自动替换明文的 Secret 值为 base64 编码的值。
- 避免在 Kubernetes 配置文件中明文存储 Secret。可以使用 Helm Chart 等工具,在生成配置文件时自动编码 Secret。
- 避免在容器中输出 Secret 值。可以使用环境变量、配置文件等方式,获取 Secret 中的值。
- 避免过度使用 Secret。只需要在必要的地方使用 Secret,而不是在所有地方都存储敏感信息。
示例代码
下面是一个完整的示例,演示了如何使用 Kubernetes Secret 传递敏感信息给容器。
创建一个 Secret:
$ kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123abc
创建一个 Pod:
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: nginx env: - name: USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: PASSWORD valueFrom: secretKeyRef: name: mysecret key: password
在容器中,可以通过 echo
命令获取 Secret 的值:
$ kubectl exec mypod -- sh -c "echo $USERNAME, $PASSWORD" admin, 123abc
总结
Kubernetes Secret 是一种保护敏感信息的好方法,但是在使用时需要注意避免泄露。本文介绍了如何创建、管理 Kubernetes Secret,以及如何避免泄露敏感信息。同时,本文还提供了一个完整示例,希望可以帮助大家更好地理解 Kubernetes Secret 的使用方法。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a3909fadd4f0e0ffbb4cc4