首页 » 翻译 » Kubernetes » 正文

Kubernetes系列翻译07 Secrets in Kubernetes 第一部分

原文地址:http://kubernetes.io/v1.0/docs/user-guide/secrets.html

Secrets
Secrets对象被设计用来存储敏感信息,比如密码,比如token,还有私钥,把这些重要的信息存储到Secrets中要比存储到pod的定义中或者存放到iamge中更加安全和灵活.

Overview of Secrets(概述)

Secrets可以被人为创建或者由系统自动创建,Secrets可以通过两种形式在pod中使用,1以磁盘中文件的形式挂载到容器,2通过kubelet 在pull image的时候使用

如果要使用一个Secrets,Pod需要外联这个Secrets,外联可以人工添加或者自动添加,一个节点可以使用上述多种形式的结合

Service Accounts Automatically Create and Use Secrets with API Credentials

Kubernetes自动的创建包含api使用相关的认证信息的secrets,并且会自动修改你的pod来使用这个secrets

这个自动创建的过程可以被禁止,但是,如果你要加密你和api之间的通信,这个是推荐的

Creating a Secret Manually手动创建Secret

这是一个简单的例子:

apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: dmFsdWUtMg0K
username: dmFsdWUtMQ0K

data部分是一个map,key的部分必须符合DNS_SUBDOMAIN,value部分是任意的,通过base64进行加密,上面例子中的username,password在没加密之前的数值为:value-1 ,value-2

我们使用 kubectl create来创建

当这个secret创建后,我们可以:
1:通过Service Account来创建自动使用secret的的Pod
2:修改我们的pod让pod使用我们的secret

Manually specifying a Secret to be Mounted on a Pod(人工指定secret到指定pod)

{
“apiVersion”: “v1″,
“kind”: “Pod”,
“metadata”: {
“name”: “mypod”,
“namespace”: “myns”
},
“spec”: {
“containers”: [{
“name”: “mypod”,
“image”: “redis”,
“volumeMounts”: [{
“name”: “foo”,
“mountPath”: “/etc/foo”,
“readOnly”: true
}]
}],
“volumes”: [{
“name”: “foo”,
“secret”: {
“secretName”: “mysecret”
}
}]
}
}
每一个secret 都必须有spec.volumes,如果一个pod中有多个容器,那么每个容器都需要有自己的volumeMounts,但仅仅一个spec.volumes就足够了,我们可以在secret中放置多个文件

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

Latest posts by Zhiming Zhang (see all)