管理Secrets

使用 kubectl 管理 Secret

管理Secrets_第1张图片

创建 Secret

Secret 对象用来存储敏感数据,如 Pod 用于访问服务的凭据。例如,为访问数据库,你可能需要一个 Secret 来存储所需的用户名及密码。

使用原始数据

kubectl create secret generic db-user-pass \
    --from-literal=username=admin \
    --from-literal=password='admin12345'
    
    

出现如下提示:

secret/db-user-pass created

使用源文件

  • 将凭据保存到文件:

    root@k8s-master:~# echo -n 'admin' > ./username.txt
    root@k8s-master:~# echo -n 'admin12345' > ./password.txt
    
    

    -n 标志用来确保生成文件的文末没有多余的换行符。

  • kubectl 命令中传递文件路径:

    kubectl create secret generic db-user-pass \
        --from-file=./username.txt \
        --from-file=./password.txt
    
    

    默认键名为文件名。你也可以通过 --from-file=[key=]source 设置键名,例如:

kubectl create secret generic db-user-pass \
    --from-file=username=./username.txt \
    --from-file=password=./password.txt

验证 Secret

root@k8s-master:~# kubectl get secrets | grep db-user-pass
db-user-pass                         Opaque                                2      14m

查看Secret细节:

root@k8s-master:~# kubectl describe secrets db-user-pass
Name:         db-user-pass
Namespace:    default
Labels:       
Annotations:  

Type:  Opaque

Data
====
password:  10 bytes
username:  5 bytes

解码 Secret

  • 查看你所创建的 Secret 内容

    root@k8s-master:~# kubectl get secrets db-user-pass -o jsonpath='{.data}'
    {"password":"YWRtaW4xMjM0NQ==","username":"YWRtaW4="}
    
  • 解码数据

    root@k8s-master:~# echo YWRtaW4xMjM0NQ== | base64 --decode
    admin12345
    
    root@k8s-master:~# kubectl get secrets db-user-pass -o jsonpath='{.data.password}' | base64 --decode
    admin12345
    

编辑 Secret

root@k8s-master:~# kubectl edit secrets db-user-pass

你可以编辑一个现存的 Secret 对象, 要想编辑一个 Secret,请使用上方命令,会出现下方内容,允许更新data字段中base64编码

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  password: YWRtaW4xMjM0NQ==
  username: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: "2023-10-24T05:51:45Z"
  name: db-user-pass
  namespace: default
  resourceVersion: "35866"
  uid: 7fe861f4-2062-49a5-8e76-44a67e0dd014
type: Opaque
~

清除Secret

root@k8s-master:~# kubectl delete secrets db-user-pass
secret "db-user-pass" deleted

使用配置文件管理 Secret

创建 Secret

你可以先用 JSON 或 YAML 格式在一个清单文件中定义 Secret 对象,然后创建该对象。 Secret 资源包含 2 个键值对:datastringDatadata 字段用来存储 base64 编码的任意数据。 提供 stringData 字段是为了方便,它允许 Secret 使用未编码的字符串。 datastringData 的键必须由字母、数字、-_. 组成。

以下示例使用 data 字段在 Secret 中存储两个字符串:

  • 将字符串变为base64:

    root@k8s-master:~# echo -n 'admin' | base64
    YWRtaW4=
    root@k8s-master:~# echo -n 'kubernetes' | base64
    a3ViZXJuZXRlcw==
    
    
  • 创建清单:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      username: YWRtaW4=
      password: a3ViZXJuZXRlcw==
    
  • 创建

    root@k8s-master:~# vim secret.yml
    root@k8s-master:~# kubectl apply -f secret.yml
    secret/mysecret created
    
    

创建 Secret 时提供未编码的数据

对于某些场景,你可能希望使用 stringData 字段。 这个字段可以将一个非 base64 编码的字符串直接放入 Secret 中, 当创建或更新该 Secret 时,此字段将被编码。

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  config.yaml: |
    url: "www.baidu.com"
    username: admin
    password: kubernetes

查看刚刚创建的secret:

root@k8s-master:~# kubectl get secrets mysecret -o yaml
apiVersion: v1
data:
  config.yaml: dXJsOiAid3d3LmJhaWR1LmNvbSIKdXNlcm5hbWU6IGFkbWluCnBhc3N3b3JkOiBrdWJlcm5ldGVzCg==
kind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Secret","metadata":{"annotations":{},"name":"mysecret","namespace":"default"},"string                                      Data":{"config.yaml":"url: \"www.baidu.com\"\nusername: admin\npassword: kubernetes\n"},"type":"Opaque"}
  creationTimestamp: "2023-10-24T06:43:02Z"
  name: mysecret
  namespace: default
  resourceVersion: "42840"
  uid: 70127ec6-354f-4814-8f38-455fbdc31f18
type: Opaque

同时指定 datastringData

如果你在 datastringData 中设置了同一个字段,则使用来自 stringData 中的值。

例如,如果你定义以下 Secret:

root@k8s-master:~# kubectl get secrets mysecret -o yaml
apiVersion: v1
data:
  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-24T07:05:00Z"
  name: mysecret
  namespace: default
  resourceVersion: "44348"
  uid: 764d2424-40e2-4a30-a14d-bbee4831e791
type: Opaque

解码为:

root@k8s-master:~# echo YWRtaW5pc3RyYXRvcg== | base64 --decode
administrator

使用 Kustomize 管理 Secret

kubectl 支持使用 Kustomize 对象管理工具来管理 Secret 和 ConfigMap。你可以使用 Kustomize 创建资源生成器(Resource Generator), 该生成器会生成一个 Secret,让你能够通过 kubectl 应用到 API 服务器

创建 Secret

secretGenerator:
- name: database-creds
  literals:
  - username=admin
  - password=1f2d1e2e67df

在所有情况下,你都不需要对取值作 base64 编码。 YAML 文件的名称必须kustomization.yamlkustomization.yml

root@k8s-master:~# vim kustomization.yaml
root@k8s-master:~# kubectl apply -k ./
secret/database-creds-bkbd782d2c created

查看:

root@k8s-master:~# kubectl get -k ./ -o jsonpath='{.data}'
{"password":"MWYyZDFlMmU2N2Rm","username":"YWRtaW4="}

你可能感兴趣的:(云计算,1024程序员节,kubernetes)