连载
This commit is contained in:
172
learning/k8s-intermediate/config/secrets/create-manually.md
Normal file
172
learning/k8s-intermediate/config/secrets/create-manually.md
Normal file
@ -0,0 +1,172 @@
|
||||
---
|
||||
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
|
||||
```
|
||||
@ -9,19 +9,25 @@ description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微
|
||||
|
||||
## 使用 Kuboard 在 K8S 上部署 OCP
|
||||
|
||||
Kuboard 网站将陆续 **连载** 如何使用 Kuboard 部署 OCP 的如下组件:
|
||||
Kuboard 网站将陆续 **连载** 如何使用 Kuboard 在 Kubernetes 上部署 OCP 的如下组件:
|
||||
* eureka-server
|
||||
* auth-server
|
||||
* user-center
|
||||
* api-gateway
|
||||
* back-center
|
||||
|
||||
需要跟进连载教程的同学,请提前 [安装Kubernetes单Master节点](/install/install-k8s.html)
|
||||
|
||||
该系列连载文章的目录如下:
|
||||
* [准备OCP的构建环境和部署环境](./prepare.html)
|
||||
* [构建OCP并推送到 docker registry]
|
||||
* [部署 eureka-server]
|
||||
* [部署 auth-server]
|
||||
* [部署 user-center]
|
||||
* [部署 api-gateway]
|
||||
* [部署 back-center]
|
||||
* [导出部署配置]
|
||||
* [在新的名称空间导入部署配置]
|
||||
|
||||
|
||||
::: tip OCP答疑
|
||||
与 OCP 相关的问题,请加 OCP 的 QQ群 483725710
|
||||
|
||||
[进入 OCP 首页](https://gitee.com/owenwangwen/open-capacity-platform)
|
||||
@ -31,6 +37,7 @@ Kuboard 网站将陆续 **连载** 如何使用 Kuboard 部署 OCP 的如下组
|
||||
<p>
|
||||
<img src="./index.assets/143151_36a5c07e_869801.png" style="max-width: 160px;" alt="Kubernetes教程_OCP_QQ群"></img>
|
||||
</p>
|
||||
:::
|
||||
|
||||
## OCP 介绍
|
||||
|
||||
|
||||
Reference in New Issue
Block a user