侧边栏壁纸
  • 累计撰写 208 篇文章
  • 累计创建 16 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

[K8S] Secret 的简单使用详解

Wake
2024-03-26 / 0 评论 / 0 点赞 / 1,016 阅读 / 851 字

前言:

ConfigMap这个资源对象是Kubernetes当中非常重要的一个对象,一般情况下ConfigMap是用来存储一些非安全的配置信息,如果涉及到一些安全相关的数据的话用ConfigMap就非常不妥了,因为ConfigMap是明文存储的,我们说这个时候我们就需要用到另外一个资源对象了:Secret,Secret用来保存敏感信息,例如密码、OAuth 令牌和 ssh key等等,将这些信息放在Secret中比放在Pod的定义中或者docker镜像中来说更加安全和灵活。
Secret有三种类型:

这里先主要讲解Opaque Secret的用法

Opaque Secret

Opaque 类型的数据是一个 map 类型,要求value是base64编码格式,比如我们来创建一个用户名为 admin,密码为 admin321 的 Secret 对象,首先我们先把这用户名和密码做 base64 编码,

echo -n "admin" | base64
YWRtaW4=
echo -n "admin321" | base64
YWRtaW4zMjE=

然后我们就可以利用上面编码过后的数据来编写一个YAML文件:(secret-demo.yaml)

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
  namespace: default
type: Opaque
data:
  username: YWRtaW4=
  password: YWRtaW4zMjE=

然后同样的我们就可以使用kubectl命令来创建了:

$ kubectl create -f secret-demo.yaml
secret "mysecret" created

image-1711433936813
也可以用 kubectl get secret 命令查看:

使用describe命令,查看详情:
image-1711434057740
可以看到利用describe命令查看到的Data没有直接显示出来,如果想看到Data里面的详细信息,同样我们可以输出成YAML文件进行查看:
image-1711434118171

创建好Secret对象后,有两种方式来使用它:

  • 以环境变量的形式
  • 以Volume的形式挂载
环境变量

首先我们来测试下环境变量的方式,同样的,我们来使用一个简单的busybox镜像来测试下:(secret1-pod.yaml)

apiVersion: v1
kind: Pod
metadata:
  name: secret1-pod
  namespace: default
spec:
  containers:
  - name: secret1
    image: busybox
    command: ["/bin/sh", "-c", "env; sleep 3600"]
    env:
    - name: USERNAME
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: username
    - name: PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: password

创建上面的Pod:
image-1711437614937
然后查看pod的日志输出

kubectl logs -f secret1-pod -n 2048-game | grep -E 'USERNAME=|PASSWORD='

image-1711437570838
可以看到有 USERNAME 和 PASSWORD 两个环境变量输出出来。

Volume 挂载

同样的我们用一个Pod来验证下Volume挂载,创建一个Pod文件:(secret2-pod.yaml)

apiVersion: v1
kind: Pod
metadata:
  name: secret2-pod
  namespace: default
spec:
  containers:
  - name: secret2
    image: busybox
    command: ["/bin/sh", "-c", "ls /etc/secrets; sleep 4500"]
    volumeMounts:
    - name: secrets
      mountPath: /etc/secrets
  volumes:
  - name: secrets
    secret:
     secretName: mysecret

创建pod:
image-1711438104214
然后查看输出日志:
image-1711438141383
image-1711439886339
可以看到secret把两个key挂载成了两个对应的文件。当然如果想要挂载到指定的文件上面,在secretName下面添加items指定 key 和 path。

0

评论区