梦见你的名字 发表于 2024-8-27 19:51:12

k8s - Secret实践训练

参考文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/
这个和ConfigMap很相似,这里选两个做下测试,就不外多赘述了
简介

Secret 类似于 ConfigMap 但专门用于生存机密数据。
Secret 是一种包含少量敏感信息比方密码、令牌或密钥的对象。 如许的信息可能会被放在 Pod 规约中大概镜像中。 利用 Secret 意味着你不需要在应用程序代码中包含机密数据。
默认情况下,Kubernetes Secret 未加密地存储在 API 服务器的底层数据存储(etcd)中。 任何拥有 API 访问权限的人都可以检索或修改 Secret,任何有权访问 etcd 的人也可以。 此外,任何有权限在定名空间中创建 Pod 的人都可以利用该访问权限读取该定名空间中的任何 Secret; 这包括间接访问,比方创建 Deployment 的本领。
为了安全地利用 Secret,请至少执行以下步调:

[*]为 Secret 启用静态加密。
[*]以最小特权访问 Secret 并启用或设置 RBAC 规则。
[*]限定 Secret 对特定容器的访问。
[*]考虑利用外部 Secret 存储驱动。
有关管理和提拔 Secret 安全性的指南,请参阅 Kubernetes Secret 良好实践。
Secret的资源类型

内置类型用法Opaque用户界说的恣意数据kubernetes.io/service-account-token服务账下令牌kubernetes.io/dockercfg~/.dockercfg
文件的序列化形式kubernetes.io/dockerconfigjson~/.docker/config.json
文件的序列化形式kubernetes.io/basic-auth用于根自己份认证的凭据kubernetes.io/ssh-auth用于 SSH 身份认证的凭据kubernetes.io/tls用于 TLS 客户端大概服务器端的数据bootstrap.kubernetes.io/token启动引导令牌数据 可选类型参数

● generic: 通用类型
● tls:此类型仅用于存储私钥和证书
● docker-registry: 生存docker 堆栈的认证信息
利用场景

● 设置容器的情况变量。
● 向 Pod 提供 SSH 密钥或密码等凭据。
● 允许 kubelet 从私有镜像堆栈中拉取镜像。
Secret的利用

创建 Secret 有以下几种可选方式:
● 利用kubectl
● 利用设置文件
● 利用 Kustomize 工具
当你在 Pod 中引用 Secret 时,你可以将该 Secret 标记为可选,就像下面例子中所展示的那样。 假如可选的 Secret 不存在,Kubernetes 将忽略它。
比方:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
volumes:
- name: foo
    secret:
      secretName: mysecret
      optional: true
利用 kubectl 编辑 Secret

#这将打开默认编辑器,并允许你更新 data 字段中的 base64 编码的 Secret 值
kubectl edit secrets <secret-name>

#请编辑下面的对象。以“#”开头的行将被忽略,
#空文件将中止编辑。如果在保存此文件时发生错误,
#则将重新打开该文件并显示相关的失败。
apiVersion: v1
data:
password: UyFCXCpkJHpEc2I9
username: YWRtaW4=
kind: Secret
metadata:
creationTimestamp: "2022-06-28T17:44:13Z"
name: db-user-pass
namespace: default
resourceVersion: "12708504"
uid: 91becd59-78fa-4c85-823f-6d44436242ac
type: Opaque

#清理
kubectl delete secret db-user-pass
在 Pod 以文件形式利用 Secret

让 Kubernetes 将该 Secret 的值以 文件的形式呈现,该文件存在于 Pod 中一个或多个容器内的文件系统内。
创建一个可以通过卷访问 Secret 数据的 Pod。
#创建Secret - 和ConfigMap使用方式是不是很像?就中间加了个类型 generic/docker-registry/...
kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'

#pods/inject/secret-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: secret-test-pod
spec:
containers:
    - name: test-container
      image: nginx
      volumeMounts:
      # name 必须与下面的卷名匹配
      - name: secret-volume
          mountPath: /etc/secret-volume
          readOnly: true
# Secret 数据通过一个卷暴露给该 Pod 中的容器
volumes:
    - name: secret-volume
      secret:
      secretName: test-secret

#创建 Pod
kubectl apply -f https://k8s.io/examples/pods/inject/secret-pod.yaml

#确认 Pod 正在运行
kubectl get pod secret-test-pod

#获取一个 Shell 进入 Pod 中运行的容器
kubectl exec -i -t secret-test-pod -- /bin/bash

#Secret 数据通过挂载在 /etc/secret-volume 目录下的卷暴露在容器中。
#在 Shell 中,列举 /etc/secret-volume 目录下的文件:
#在容器中 Shell 运行下面命令
ls /etc/secret-volume

#在 Shell 中,显示 username 和 password 文件的内容:
#在容器中 Shell 运行下面命令
echo "$( cat /etc/secret-volume/username )"
echo "$( cat /etc/secret-volume/password )"
https://i-blog.csdnimg.cn/direct/e92d9af43bf0483a9b7824cdd28ff8bf.png
利用 Secret 数据界说容器变量

https://i-blog.csdnimg.cn/direct/e50bdea74caf4a0d827abdc9b53ee622.png
好,貌似中间件的账户密码什么的,是不是都可以如许玩儿了?

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: k8s - Secret实践训练