Secret
PPG007 ... 2022-4-9 About 2 min
# Secret
Kubernetes 中使用 secret 来保存敏感信息,例如密码、ssh 秘钥、TLS 证书及秘钥等。
# 使用 kubectl 管理 secret
首先创建两个文件,分别是 username 及 password,然后使用下面的命令将这两个文件打包为一个 secret 并在集群中创建对象:
kubectl create secret generic user-pass --from-file=username=username --from-file=password=password -n example
1
--from-file
参数指定密钥从文件中读取,默认情况下密钥名字就是文件名,但是可以像上面的命令那样指定密钥的名称。
generic
是密钥的类型,有三个可选值:
- generic: 从本地文件、目录或者直接在命令中赋值的方式创建 secret。
- tls: 创建 tls 的 secret。
- docker-registry: 创建 docker 仓库的 secret。
Kubernetes 会将 secret 进行 base64 编码,因此需要进行 base64 解码才能获取到原数据。
# 使用配置文件管理 secret
使用下面的配置文件创建一个 secret:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
namespace: example
type: Opaque
stringData:
username: ppg007
password: '123456'
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
stringData 中必须都是字符串,也可以使用 data 替换 stringData,但是使用 data 时,值必须是经过 base64 编码后的值。
如果同时使用 data 和 stringData,那么将会使用 stringData 的值。
配置文件中的 type 具有以下可选值:
# Secret 做环境变量
apiVersion: apps/v1
kind: Deployment
metadata:
name: volume-demo
namespace: example
spec:
selector:
matchLabels:
app: volume-demo
replicas: 2
template:
metadata:
labels:
app: volume-demo
spec:
imagePullSecrets:
- name: myali-docker
containers:
- name: volume-demo
image: registry.cn-qingdao.aliyuncs.com/ppg007/volume-demo:2.0
imagePullPolicy: Always
envFrom:
- secretRef:
name: myali-docker
ports:
- containerPort: 8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 示例:配置 Docker 私有镜像仓库
首先编写下面这样的一个 json 文件:
{
"auths": {
"your docker repository address": {
"username": "username",
"password": "password"
}
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
将这个文件的内容通过 base64 进行编码,在 Linux 中可以使用下面这个命令:
cat docker.json | base64
1
然后编写下面的配置文件:
apiVersion: v1
kind: Secret
metadata:
name: myali-docker
namespace: example
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: <your base64>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Note
注意 base64 编码要在一行里。
执行 apply 命令创建 secret。
修改之前的 Deployment 或者 Pod 配置文件:
template:
metadata:
labels:
app: grpc-server
spec:
imagePullSecrets:
- name: myali-docker # 指定使用的 docker secret
containers:
- name: grpc-demo-server
image: registry.cn-qingdao.aliyuncs.com/ppg007/grpc-demo-server
ports:
- containerPort: 8080
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
这样就会从私有仓库拉取镜像了。