iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >kubernetes中Secret如何使用
  • 767
分享到

kubernetes中Secret如何使用

2023-06-04 17:06:41 767人浏览 八月长安
摘要

小编给大家分享一下kubernetes中Secret如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一: 简介Secret 可以作为数据卷被挂载,或作为环境

小编给大家分享一下kubernetes中Secret如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一: 简介
Secret 可以作为数据卷被挂载,或作为环境变量暴露出来以供 pod 中的容器使用。它们也可以被系统的其他部分使用,而不直接暴露在 pod 内。例如,它们可以保存凭据,系统的其他部分应该用它来代表您与外部系统进行交互。

Secret举例:

  1. apiVersion: v1

  2. kind: Secret

  3. metadata:

  4.   name: mysecret

  5. type: Opaque

  6. data:

  7.   username: YWRtaW4=

  8.   passWord: MWYyZDFlMmU2N2Rm


二:在 Pod 中使用 Secret 文件

1.创建一个 secret 或者使用已有的 secret。多个 pod 可以引用同一个 secret。

2.修改您的 pod 的定义在 spec.volumes[] 下增加一个 volume。可以给这个 volume 随意命名,它的 spec.volumes[].secret.secretName 必须等于 secret 对象的名字。

3.将 spec.containers[].volumeMounts[] 加到需要用到该 secret 的容器中。指定 spec.containers[].volumeMounts[].readOnly = true 和 spec.containers[].volumeMounts[].mountPath 为您想要该 secret 出现的尚未使用的目录。

4.修改您的镜像并且/或者命令行让程序从该目录下寻找文件。Secret 的 data 映射中的每一个键都成为了 mountPath 下的一个文件名。

  1. apiVersion: v1

  2. kind: Pod

  3. metadata:

  4.   name: mypod

  5. spec:

  6.   containers:

  7.   - name: mypod

  8.     image: redis

  9.     volumeMounts:

  10.     - name: foo

  11.       mountPath: "/etc/foo"

  12.       readOnly: true

  13.   volumes:

  14.   - name: foo

  15.     secret:

  16.       secretName: mysecret

您想要用的每个 secret 都需要在 spec.volumes 中指明。如果 pod 中有多个容器,每个容器都需要自己的 volumeMounts 配置块,但是每个 secret 只需要一个 spec.volumes。
您可以打包多个文件到一个 secret 中,或者使用的多个 secret,怎样方便就怎样来.

三:向特性路径映射 secret 密钥

我们还可以控制 Secret key 映射在 volume 中的路径。您可以使用 spec.volumes[].secret.items 字段修改每个 key 的目标路径:

  1. apiVersion: v1

  2. kind: Pod

  3. metadata:

  4.   name: mypod

  5. spec:

  6.   containers:

  7.   - name: mypod

  8.     image: Redis

  9.     volumeMounts:

  10.     - name: foo

  11.       mountPath: "/etc/foo"

  12.       readOnly: true

  13.   volumes:

  14.   - name: foo

  15.     secret:

  16.       secretName: mysecret

  17.       items:

  18.       - key: username

  19.         path: my-group/my-username

1.username secret 存储在 /etc/foo/my-group/my-username 文件中而不是 /etc/foo/username 中。
2.password secret 没有被影射

如果使用了 spec.volumes[].secret.items,只有在 items 中指定的 key 被影射。要使用 secret 中所有的 key,所有这些都必须列在 items 字段中。所有列出的密钥必须存在于相应的 secret 中。否则,不会创建卷。

四:Secret 文件权限
您还可以指定 secret 将拥有的权限模式位文件。如果不指定,默认使用 0644。您可以为整个保密卷指定默认模式,如果需要,可以覆盖每个密钥。

  1. apiVersion: v1

  2. kind: Pod

  3. metadata:

  4.   name: mypod

  5. spec:

  6.   containers:

  7.   - name: mypod

  8.     image: redis

  9.     volumeMounts:

  10.     - name: foo

  11.       mountPath: "/etc/foo"

  12.   volumes:

  13.   - name: foo

  14.     secret:

  15.       secretName: mysecret

  16.       defaultMode: 256

然后,secret 将被挂载到 /etc/foo 目录,所有通过该 secret volume 挂载创建的文件的权限都是 0400。
请注意,JSON 规范不支持八进制符号,因此使用 256 值作为 0400 权限。如果您使用 yaml 而不是 json 作为 pod,则可以使用八进制符号以更自然的方式指定权限。

五:从 Volume 中消费 secret 值
在挂载的 secret volume 的容器内,secret key 将作为文件,并且 secret 的值使用 base-64 解码并存储在这些文件中。这是在上面的示例容器内执行的命令的结果:

  1. $ ls /etc/foo/

  2. username

  3. password

  4. $ cat /etc/foo/username

  5. admin

  6. $ cat /etc/foo/password

  7. 1f2d1e2e67df

六:挂载的 secret 被自动更新
当已经在 volume 中消被消费的 secret 被更新时,被映射的 key 也将被更新。Kubelet 在周期性同步时检查被挂载的 secret 是不是最新的。但是,它正在使用其基于本地 ttl 的缓存来获取当前的 secret 值。结果是,当 secret 被更新的时刻到将新的 secret 映射到 pod 的时刻的总延迟可以与 kubelet 中的secret 缓存的 kubelet sync period + ttl 一样长。

:Secret 作为环境变量
1.创建一个 secret 或者使用一个已存在的 secret。多个 pod 可以引用同一个 secret。
2.在每个容器中修改您想要使用 secret key 的 Pod 定义,为要使用的每个 secret key 添加一个环境变量。消费secret key 的环境变量应填充 secret 的名称,并键入 env[x].valueFrom.secreTKEyRef。
3.修改镜像或者命令行,以便程序在指定的环境变量中查找值。

  1. apiVersion: v1

  2. kind: Pod

  3. metadata:

  4.   name: secret-env-pod

  5. spec:

  6.   containers:

  7.   - name: mycontainer

  8.     image: redis

  9.     env:

  10.       - name: SECRET_USERNAME

  11.         valueFrom:

  12.           secretKeyRef:

  13.             name: mysecret

  14.             key: username

  15.       - name: SECRET_PASSWORD

  16.         valueFrom:

  17.           secretKeyRef:

  18.             name: mysecret

  19.             key: password

  20.   restartPolicy: Never

消费环境变量里的 Secret 值
在一个消耗环境变量 secret 的容器中,secret key 作为包含 secret 数据的 base-64 解码值的常规环境变量。这是从上面的示例在容器内执行的命令的结果:

  1. $ echo $SECRET_USERNAME

  2. admin

  3. $ echo $SECRET_PASSWORD

  4. 1f2d1e2e67df

九:使用 imagePullSecret
imagePullSecret 是将包含 Docker(或其他)镜像注册表密码的 secret 传递给 Kubelet 的一种方式,因此可以代表您的 pod 拉取私有镜像。

:使用Secret的限制
1.验证 secret volume 来源确保指定的对象引用实际上指向一个类型为 Secret 的对象。因此,需要在依赖于它的任何 pod 之前创建一个 secret。
2.Secret API 对象驻留在命名空间中。它们只能由同一命名空间中的 pod 引用。
3.每个 secret 的大小限制为1MB。这是为了防止创建非常大的 secret 会耗尽 apiserver 和 kubelet 的内存。然而,创建许多较小的 secret 也可能耗尽内存。更全面得限制 secret 对内存使用的更全面的限制是计划中的功能。
4.Kubelet 仅支持从 API server 获取的 Pod 使用 secret。这包括使用 kubectl 创建的任何 pod,或间接通过 replication controller 创建的 pod。它不包括通过 kubelet --manifest-url 标志,其 --config 标志或其 REST API 创建的pod(这些不是创建 pod 的常用方法)。
5.必须先创建 secret,除非将它们标记为可选项,否则必须在将其作为环境变量在 pod 中使用之前创建 secret。对不存在的 secret 的引用将阻止其启动。
6.通过 secretKeyRef 对不存在于命名的 key 中的 key 进行引用将阻止该启动。
7.用于通过 envFrom 填充环境变量的 secret,这些环境变量具有被认为是无效环境变量名称的 key 将跳过这些键。该 pod 将被允许启动。将会有一个事件,其原因是 InvalidVariableNames,该消息将包含被跳过的无效键的列表。该示例显示一个 pod,它指的是包含2个无效键,1badkey 和 2alsobad 的默认/mysecret ConfigMap。

十一: Secret 与 Pod 生命周期的联系
通过 API 创建的 Pod 时,不会检查应用的 secret 是否存在。一旦 Pod 被调度,kubelet 就会尝试获取该 secret 的值。如果获取不到该 secret,或者暂时无法与 API server 建立连接,kubelet 将会定期重试。Kubelet 将会报告关于 pod 的事件,并解释它无法启动的原因。一旦获取的 secret,kubelet将创建并装载一个包含它的卷。在安装所有pod的卷之前,都不会启动 pod 的容器。

以上是“kubernetes中Secret如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: kubernetes中Secret如何使用

本文链接: https://www.lsjlt.com/news/238641.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • kubernetes中Secret如何使用
    小编给大家分享一下kubernetes中Secret如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一: 简介Secret 可以作为数据卷被挂载,或作为环境...
    99+
    2023-06-04
  • 如何在Kubernetes给PostgreSQL创建secret
    本篇内容主要讲解“如何在Kubernetes给PostgreSQL创建secret”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何在Kubernetes给PostgreSQL创建secret”...
    99+
    2023-06-04
  • 如何进行Kubernetes中Secret和私有仓库认证
    这篇文章给大家介绍如何进行Kubernetes中Secret和私有仓库认证,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。对一个公司来说安全也是最为重要的因为可能一旦出现安全问题可能这个公司就完了,所以对密码管理是一个长...
    99+
    2023-06-19
  • kubernetes中Service Account与Secret的示例分析
    这篇文章主要介绍kubernetes中Service Account与Secret的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一:Service Account与Secret数据结构二:Service A...
    99+
    2023-06-04
  • Kubernetes里的secret最基本的用法
    Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。使用如下命令行创建一个secret:ku...
    99+
    2023-06-04
  • kubernetes中如何使用PodPreset
    这篇文章主要介绍了kubernetes中如何使用PodPreset,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一:简介    PodPreset 资源对...
    99+
    2023-06-04
  • 如何在PHP中使用Kubernetes?
    近年来,Kubernetes已经成为了容器化部署的重要工具之一,而PHP作为应用开发的常用语言,如何在PHP中使用Kubernetes就成为了一个重要的话题。本文将介绍如何在PHP中使用Kubernetes,包括如何创建Kubernetes...
    99+
    2023-05-14
    使用 PHP Kubernetes
  • 如何使用Kubernetes
    这篇文章主要介绍“如何使用Kubernetes”,在日常操作中,相信很多人在如何使用Kubernetes问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Kubernet...
    99+
    2024-04-02
  • k8s中的secret怎么使用
    这篇文章主要讲解了“k8s中的secret怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“k8s中的secret怎么使用”吧!secret可以加密用户名和密码文件,将其打包成一个sec...
    99+
    2023-07-06
  • kubernetes中如何使用kubectl port-forward
    小编给大家分享一下kubernetes中如何使用kubectl port-forward,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:简介kubectl po...
    99+
    2023-06-04
  • 如何在PHP中使用Kubernetes函数
    随着云计算技术不断发展,Kubernetes已经成为了管理容器化应用程序的标准平台。使用Kubernetes可以轻松地管理和扩展应用程序,而且该平台的可靠性和安全性也得到了广泛认可。对于PHP开发人员来说,在Kubernetes上运行PHP...
    99+
    2023-05-18
    函数 PHP Kubernetes
  • YAML文件如何在kubernetes中使用
    YAML文件如何在kubernetes中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。01 YAML文件介绍      K8S在启动Pod...
    99+
    2023-06-14
  • Kubernetes中如何使用Rancher部署K8S集群
    本篇文章给大家分享的是有关Kubernetes中如何使用Rancher部署K8S集群,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.安装Rancher这里使用三台机器来搭建K...
    99+
    2023-06-19
  • kubernetes中如何使用 kubeadm 创建高可用集群
    本篇文章为大家展示了kubernetes中如何使用 kubeadm 创建高可用集群,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一. 环境和版本信息OS:  CentO...
    99+
    2023-06-19
  • 如何使用Go构建Kubernetes应用
    这篇文章主要介绍“如何使用Go构建Kubernetes应用”,在日常操作中,相信很多人在如何使用Go构建Kubernetes应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Go构建Kubernete...
    99+
    2023-06-15
  • Docker Secret的管理和使用详解
    一、什么是Docker Secret (一)情景展现  我们知道有的service是需要设置密码的,比如mysql服务是需要设置密码的: version: '3' ...
    99+
    2024-04-02
  • k8s中secret的用法详解
    secret可以加密用户名和密码文件,将其打包成一个secret并在API服务器上创建对象 echo -n 'admin' > ./username.txt echo -n '...
    99+
    2023-05-15
    k8s secret使用 k8s secret
  • 如何使用Kubeadm快速搭建Kubernetes
    这篇文章主要讲解了“如何使用Kubeadm快速搭建Kubernetes”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Kubeadm快速搭建Kubernetes”吧!##版本说明 ##...
    99+
    2023-06-19
  • docker中k8s如何配置secret拉取私仓镜像
    这篇文章主要介绍了docker中k8s如何配置secret拉取私仓镜像,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。对于公司内部的项目, 我们不可能使用公有开放的镜像仓库, ...
    99+
    2023-06-04
  • Mac上如何使用Docker Desktop启动Kubernetes
    本篇内容主要讲解“Mac上如何使用Docker Desktop启动Kubernetes”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mac上如何使用Docker Desktop启动Kuberne...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作