创建Secret(手动)

和创建其他类型的 API 对象(Pod、Deployment、StatefulSet、ConfigMap 等)一样,您也可以先在 yaml 文件中定义好 Secret,然后通过 kubectl apply -f 命令创建。此时,您可以通过如下两种方式在 yaml 文件中定义 Secret:

  • data:使用 data 字段时,取值的内容必须是 base64 编码的
  • stringData:使用 stringData 时,更为方便,您可以直接将取值以明文的方式写在 yaml 文件中

在 yaml 中定义 data

  • 假设您要保存假设您要保存 username=adminpassword=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
  • 执行命令

    sh 复制代码
    kubectl apply -f ./secret.yaml

    输出结果如下所示:

    text 复制代码
    secret/mysecret created

    此时 Secret 创建成功

在 yaml 中定义 stringData

有时,您并不想先将用户名和密码转换为 base64 编码之后再创建 Secret,则,您可以通过定义 stringData 来达成,此时 stringData 中的取值部分将被 apiserver 自动进行 base64 编码之后再保存。

  • 创建文件 secret1.yaml,内容如下所示:
yaml 复制代码
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  username: admin
  password: 1f2d1e2e67df

执行命令 kubectl apply -f ./secret1.yaml 输出结果如下所示:

复制代码
secret/mysecret configured

此时 Secret 创建成功

执行命令 kubectl get -f ./secret1.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: "2023-10-24T15:20:19Z"
  name: mysecret
  namespace: default
  resourceVersion: "53720198"
  uid: 14321f8d-630a-4dbb-a920-b5791db67d1f
type: Opaque
  • 此时 annotation 中可以看到 password 的明文,这也许并不是您所期望的
  • 输出的 Secret 对象中,stringData 字段不再出现

同时定义了 data 和 stringData

如果您同时定义了 data 和 stringData,对于两个对象中 key 重复的字段,最终将采纳 stringData 中的 value

  • 创建文件 secret2.yaml,该文件同时定义了 data 和 stringData,内容如下所示:

    yaml 复制代码
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      username: YWRtaW4=
    stringData:
      username: administrator
  • 执行命令 kubectl apply -f ./secret2.yaml 输出结果如下所示:

    text 复制代码
    secret/mysecret configured

    此时 Secret 创建成功

  • 执行命令 kubectl get -f ./secret2.yaml -o yaml 输出结果如下所示:

    yaml 复制代码
    apiVersion: v1
    data:
      password: MWYyZDFlMmU2N2Rm
      username: YWRtaW5pc3RyYXRvcg==
    kind: Secret
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"v1","data":{"username":"YWRtaW4="},"kind":"Secret","metadata":{"annotations":{},"name":"mysecret","namespace":"default"},"stringData":{"username":"administrator"},"type":"Opaque"}
      creationTimestamp: "2023-10-24T15:20:19Z"
      name: mysecret
      namespace: default
      resourceVersion: "53720952"
      uid: 14321f8d-630a-4dbb-a920-b5791db67d1f
    type: Opaque

此处 YWRtaW5pc3RyYXRvcg== 解码后的值是 administrator

将配置文件存入 Secret

假设您的某个应用程序需要从一个配置文件中读取敏感信息,此时,您可以将该文件的内容存入 Secret,再通过数据卷的形式挂载到容器。[挂载方式未完待续]

例如,您的应用程序需要读取如下配置文件内容:

yaml 复制代码
apiUrl: "https://www.api.com/api/v1"
username: user
password: password

您可以使用下面的 secret3.yaml 创建 Secret

复制代码
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  config.yaml: |-
    apiUrl: "https://www.api.com/api/v1"
    username: user
    password: password

执行命令 kubectl apply -f ./secret3.yaml 输出结果如下所示:

复制代码
secret/mysecret configured

此时 Secret 创建成功

  • 执行命令 kubectl get -f ./secret3.yaml -o yaml 输出结果如下所示:
yaml 复制代码
apiVersion: v1
data:
  config.yaml: YXBpVXJsOiAiaHR0cHM6Ly93d3cuYXBpLmNvbS9hcGkvdjEiCnVzZXJuYW1lOiB1c2VyCnBhc3N3b3JkOiBwYXNzd29yZA==
kind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Secret","metadata":{"annotations":{},"name":"mysecret","namespace":"default"},"stringData":{"config.yaml":"apiUrl: \"https://www.api.com/api/v1\"\nusername: user\npassword: password"},"type":"Opaque"}
  creationTimestamp: "2023-10-24T15:20:19Z"
  name: mysecret
  namespace: default
  resourceVersion: "53721752"
  uid: 14321f8d-630a-4dbb-a920-b5791db67d1f
type: Opaque
相关推荐
计算机毕业论文辅导2 天前
物联网实战:基于MQTT协议的智能家居数据传输系统设计与实现
1024程序员节
开开心心就好2 天前
支持批量处理的视频分割工具推荐
安全·智能手机·rust·pdf·电脑·1024程序员节·lavarel
liuyao_xianhui4 天前
Linux开发工具结尾 _make
linux·运维·服务器·数据结构·哈希算法·宽度优先·1024程序员节
学传打活6 天前
【边打字.边学昆仑正义文化】_21_爱的结晶(1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
数据皮皮侠AI13 天前
顶刊同款!中国地级市风灾风险与损失数据集(2000-2022)|灾害 / 环境 / 经济研究必备
大数据·人工智能·笔记·能源·1024程序员节
Fab1an14 天前
Busqueda——Hack The Box 靶机
linux·服务器·学习·1024程序员节
技术专家15 天前
Stable Diffusion系列的详细讨论 / Detailed Discussion of the Stable Diffusion Series
人工智能·python·算法·推荐算法·1024程序员节
学传打活17 天前
古代汉语是源,现代汉语是流,源与流一脉相承。
微信公众平台·1024程序员节·汉字·中华文化
学传打活22 天前
【边打字.边学昆仑正义文化】_19_星际生命的生存状况(1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
unable code1 个月前
[HNCTF 2022 WEEK2]ez_ssrf
网络安全·web·ctf·1024程序员节