Drone CI 中文文档

Kubernetes 密钥

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