k8s学习--Secret详细解释与应用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Secret 支持四种类型:- **Opaque Secrets**:存储任意类型机密数据,需自行加密。- **Service Account Token Secrets**:自动管理 API 访问令牌。- **Docker Registry Secrets**:存储 Docker 私有仓库认证信息。- **TLS Secrets**:存储 TLS 证书和私钥,用于加密通信。

Secret

什么是Secret?

类似与ConfigMap 区别在于
ConfigMap存储明文
Secret存储密文

ConfigMap可以用作配置文件管理,
Secret用于密码、密钥、token等敏感数据配置管理

Secret特性

1非敏感数据:专门用于存储非敏感的配置信息。

2.多种数据源:数据可以从命令行、文件、目录等多种来源创建。

3.动态更新:更新 ConfigMap 后,Pod 可以动态加载新的配置信息(需要应用支持热加载)

Secret四种类型及其特点

Opaque Secrets(不透明Secrets):

Opaque Secrets是最通用的Secret类型,可以存储任意类型的机密数据,如用户名/密码、API密钥等。
数据以Base64编码的形式存储,并且要求用户自行对数据进行加密。


Service Account Token Secrets(服务账户令牌Secrets):

这种类型的Secret由Kubernetes自动生成和管理,用于存储与Service Account相关的API访问令牌。
这些Secrets默认会挂载到Pod中,以便允许Pod内的应用程序使用与Service Account相关的API访问令牌进行安全通信。


Docker Registry Secrets(Docker注册表Secrets):

用于存储访问Docker私有注册表所需的认证信息,如用户名、密码和邮箱。
这些Secrets通常用于在Kubernetes中拉取私有Docker镜像时进行身份验证。


TLS Secrets(TLS证书Secrets):

用于存储TLS证书和私钥,以便在TLS终止、HTTPS等情况下使用。
这些Secrets可用于在Kubernetes Ingress或Service中配置SSL/TLS终止,从而实现加密通信。

Secret应用案例

(1)将明文密码进行base64编码

Opaque类型密码需要进行base64编码

[root@master ~]# echo -n 123 | base64
MTIz

假设密码为123,得到的编码为MTIz

(2)编写创建secret的YAML文件

[root@master ~]# vim secret-mysql.yml

apiVersion: v1
kind: Secret
metadata:
  name: secret-mysql
data:
  password: MTIz

[root@master ~]# kubectl apply -f secret-mysql.yml

Secret的两种使用方式

(1)通过环境变量的方式传递给pod

编写pod的YAML文件使用Secret

[root@master ~]# vim pod-mysql-secret.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-mysql-secret1
spec:
  containers:
  - name: mysql
    image: mysql:5.7
    env:
      - name: MYSQL_ROOT_PASSWORD
        valueFrom:
          secretKeyRef:
            name: secret-mysql
            key: password
[root@master ~]# kubectl apply -f pod-mysql-secret.yml

等一会,因为本地没有,所以要下载mysql镜像

进入pod内,用传递的密码登录

[root@master ~]# kubectl exec -it pod-mysql-secret1 -- bash
[root@master ~]# kubectl exec -it pod-mysql-secret1 -- bash
root@pod-mysql-secret1:/# mysql -uroot -p123

登录成功即可

(2)通过volume的方式挂载到pod内(建议使用)

编写pod的YAML文件使用Secret
[root@master ~]# vim pod-mysql-secret2.yml

apiVersion: v1
kind: Pod
metadata:
  name: pod-mysql-secret2
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 10000
    volumeMounts:
    - name: vol-secret
      mountPath: "/opt/passwd"
      readOnly: true
  volumes:
  - name: vol-secret
    secret:
      secretName: secret-mysql

验证:

[root@master ~]# kubectl exec pod-mysql-secret2 -- cat /opt/passwd/password
123

热更新:

[root@master ~]# echo -n 123456 | base64
MTIzNDU2
[root@master ~]# kubectl edit secrets secret-mysql

pod-mysql-secret2已更新

[root@master ~]# kubectl exec pod-mysql-secret2 -- cat /opt/passwd/password
123456

pod-mysql-secret1未更新

[root@master ~]# kubectl exec -it pod-mysql-secret1 -- bash
root@pod-mysql-secret1:/# mysql -uroot -p123456

完成
有问题请指出,全天在

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5月前
|
存储 Kubernetes 数据安全/隐私保护
k8s学习-Secret(创建、使用、更新、删除等)
k8s学习-Secret(创建、使用、更新、删除等)
535 0
|
13小时前
|
存储 Kubernetes 开发工具
k8s学习--ConfigMap详细解释与应用
ConfigMap 是 Kubernetes 中用于管理非机密配置数据的 API 对象,可将应用配置与容器分离,便于动态管理和更新。它支持四种创建方式:命令行参数、多个文件、文件内的键值对以及 YAML 资源清单文件。ConfigMap 可通过环境变量或挂载为卷的方式传递给 Pod,并且当通过卷挂载时支持热更新。这使得配置管理更加灵活和安全,无需重新部署应用即可更新配置。
|
3月前
|
监控 Serverless 网络安全
函数计算操作报错合集之如何解决"access deny"错误
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
3月前
|
JSON 分布式计算 大数据
MaxCompute操作报错合集之连接环境时,出现报错:TypeError: access_id and secret_access_key,该怎么解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5月前
|
运维 Kubernetes 前端开发
云效产品使用报错问题之部署主机上的globalParams.sh中变量的值是base64编码过的,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5月前
|
SQL JavaScript
js开发:请解释什么是ES6的模板字符串(template string),并给出一个示例。
ES6的模板字符串以反引号包围,支持变量和表达式插入以及多行书写。例如,插入变量值`Hello, ${name}!`,计算表达式`${num1 + num2}`,以及创建多行字符串。模板字符串保留原始空格和缩进,简化了字符串拼接,提高了代码可读性。
43 6
|
5月前
|
JavaScript
js开发:请解释什么是ES6的默认参数(default parameters),并给出一个示例。
ES6允许在函数参数中设置默认值,如`function greet(name = 'World') {...}`。当调用函数不传入`name`参数时,它将默认为'World',提升代码简洁性和可读性。例如:`greet()`输出"Hello, World!",`greet('Alice')`输出"Hello, Alice!"。
29 4
|
10月前
|
存储 Kubernetes 数据安全/隐私保护
ConfigMap 补充 和 Secret
ConfigMap 补充 和 Secret
|
安全
BurpSuite进阶篇--自动识别Token值
BurpSuite进阶篇--自动识别Token值
420 0
BurpSuite进阶篇--自动识别Token值
|
存储 Kubernetes 安全
【k8s 系列】k8s 学习二十三-2,ConfigMap 补充 和 Secret
对于上一篇文章我们分享了为什么要使用 ConfigMap ,我们创建 ConfigMap 的时候可以传入单个或者多个键值对,也可以传入文件,还分享了如何简单的传入 ConfigMap 里面的数据作为环境变量
109 0