Kubernetes(简称K8S) 是Google开源的分布式的容器管理平台,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。本文主要介绍Kubernetes(K8s) Secret。

1、Kubernetes(K8s) Secret

Secret可以定义为Kubernetes对象,用于存储用户名、密码、token和密钥等敏感信息。用户就可以通过在 Pod 的容器里挂载 Volume 的方式,或者环境变量的方式访问到这些 Secret 里保存的信息。

Kubernetes中有多种创建Secret的方法。可以通过从文本文件创建。也可以通过从yaml文件创建。

2、使用文本文件创建Secret

可以将用户和密码等敏感信息存储在一个txt文件中,通过这个文本文件创建Secret。

例如,

$ kubectl create secret generic tomcat-passwd –-from-file = ./username.txt –fromfile = ./.

3、通过Yaml文件创建Secret

1)Yaml文件

apiVersion: v1
kind: Secret
metadata:
name: tomcat-pass
type: Opaque
data:
   password: <User Password>
   username: <User Name>

2)创建Secret

$ kubectl create –f Secret.yaml

4、使用Secret

创建了Secret,则就可以在pod或RC中使用,通过环境变量或Volume方式。

1)环境变量

为了使用secret作为环境变量,可以在pod yaml文件的spec部分使用env。

env:
- name: SECRET_USERNAME
   valueFrom:
      secretKeyRef:
         name: mysecret
         key: tomcat-pass

例如,

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: 
               - name: ENV
                  valueFrom:
                     configMapKeyRef:
                        name: appname
                        key: tomcat-secrets

2)Volume

spec:
   volumes:
      - name: "secretstest"
         secret:
            secretName: tomcat-pass
   containers:
      - image: tomcat:7.0
         name: awebserver
         volumeMounts:
            - mountPath: "/tmp/mysec"
            name: "secretstest"

例如,

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"

推荐文档