作者信息:https://home.cnblogs.com/u/huangjiabobk

在k8S中,Secret 有哪些使用方式?

在Kubernetes (k8s) 中,Secret 是一种资源对象,用于存储敏感信息(如密码、密钥、凭证等),并以安全的方式将其注入到 Pod 中的容器。以下是 Kubernetes Secret 的几种主要使用方式:

  1. 通过 --from-literal 创建 Secret:
    在命令行中创建 Secret 时,可以使用 kubectl create secret 命令结合 --from-literal 标志来指定各个键值对:

    kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=supersecret

    这将创建一个名为 my-secret 的 Secret,其中包含两个键值对:usernamepassword

  2. 通过 --from-file 创建 Secret:
    如果需要从文件中加载内容作为 Secret 的一部分,可以使用 --from-file 参数,每个文件的内容会被编码后作为 Secret 的一个条目:

    kubectl create secret generic db-creds --from-file=connection-string=./dbconn.txt --from-file=sslcert=./cert.pem

    这样会从给定路径读取文件内容,并分别创建 connection-stringsslcert 键。

  3. 通过配置文件创建 Secret:
    可以编写一个 YAML 或 JSON 配置文件来定义 Secret,并使用 kubectl apply -f <config-file>.yaml 来创建或更新 Secret:

    apiVersion: v1
    kind: Secret
    metadata:
    name: my-secret
    type: Opaque
    data:
    username: YWRtaW4=
    password: c3VwZXJzZWNyZXQ=

    注意,在配置文件中,数据必须是 base64 编码过的字符串。

  4. 在 Pod 中通过环境变量引用 Secret:
    在 Pod 的配置中,可以通过 env 字段下的 valueFrom.secretKeyRef 引用 Secret 中的数据,并将其作为环境变量暴露给容器:

    apiVersion: v1
    kind: Pod
    metadata:
    name: secret-env-pod
    spec:
    containers:
    - name: mycontainer
    image: redis
    env:
    - name: SECRET_USERNAME
    valueFrom:
    secretKeyRef:
    name: mysecret
    key: username
  5. 在 Pod 中挂载 Secret 为卷:
    Secret 也可以作为 Volume 挂载到容器内部的文件系统中,以便应用程序直接读取其中的文件:

    apiVersion: v1
    kind: Pod
    spec:
    containers:
    - name: mycontainer
    image: nginx
    volumeMounts:
    - name: secret-volume
    mountPath: /etc/nginx/secret
    readOnly: true
    volumes:
    - name: secret-volume
    secret:
    secretName: mysecret

    在这个例子中,Secret mysecret 中的所有数据将以文件形式出现在 /etc/nginx/secret 目录下。

综上所述,通过这些方式,Kubernetes Secret 提供了一种安全机制,确保敏感数据不会明文显示在配置或日志中,同时又能方便地与 Pod 资源关联起来,供应用容器使用。

posted @   黄嘉波  阅读(205)  评论(0编辑  收藏  举报
努力加载评论中...
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波
点击右上角即可分享
微信分享提示