美文网首页
Kubernetes资源对象--Secret

Kubernetes资源对象--Secret

作者: 张氏小毛驴 | 来源:发表于2022-04-23 19:29 被阅读0次

Secret是为了解决密码,token或秘钥等比较敏感的数据的配置问题,避免了直接将这些数据暴露在镜像或者Pod Spec中。

1.Secret的类型

Secret有三种类型:

  • Opaque
    基于base64编码,用来存储密码等,但是可以通过base64 --decode解码,加密性很弱。
  • kubernetes.io/dockerconfigjson
    用来存储私有docker registry的认证信息。
  • kubernetes.io/service-account-token
    用于被serviceaccount引用,用于集群间组件通信的令牌。
    以下以Opaque类型为主做记录。

2.创建Secret

有四种方式可以创建Secret

  • 通过--from-literal
    kubectl create secret generic mysecret --from-literal=username=admin --from--literal=password=123456
    一个--from-literal对应一个条目
  • 通过--from-file
echo -n admin > ./username
echo -n 123456 > ./password
kubectl create secret generic mysecret1 --from-file=./username --from-file=./password

一个文件对应一个条目

  • 通过--from-env-file
cat << EOF > env.txt
username=admin
password=123456
EOF

kubectl create secret generic mysecret2 --from-env-file=env.txt

env.txt中每一行key=value对应一个条目

  • 通过yaml文件
apiVersion: v1
kind: Secret
metadata:
  name: mysecret3
data:
  username: YWRtaW4=
  password: MTIzNDU2

其中data中的敏感数据必须是base64编码后的结果。


3.使用Secret

有两种方式使用Secret,分别为Volume和环境变量

3.1 Pod中Volume挂载使用Secret

创建yaml配置文件volume_secret.yaml

apiVersion: v1
kind: Pod
metadata:
  name: volume_secret
spec:
  containers:
  - name: volume_secret
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/test; sleep 30000
    volumeMounts:
    - name: secrets
      mountPath: "/etc/secrets"
      readOnly: true
  volumes:
  - name: secrets
    secret:
      secretName: mysecret3

执行创建应用,然后进入busybox中:
kubectl exec -it volume_secret sh
查看/etc/secrets/username,/etc/secrets/password可得到Secret

可以看出,kubernetes会再指定的路径/etc/secrets为Secret中每一个条目数据创建一个文件,文件名就是条目的key,文件内容就是条目的value。

也可以指定存放数据的文件名,比如将上面的yaml文件修改为:
在最后添加:

      secretName: mysecret3
      items:
      - key: username
        path: /etc/test/my_username
      - key: password
        path: /etc/test/my_password

Volume方式使用的Secret支持动态更新,当Secret更新后,容器中的数据也会相应的更新。

3.2 环境变量方式使用Secret

创建env_secret.yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: env-secret
spec:
  containers:
  - name: env-secret
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/test; sleep 30000
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret3
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret3
            key: password

执行应用进入容器中查看,通过环境变量SECRET_USERNAME和SECRET_PASSWORD可以读取到Secret的数据。

与volume不同的是,环境变量的方式读取Secret很方便,但是不能动态更新

相关文章

  • Kubernetes资源对象--Secret

    Secret是为了解决密码,token或秘钥等比较敏感的数据的配置问题,避免了直接将这些数据暴露在镜像或者Pod ...

  • 从零开始入门 K8s| K8s 的应用编排与管理

    一、资源元信息 1. Kubernetes 资源对象 我们知道,Kubernetes 的资源对象组成:主要包括了 ...

  • Kubernetes对象之Secret

    学习本节内容前,希望你已经对以下内容有所了解:Kubernetes对象之ConfigMap Secret对象与Co...

  • 应用编排与管理:核心原理

    一、资源元信息 1. Kubernetes 资源对象 首先,我们来回顾一下 Kubernetes 的资源对象组成:...

  • Kubernetes资源对象--Configmap

    configmap与secret类似,只是configmap用来处理不包含敏感信息的数据,用于Pod自定义配置。 ...

  • Kubernetes核心资源对象

    Kubernete API Server提供了RESTful风格的编程接口,其管理的资源是Kubernetes A...

  • Clientset

    1、介绍Clientset 是调用 Kubernetes 资源对象最常用的客户端,可以操作所有的资源对象。那么在 ...

  • 6. kubernetes 资源和调度

    6. kubernetes 资源和调度 一、资源配额与限制 资源配额用于管理命名空间(NameSpace)中对象...

  • ResourceVersion和Generation

    kubernetes有两个资源对象相关的属性。 ResourceVersion Generation kubern...

  • Kubernetes资源类型

    通过如下命令可以查看哪些Kubernetes资源对象属于命名空间,而哪些资源对象不属于命名空间,执行命令如下: 下...

网友评论

      本文标题:Kubernetes资源对象--Secret

      本文链接:https://www.haomeiwen.com/subject/rzeyuftx.html