Kubernetes 秘密


Secrets 可以定义为 Kubernetes 用于存储加密的用户名和密码等敏感数据的对象。

在 Kubernetes 中有多种创建secrets的方法:

  • 从 txt 文件创建;

  • 从 yaml 文件创建。

从文本文件创建

为了从文本文件(例如用户名和密码)创建机密,首先需要将它们存储在 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>

创建秘密

$ kubectl create –f Secret.yaml
secrets/tomcat-pass

使用秘密


一旦创建了秘密,它就可以在 pod 或复制控制器中使用:

  • 环境变量

作为环境变量

为了使用秘密作为环境变量,将在 pod yaml 文件的规范部分下使用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"

秘密配置作为环境变量

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定义中,我们在复制控制器中使用秘密作为环境变量。

作为卷挂载的秘密

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"