Kubernetes Secrets 资源可以保障、存储和控制现代计算中的令牌、密码、证书和其他密钥 (Secret) 的访问。Kubernetes Secrets 扩展为你的管道提供了对 Kubernetes 密钥 (Secret) 的访问。
Kubernetes Secrets 集成由一个扩展提供,并且只有在你的系统管理员已经
安装了该扩展时才可用。
创建密钥
使用 Kubernetes yaml 配置语言创建一个密钥 (Secret) 资源,并使用 kubectl
集成到你的集群。在下面的例子中,我们存储了 Docker 的用户名和密码。
1
2
3
4
5
6
7
8
|
apiVersion: v1
kind: Secret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
metadata:
name: docker
|
访问密钥
一旦我们的密钥存储在 Kubernetes 中,我们就可以更新我们的 yaml 配置文件来请求访问我们的密钥 (Secret)。首先,我们在 yaml 中为每个外部密钥定义一个密钥资源,其中包括密钥的路径,以及我们想要检索的密钥值的名称或关键字。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
---
kind: pipeline
name: default
steps:
- name: build
image: alpine
---
kind: secret
name: username
get:
path: docker
name: username
---
kind: secret
name: password
get:
path: docker
name: password
...
|
之后,我们就能流水线中引用指定名称的密钥 (Secret):
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
27
|
kind: pipeline
name: default
steps:
- name: build
image: alpine
environment:
USERNAME:
from_secret: username
PASSWORD:
from_secret: password
---
kind: secret
name: username
get:
path: docker
name: username
---
kind: secret
name: password
get:
path: docker
name: password
...
|
访问限制
默认情况下,密钥对所有存储库和所有构建事件都是可用的。我们强烈建议你通过版本库和构建事件来限制对密钥的访问。这可以通过添加 annotations
配置项来实现:
1
2
3
4
5
6
7
8
9
10
11
|
apiVersion: v1
kind: Secret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
metadata:
name: docker
annotations:
X-Drone-Repos: octocat/*
X-Drone-Events: push,tag
|
按存储库限制
使用 X-Drone-Repos
来限制哪些存储库可以访问你的密钥。这个配置的值是一个以逗号分隔的 glob 模式列表。如果一个存储库的名字至少与其中一个模式相匹配,它就被授予访问该密钥的权限。
限制对单一存储库的访问:
7
8
9
10
|
metadata:
name: docker
annotations:
X-Drone-Repos: octocat/hello-world
|
限制对一个组织的所有存储库的访问:
7
8
9
10
|
metadata:
name: docker
annotations:
X-Drone-Repos: octocat/*
|
限制对多个存储库或组织的访问:
7
8
9
10
|
metadata:
name: docker
annotations:
X-Drone-Repos: octocat/*,spaceghost/*
|
按事件限制
使用 X-Drone-Events
来限制哪些构建事件可以访问你的密钥。该配置的值是一个用逗号分隔的事件列表。如果一个构建事件至少与其中一个事件相匹配,它就被授予访问密钥的权利。
以下是限制对推送和标记事件访问的示例:
7
8
9
10
|
metadata:
name: docker
annotations:
X-Drone-Events: push,tag
|
你可以结合 annotations
配置项,按存储库和事件进行限制:
7
8
9
10
11
|
metadata:
name: docker
annotations:
X-Drone-Repos: octocat/*
X-Drone-Events: push,tag
|