kubernetes k8s Secret 概述与配置讲解

embedded/2024/10/18 1:52:13/

目录

1 Secret概述

1.1 Secret是什么?

1.2 使用Secret


1 Secret概述

1.1 Secret是什么?

上面我们学习的Configmap一般是用来存放明文数据的,如配置文件,对于一些敏感数据,如密码、私钥等数据时,要用secret类型。

Secret解决了密码、token、秘钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。

要使用 secret,pod 需要引用 secret。Pod 可以用两种方式使用 secret:作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里,或者当 kubelet 为 pod 拉取镜像时使用。

secret可选参数有三种:

generic: 通用类型,通常用于存储密码数据。
tls:此类型仅用于存储私钥和证书。
docker-registry: 若要保存docker仓库的认证信息的话,就必须使用此种类型来创建。

Secret类型:

Service Account:用于被 serviceaccount 引用。serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的 secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。

Opaque:base64编码格式的Secret,用来存储密码、秘钥等。可以通过base64 --decode解码获得原始数据,因此安全性弱

kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。

1.2 使用Secret

1、通过环境变量引入Secret

#mysql的root用户的password创建成secret

[root@xianchaomaster1 ~]# kubectl create secret generic mysql-password --from-literal=password=xianchaopod**lucky66

[root@xianchaomaster1 ~]# kubectl get secret
NAME                          TYPE                                  DATA   AGE

mysql-password                Opaque                                1      30s

[root@xianchaomaster1 ~]# kubectl describe secret mysql-password

Name:         mysql-password

Namespace:    default

Labels:       <none>

Annotations:  <none>

Type:  Opaque

Data

====

password:  20bytes   

#password的值是加密的,
#但secret的加密是一种伪加密,它仅仅是将数据做了base64的编码.

#创建pod,引用secret

[root@xianchaomaster1 ~]# cat pod-secret.yaml

apiVersion: v1

kind: Pod

metadata:

  name: pod-secret

  labels:

     app: myapp

spec:

  containers:

  - name: myapp

    image: ikubernetes/myapp:v1

    ports:

    - name: http

      containerPort: 80

    env:

     - name: MYSQL_ROOT_PASSWORD   #它是Pod启动成功后,Pod中容器的环境变量名.

       valueFrom:

          secretKeyRef:

            name: mysql-password  #这是secret的对象名

            key: password      #它是secret中的key名

[root@xianchaomaster1 ~]# kubectl apply -f pod-secret.yaml

[root@xianchaomaster1 ~]# kubectl exec -it pod-secret -- /bin/sh

/ # printenv

MYSQL_ROOT_PASSWORD=xianchaopod**lucky66

2、通过volume挂载Secret

1)创建Secret

手动加密,基于base64加密

[root@xianchaomaster1 ~]# echo -n 'admin' | base64

YWRtaW4=

[root@xianchaomaster1 ~]# echo -n 'xianchao123456f' | base64

eGlhbmNoYW8xMjM0NTZm

解码:

[root@xianchaomaster1 ~]# echo eGlhbmNoYW8xMjM0NTZm  | base64 -d

2)创建yaml文件

[root@xianchaomaster1 ~]# vim secret.yaml

apiVersion: v1

kind: Secret

metadata:

  name: mysecret

type: Opaque

data:

  username: YWRtaW4=

  password: eGlhbmNoYW8xMjM0NTZm

[root@xianchaomaster1 ~]# kubectl apply -f secret.yaml

[root@xianchaomaster1]# kubectl describe secret mysecret

Name:         mysecret

Namespace:    default

Labels:       <none>

Annotations:  <none>

Type:  Opaque

Data

====

password:  15 bytes

username:  5 bytes

3)将Secret挂载到Volume中

[root@xianchaomaster1 ~]# vim pod_secret_volume.yaml

apiVersion: v1

kind: Pod

metadata:

  name: pod-secret-volume

spec:

  containers:

  - name: myapp

    image: registry.cn-beijing.aliyuncs.com/google_registry/myapp:v1

    volumeMounts:

    - name: secret-volume

      mountPath: /etc/secret

      readOnly: true

  volumes:

  - name: secret-volume

    secret:

      secretName: mysecret

[root@xianchaomaster1 ~]# kubectl apply -f pod_secret_volume.yaml

[root@xianchaomaster1 ~]# kubectl exec -it pod-secret-volume -- /bin/sh

/ # ls /etc/secret

password  username

/ #

/ # cat /etc/secret/username

admin/ #

/ #

/ # cat /etc/secret/password

xianchao123456f/ #

#由上可见,在pod中的secret信息实际已经被解密。


http://www.ppmy.cn/embedded/100109.html

相关文章

安装docker 遇到异常Could not resolve host: mirrorlist.centos.org; 未知的错误

问题 安装docker 遇到异常 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infrastock error was 14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误” 1、安装Docker依赖包 yum install …

探索JetBrains IDE数据库驱动的存储位置及离线安装指南

JetBrains IDE&#xff0c;如IntelliJ IDEA和GoLand&#xff0c;是广受开发者喜爱的集成开发环境。它们提供了强大的数据库支持功能&#xff0c;包括数据库连接和操作。了解数据库驱动的存储位置对于进行离线安装和配置非常重要。 理解数据库驱动 数据库驱动是软件应用程序与…

【计算机三级-数据库技术】操作题大题(第八套)

第46题 &#xff08;1&#xff09; 1 (2) create table ( a1 int, a6 int, a10 int, Primary Key(a1, a6), Constraint fk_PerOrders Foreign Key (a1) References T1(a1), Constraint fk_PerOrders Foreign Key (a6) References T3(a6) ) 第47题 答案&#xff1a; [1]Pro…

单片机学习笔记概述

单片机是一种集成了处理器核心、存储器、输入/输出接口等多种功能于一体的微型计算机系统。由于其体积小、成本低、功耗低、易于编程和扩展等优点&#xff0c;单片机被广泛应用于各种嵌入式系统中&#xff0c;如家用电器、工业控制、仪器仪表、汽车电子等领域。 一、单片机的详…

涉密载体管控系统DW-S402|实现涉密载体的精确掌控

东识涉密载体管控系统DW-S402是用于对各种涉密载体进行有效管理的智能柜&#xff08;智能管理系统&#xff09;&#xff0c;实现对载体的智能化、规范化、标准化管理&#xff0c;广泛应用于保密、机要单位以及企事业单位等有载体保管需求的行业。 系统主要功能包括物品存放、物…

《通义千问AI落地—下》:WebSocket详解

一、前言 文本源自 微博客 且已获授权,请尊重版权。 《通义千问AI落地——下篇》如约而至。Websocket在这一类引用中,起到前后端通信的作用。因此,本文将介绍websocket在这类应用场景下的配置、使用、注意事项以及ws连接升级为wss连接等;如下图,本站已经使用了wss连接…

如何安装IntelliJ IDEA最新版本

安装IntelliJ IDEA最新版本的步骤如下&#xff1a; 目录 访问官方网站&#xff1a; 选择版本&#xff1a; 下载安装包&#xff1a; 安装IntelliJ IDEA&#xff1a; 启动IntelliJ IDEA&#xff1a; 激活IntelliJ IDEA&#xff1a; 备注&#xff1a; 访问官方网站&#x…

C++ | Leetcode C++题解之第368题最大整除子集

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> largestDivisibleSubset(vector<int>& nums) {int len nums.size();sort(nums.begin(), nums.end());// 第 1 步&#xff1a;动态规划找出最大子集的个数、最大子集中的最大整数vect…