Files
kuboard-press/learning/k8s-intermediate/config/secrets/create-manually.md
2019-09-24 23:28:33 +08:00

173 lines
4.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
vssueId: 82
layout: LearningLayout
description: Kubernetes教程_在Kubernetes中_使用kubectl创建Secret
---
# 创建Secrets手动
和创建其他类型的 API 对象Pod、Deployment、StatefulSet、ConfigMap 等)一样,您也可以先在 yaml 文件中定义好 Secret然后通过 `kubectl apply -f` 命令创建。此时,您可以通过如下两种方式在 yaml 文件中定义 Secret
* **data**:使用 data 字段时,取值的内容必须是 base64 编码的
* **stringData**:使用 stringData 时,更为方便,您可以直接将取值以明文的方式写在 yaml 文件中
## 在 yaml 中定义 data
* 假设您要保存 `username=admin``password=1f2d1e2e67df` 到 Secret 中,请先将数据的值转化为 base64 编码,执行如下命令:
```sh
echo -n 'admin' | base64
YWRtaW4=
echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm
```
* 创建 secret.yaml 文件,内容如下所示:
``` yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
```
* 执行命令 `kubectl apply -f ./secret.yaml` 输出结果如下所示:
```
secret "mysecret" created
```
此时 Secret 创建成功
## 在 yaml 中定义 stringData
有时,您并不想先将用户名和密码转换为 base64 编码之后再创建 Secret您可以通过定义 stringData 来达成,此时 stringData 中的取值部分将被 apiserver 自动进行 base64 编码之后再保存。
* 创建文件 secret.yaml内容如下所示
``` yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
stringData:
username: admin
password: 1f2d1e2e67df
```
* 执行命令 `kubectl apply -f ./secret.yaml` 输出结果如下所示:
```
secret "mysecret" created
```
此时 Secret 创建成功
* 执行命令 `kubectl get -f ./secret.yaml -o yaml` 输出结果如下所示:
``` yaml
apiVersion: v1
data:
password: MWYyZDFlMmU2N2Rm
username: YWRtaW4=
kind: Secret
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Secret","metadata":{"annotations":{},"name":"mysecret","namespace":"default"},"stringData":{"password":"1f2d1e2e67df","username":"admin"},"type":"Opaque"}
creationTimestamp: "2019-09-23T14:16:56Z"
name: mysecret
namespace: default
resourceVersion: "10318365"
selfLink: /api/v1/namespaces/default/secrets/mysecret
uid: 24602031-e18d-467a-b7fe-0962af8ec8b8
type: Opaque
```
::: tip 注意
* 此时 annotation 中可以看到 password 的明文,这也许并不是您所期望的
* 输出的 Secret 对象中stringData 字段不再出现
:::
## 同时定义了 data 和 stringData
::: tip
如果您同时定义了 data 和 stringData对于两个对象中 key 重复的字段,最终将采纳 stringData 中的 value
:::
* 创建文件 secret.yaml该文件同时定义了 data 和 stringData内容如下所示
``` yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
stringData:
username: administrator
```
* 执行命令 `kubectl apply -f ./secret.yaml` 输出结果如下所示:
```
secret "mysecret" created
```
此时 Secret 创建成功
* 执行命令 `kubectl get -f ./secret.yaml -o yaml` 输出结果如下所示:
``` yaml
apiVersion: v1
kind: Secret
metadata:
creationTimestamp: 2018-11-15T20:46:46Z
name: mysecret
namespace: default
resourceVersion: "7579"
uid: 91460ecb-e917-11e8-98f2-025000000001
type: Opaque
data:
username: YWRtaW5pc3RyYXRvcg==
```
::: tip
此处 `YWRtaW5pc3RyYXRvcg==` 解码后的值是 `administrator`
:::
## 将配置文件存入 Secret
假设您的某个应用程序需要从一个配置文件中读取敏感信息,此时,您可以将该文件的内容存入 Secret再通过数据卷的形式挂载到容器。[挂载方式未完待续]
例如,您的应用程序需要读取如下配置文件内容:
```
apiUrl: "https://my.api.com/api/v1"
username: user
password: password
```
您可以使用下面的 secret.yaml 创建 Secret
``` yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
stringData:
config.yaml: |-
apiUrl: "https://my.api.com/api/v1"
username: user
password: password
```
* 执行命令 `kubectl apply -f ./secret.yaml` 输出结果如下所示:
```
secret "mysecret" created
```
此时 Secret 创建成功
* 执行命令 `kubectl get -f ./secret.yaml -o yaml` 输出结果如下所示:
``` yaml
apiVersion: v1
kind: Secret
metadata:
creationTimestamp: 2018-11-15T20:40:59Z
name: mysecret
namespace: default
resourceVersion: "7225"
uid: c280ad2e-e916-11e8-98f2-025000000001
type: Opaque
data:
config.yaml: YXBpVXJsOiAiaHR0cHM6Ly9teS5hcGkuY29tL2FwaS92MSIKdXNlcm5hbWU6IHt7dXNlcm5hbWV9fQpwYXNzd29yZDoge3twYXNzd29yZH19
```