Kubernetes(K8S) 秘密(Secrets)

  • Kubernetes 秘密(secret)

    可以将机密定义为Kubernetes对象,该对象用于存储敏感数据,例如用户名和带有加密的密码。
    在Kubernetes中有多种创建秘密(secret)的方法。
    • 从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或复制控制器中将其作为-使用:
    • 环境变量
    作为环境变量
    为了使用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"
    
    秘密配置作为环境变量
    
    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作为环境变量使用。
    卷挂载的秘密
    
    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"