Kubernetes - Secret 加密
Secrets 加密可以定义为 Kubernetes 对象,用于存储用户名和密码等敏感数据并进行加密。
在 Kubernetes 中有多种创建 Secrets 的方法。
- 从 txt 文件创建。
- 从 yaml 文件创建。
从文本文件创建
为了从文本文件创建 Secrets 加密,例如用户名和密码,我们首先需要将它们存储在一个 txt 文件中并使用以下命令。
$ kubectl create secret generic tomcat-passwd –-from-file = ./username.txt –fromfile = ./. password.txt
从 Yaml 文件创建
apiVersion: v1 kind: Secret metadata: name: tomcat-pass type: Opaque data: password: <User Password> username: <User Name>
创建 Secret
$ kubectl create –f Secret.yaml secrets/tomcat-pass
使用 Secret
一旦我们创建了 Secret,它就可以在 pod 或复制控制器中被消费为 −
- 环境变量
- 卷
作为环境变量
为了使用 secret 作为环境变量,我们将在 pod yaml 文件的 spec 部分下使用 env。
env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: tomcat-pass
作为卷
spec: volumes: - name: "secretstest" secret: secretName: tomcat-pass containers: - image: tomcat:7.0 name: awebserver volumeMounts: - mountPath: "/tmp/mysec" name: "secretstest"
Secret 配置作为环境变量
apiVersion: v1 kind: ReplicationController metadata: name: appname spec: replicas: replica_count template: metadata: name: appname spec: nodeSelector: resource-group: containers: - name: appname image: imagePullPolicy: Always ports: - containerPort: 3000 env: -----------------------------> 1 - name: ENV valueFrom: configMapKeyRef: name: appname key: tomcat-secrets
在上面的代码中,在 env 定义下,我们在复制控制器中使用 Secrets 作为环境变量。
Secrets 作为卷挂载
apiVersion: v1 kind: pod metadata: name: appname spec: metadata: name: appname spec: volumes: - name: "secretstest" secret: secretName: tomcat-pass containers: - image: tomcat: 8.0 name: awebserver volumeMounts: - mountPath: "/tmp/mysec" name: "secretstest"