当前位置: 首页 > news >正文

从零开始的云计算生活——第四十六天,铁杵成针,kubernetes模块之Configmap资源与Secret资源对象

目录

一.故事背景

二.Configmap资源

1.Configmap 概述

什么是 Configmap?

Configmap 能解决哪些问题?

Configmap 应用场景

使用 ConfigMap 的限制条件

2.Configmap 创建方法

命令行直接创建

通过文件创建(常用)

指定目录创建 configmap(常用)

3.使用 Configmap

通过环境变量引入

通过环境变量引入

把 configmap 做成 volume,挂载到 pod(常用)

4.Configmap 热更新

三.K8S-Secret资源对象

1.Secret概述

2.Secret 类型

kubectl 创建类型

3. Secret 使用

Opaque 类型 Secret 的使用

kubectl create创建

yaml创建

挂载

作为环境变量

作为文件挂载及设置 POSIX 权限

查看 secret

ssh 类型 secret

通过文件创建

pod 挂载 ssh secret

四.总结


一.故事背景

今日继续讲解k8s的两个模块

二.Configmap资源

1.Configmap 概述

什么是 Configmap?

Configmap 是 k8s 中的资源对象,用于保存非机密性的配置的,数据可以用 key/value 键值对的形式保存,也可通过文件的形式保存。

Configmap 能解决哪些问题?

ConfigMap 的主要作用就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。

我们在部署服务的时候,每个服务都有自己的配置文件,如果一台服务器上部署多个服务:nginx、nginx、apache 等,那么这些配置都存在这个节点上,假如一台服务 器不能满足线上高并发的要求,需要对服务器扩容,扩容之后的服务器还是需要部署 多个服务:nginx、nginx、apache,新增加的服务器上还是要管理这些服务的配置, 如果有一个服务出现问题,需要修改配置文件,每台物理节点上的配置都需要修改, 这种方式肯定满足不了线上大批量的配置变更要求。 所以,k8s 中引入了 Configmap 资源对象,可以当成 volume 挂载到 pod 中,实现统一的配置管理。

1、Configmap 是 k8s 中的资源, 相当于配置文件,可以有一个或者多个 Configmap;

2、Configmap 可以做成 Volume,k8s pod 启动之后,通过 volume 形式映射到容器内部指定目录上;

3、容器中应用程序按照原有方式读取容器特定目录上的配置文件。

4、在容器看来,配置文件就像是打包在容器内部特定目录,整个过程对应用没有任何侵入。

Configmap 应用场景

1、使用 k8s 部署应用,当你将应用配置写进代码中,更新配置时也需要打包镜像,configmap 可以将配置信息和 docker 镜像解耦,以便实现镜像的可移植性和可复用性,因为一个 configMap 其实就是一系列配置信息的集合,可直接注入到 Pod 中给容器使用。configmap 注入方式有两种,一种将 configMap 做为存储卷,一种是将configMap 通过 env 中 configMapKeyRef 注入到容器中。

2、使用微服务架构的话,存在多个服务共用配置的情况,如果每个服务中单独一份配置的话,那么更新配置就很麻烦,使用 configmap 可以友好的进行配置共享。

使用 ConfigMap 的限制条件

  • ConfigMap 需要在 Pod 启动前创建出来;

  • 并且只有当 ConfigMap 和 Pod 处于同一命名空间时,才可以被 Pod 引用;

  • 当 Pod 挂载 ConfigMap 绑定的目录时,目录下的目录并不会挂载到 Pod 内,只有目录下的文件会被挂载。

  • ConfigMap 在设计上不是用来保存大量数据的。在 ConfigMap 中保存的数据不可超过 1MiB。如果你需要保存超出此尺寸限制的数据,可以考虑挂载存储卷或者使用独立的数据库或者文件服务。

2.Configmap 创建方法

命令行直接创建

直接在命令行中指定 configmap 参数创建,通过--from-literal 指定参数

创建选项解析:

--allow-missing-template-keys

含义:如果设置为true,当模板中的字段或映射键在数据来源中缺失时,忽略模板中的任何错误。

--append-hash

含义:将configmap的哈希值附加到它的名称后面。

--as-group

含义:指定操作时要模拟的组。这个标志可以重复使用,以指定多个组,用于在操作中进行权限模拟。

--as-uid

含义:指定操作时要模拟的用户ID(UID)。

--as

含义:指定操作时要模拟的用户名。这个用户可以是普通用户或者服务账户,用于在操作中进行权限模拟。

--cache-dir

含义:默认的缓存目录路径。

--certificate-authority

含义:指向证书颁发机构(CA)证书文件的路径,用于验证服务器证书的合法性。

--client-certificate

含义:指向用于TLS(传输层安全协议)的客户端证书文件的路径。

--client-key

含义:指向用于TLS的客户端密钥文件的路径。

--cluster

含义:指定要使用的kubeconfig中的集群名称。kubeconfig是Kubernetes用于配置客户端访问集群的文件。

--context

含义:指定要使用的kubeconfig中的上下文名称。上下文包含了集群、用户和命名空间等信息,用于确定如何与集群进行交互。

--disable-compression

含义:如果设置为true,对发送到服务器的所有请求都不使用响应压缩。

--dry-run

含义:必须是“none”、“server”或“client”之一。如果是“client”策略,仅打印出将要发送到服务器的对象,而不实际执行创建操作;“server”可能在服务器端进行一些验证但不持久化;“none”则是正常执行操作。

--field-manager

含义:用于跟踪字段所有权的管理器名称。

--from-env-file

含义:指定一个文件路径,用于读取以键值对(key=val)形式的行来创建configmap。

--from-file

含义:可以使用文件路径来指定键文件,在这种情况下,文件的基本名称(不含路径)将被用作configmap中的键,文件内容作为值。

--from-literal

含义:指定一个键和一个字面量值,用于插入到configmap中(例如mykey=somevalue)。

--help

含义:显示configmap相关的帮助信息。

--insecure-skip-tls-verify

含义:如果设置为true,将不会检查服务器证书的有效性。这会使你的连接变得不安全,但在某些测试或特殊环境下可能会用到。

--kubeconfig

含义:指向用于命令行接口(CLI)请求的kubeconfig文件的路径。

--log-flush-frequency

含义:日志刷新的最大间隔秒数,即多久将日志缓冲区中的内容刷新输出一次。

--match-server-version

含义:要求服务器版本与客户端版本匹配。

--namespace

含义:如果存在此选项,它指定了这个命令行请求的命名空间范围。命名空间用于在Kubernetes集群中对资源进行隔离和分组。

--output

含义:输出格式。可以是以下之一:(json、yaml、name、go-template、go-template-file、template等),用于指定命令执行结果的输出格式。

--password

含义:用于对API服务器进行基本身份验证的密码。

--profile

含义:要捕获的性能分析(profile)名称。可以是(none、cpu、heap、goroutine、threadcreate、block、mutex)之一,用于对Kubernetes组件的性能进行分析。

--profile-output

含义:指定要将性能分析结果写入的文件名。

--request-timeout

含义:在放弃单个服务器请求之前等待的时间长度。非零值会设置请求超时时间,避免长时间等待无响应的服务器。

--save-config

含义:如果设置为true,当前对象的配置将保存在其注释中。否则,不会保存配置。

--server

含义:Kubernetes API服务器的地址和端口,用于指定客户端连接的服务器位置。

--show-managed-fields

含义:如果设置为true,在以JSON或YAML格式打印对象时,保留managedFields字段。这些字段通常用于记录资源的管理信息。

--template

含义:当-o=go-template、-o=go-template-file等输出格式选项被使用时,指定要使用的模板字符串或模板文件路径。

--tls-server-name

含义:用于服务器证书验证的服务器名称。如果未提供,将使用主机名进行验证。

--token

含义:用于对API服务器进行身份验证的承载令牌(Bearer Token)。

--username

含义:用于对API服务器进行基本身份验证的用户名。

--user

含义:指定要使用的kubeconfig用户的名称。

--validate

含义:必须是以下之一:strict(或true)、warn、ignore(或false),用于指定对资源配置的验证级别。

--vmodule

含义:逗号分隔的pattern=N设置列表,用于基于文件过滤的日志记录(仅适用于特定的日志系统)。

--v

含义:日志级别详细程度的数字表示,用于控制日志输出的信息量。

--warnings-as-errors

含义:将从服务器接收到的警告视为错误,并以非零退出码退出命令执行。

通过文件创建(常用)

通过指定文件创建一个 configmap,--from-file=<文件>,若没有定义key,则使用文件名作为key,文件内容作为value。

apiVersion: v1
kind: Pod
metadata:name: pod-testlabels:app: nginx129
spec:containers:- name: nginx129ports:- containerPort: 80image: nginx:latestimagePullPolicy: IfNotPresent

将default.conf拷出来并修改

在nginx.yaml中新加内容

volumeMounts:- name: nginx-configmountPath: /etc/nginx/conf.d/volumes:- name: nginx-configconfigMap:name: nginx-conf  

创建一个svc.yaml

apiVersion: v1
kind: Service
metadata:name: svc-test
spec:type: NodePortports:- targetPort: 81port: 808selector:app: nginx129

成功挂载过去

访问30530端口

指定目录创建 configmap(常用)

#查看 configmap 详细信息

3.使用 Configmap

通过环境变量引入

使用 configMapKeyRef变量

#创建一个存储 mysql 配置的 configmap[root@k8s-master01 ~]# cat mysql-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mysqllabels:app: mysql
data:log: "1"lower: "1"
[root@k8s-master01 ~]# kubectl apply -f mysql-configmap.yamlconfigmap/mysql created[root@k8s-master01 ~]# kubectl get cmNAME               DATA   AGEkube-root-ca.crt   1      13dmysql              2      82s#创建 pod,引用 Configmap 中的内容[root@k8s-master01 ~]# cat mysql-pod.yamlapiVersion: v1
kind: Pod
metadata:name: mysql-pod
spec:containers:- name: mysqlimage: busybox:1.28imagePullPolicy: IfNotPresentcommand: [ "/bin/sh", "-c", "sleep 3600" ]env:- name: log_bin #定义环境变量 log_binvalueFrom:configMapKeyRef:name: mysql #指定 configmap 的名字key: log #指定 configmap 中的 key- name: lower #定义环境变量 lowervalueFrom:configMapKeyRef:name: mysqlkey: lowerrestartPolicy: Never#更新资源清单文件[root@k8s-master01 ~]# kubectl apply -f mysql-pod.yaml[root@k8s-master01 ~]#  kubectl exec -it mysql-pod -- /bin/sh/ # env
log_bin=1
KUBERNETES_PORT=tcp://10.10.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=mysql-pod
NGINX_SVC_NODEPORT_PORT_8000_TCP_ADDR=10.10.166.16
SHLVL=1
HOME=/root
NGINX_SVC_NODEPORT_PORT_8000_TCP_PORT=8000
NGINX_SVC_NODEPORT_PORT_8000_TCP_PROTO=tcp
SERVICE_BLUE_SERVICE_HOST=10.10.157.201
NGINX_SVC_NODEPORT_SERVICE_HOST=10.10.166.16
SERVICE_BLUE_SERVICE_PORT=80
SERVICE_BLUE_PORT=tcp://10.10.157.201:80
NGINX_SVC_NODEPORT_PORT_8000_TCP=tcp://10.10.166.16:8000
TERM=xterm
lower=1
KUBERNETES_PORT_443_TCP_ADDR=10.10.0.1
NGINX_SVC_NODEPORT_PORT=tcp://10.10.166.16:8000
NGINX_SVC_NODEPORT_SERVICE_PORT=8000
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SERVICE_BLUE_PORT_80_TCP_ADDR=10.10.157.201
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
SERVICE_BLUE_PORT_80_TCP_PORT=80
SERVICE_BLUE_PORT_80_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.10.0.1:443
KUBERNETES_SERVICE_HOST=10.10.0.1
PWD=/
SERVICE_BLUE_PORT_80_TCP=tcp://10.10.157.201:80

通过环境变量引入

#使用 envfrom变量[root@k8s-master01 ~]# cat  mysql-pod-envfrom.yamlapiVersion: v1
kind: Pod
metadata:name: mysql-pod-envfrom
spec:containers:- name: mysqlimage: busybox:1.28imagePullPolicy: IfNotPresentcommand: [ "/bin/sh", "-c", "sleep 3600" ]envFrom:- configMapRef:name: mysql  #指定configmap的名字restartPolicy: Never#更新资源清单文件[root@k8s-master01 ~]# kubectl apply -f mysql-pod-envfrom.yamlpod/mysql-pod-envfrom created[root@k8s-master01 ~]# kubectl get podsNAME                               READY   STATUS    RESTARTS   AGEmysql-pod                          1/1     Running   0          13mmysql-pod-envfrom                  1/1     Running   0          107s[root@k8s-master01 ~]#  kubectl exec -it mysql-pod-envfrom -c mysql -- /bin/sh/ # env
KUBERNETES_PORT=tcp://10.10.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=mysql-pod-envfrom
NGINX_SVC_NODEPORT_PORT_8000_TCP_ADDR=10.10.166.16
SHLVL=1
HOME=/root
NGINX_SVC_NODEPORT_PORT_8000_TCP_PORT=8000
NGINX_SVC_NODEPORT_PORT_8000_TCP_PROTO=tcp
SERVICE_BLUE_SERVICE_HOST=10.10.157.201
NGINX_SVC_NODEPORT_SERVICE_HOST=10.10.166.16
SERVICE_BLUE_SERVICE_PORT=80
SERVICE_BLUE_PORT=tcp://10.10.157.201:80
NGINX_SVC_NODEPORT_PORT_8000_TCP=tcp://10.10.166.16:8000
TERM=xterm
lower=1
KUBERNETES_PORT_443_TCP_ADDR=10.10.0.1
NGINX_SVC_NODEPORT_PORT=tcp://10.10.166.16:8000
NGINX_SVC_NODEPORT_SERVICE_PORT=8000
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
log=1
KUBERNETES_PORT_443_TCP_PORT=443
SERVICE_BLUE_PORT_80_TCP_ADDR=10.10.157.201
KUBERNETES_PORT_443_TCP_PROTO=tcp
SERVICE_BLUE_PORT_80_TCP_PORT=80
SERVICE_BLUE_PORT_80_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.10.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.10.0.1
PWD=/
SERVICE_BLUE_PORT_80_TCP=tcp://10.10.157.201:80

把 configmap 做成 volume,挂载到 pod(常用)

[root@k8s-master01 ~]# cat mysql-configmap.yamlapiVersion: v1
kind: ConfigMap
metadata:name: mysqllabels:app: mysql
data:log: "1"lower: "1"my.cnf: |[mysqld]welcome=duoduo[root@k8s-master01 ~]# kubectl apply -f mysql-configmap.yamlconfigmap/mysql configured#查看详细配置信息[root@k8s-master01 ~]# kubectl describe configmap mysqlName:         mysql
Namespace:    default
Labels:       app=mysql
Annotations:  <none>Data
====
log:
----
1
lower:
----
1
my.cnf:
----
[mysqld]
welcome=duoduoBinaryData
====Events:  <none>#创建pod资源清单文件,挂载configmap卷[root@k8s-master01 ~]# cat mysql-pod-volume.yamlapiVersion: v1
kind: Pod
metadata:name: mysql-pod-volume
spec:containers:- name: mysqlimage: busybox:1.28imagePullPolicy: IfNotPresentcommand: [ "/bin/sh","-c","sleep 3600" ]volumeMounts:- name: mysql-configmountPath: /tmp/configvolumes:- name: mysql-configconfigMap:name: mysqlrestartPolicy: Never[root@k8s-master01 ~]# kubectl apply -f mysql-pod-volume.yamlpod/mysql-pod-volume created[root@k8s-master01 configmap]# kubectl exec -it mysql-pod-volume -- /bin/sh
/ # 
/ # 
/ # 
/ # cd /tmp/config/
/tmp/config # ls
log     lower   my.cnf
/tmp/config # ls -l
total 0
lrwxrwxrwx    1 root     root            10 Feb  1 08:12 log -> ..data/log
lrwxrwxrwx    1 root     root            12 Feb  1 08:12 lower -> ..data/lower
lrwxrwxrwx    1 root     root            13 Feb  1 08:12 my.cnf -> ..data/my.cnf

4.Configmap 热更新

仅限于卷的形式,如果是环境变量的形式则不更新!!!

限于应用程序能够对配置文件进行动态感知。nginx不行,需要在apply之后对pod执行命令:

nginx -s reload

[root@k8s-master01 ~]# kubectl edit configmap mysql#将log:1 变成 log:2
apiVersion:v1
data:log:"2"lower:"1"

重新执行一次资源清单文件

[root@k8s-master01 test1]# kubectl apply -f mysql-pod-volume.yamlpod/mysql-pod-volume configured[root@k8s-master01 ~]# kubectl exec -it mysql-pod-volume -- /bin/sh/ # cat /tmp/config/log2/ ##一次构建镜像,通过配置管理中心configmap 实现了 多场景运行

三.K8S-Secret资源对象

1.Secret概述

k8s secrets用于存储和管理一些敏感数据,比如密码,token,密钥等敏感信息。它把 Pod 想要访问的加密数据存放到 Etcd 中。然后用户就可以通过在 Pod 的容器里挂载 Volume 的方式或者环境变量的方式访问到这些 Secret 里保存的信息了。

Secret 类似于 ConfigMap,但专门用于保存机密数据。

2.Secret 类型

内置类型用法
Opaque用户定义的任意数据
kubernetes.io/service-account-tokensymotion服务账号令牌
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启动引导令牌数据

kubectl 创建类型

Create a secret using specified subcommand.Available Commands:docker-registry   创建一个给 Docker registry 使用的 secretgeneric           Create a secret from a local file, directory, or literal valuetls               创建一个 TLS secretUsage:kubectl create secret [flags] [options]Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
  • docker-registry: 连接私有镜像仓库的凭证(据)

  • generic: 常见 secret, 该类型 secret 与 configmap使用相同

  • tls: 提供 tls 证书, 在 service mesh 中自动挂载

3. Secret 使用

使用场景:

  • 设置容器的环境变量

  • 向 Pod 提供 SSH 密钥或密码等凭据

  • 允许 kubelet 从私有镜像仓库中拉取镜像

Opaque 类型 Secret 的使用

kubectl create创建

其中hello有5个字符所以k1是5 bytes

汉字你好一共6 bytes,所以一个汉字是3个bytes

yaml创建

以 yaml 方式创建需要你提前进行 base64

先加密

编写yaml文件

apiVersion: v1
kind: Secret
metadata:name: secret-volumenamespace: default
type: Opaque
data:password: MTIzNDU2username: YWRtaW4=
immutable: true
挂载
  1. 作为环境变量

创建 pod

[root@k8s-master secret]# cat secret-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: pod1
spec:containers:- image: busybox:1.28name: busyboxcommand: ["/bin/sh","-c","echo $username && env"]env:- name: usernamevalueFrom:secretKeyRef:key: usernamename: secret-volume    # secret 名称
####pod不会运行,测试时需要查看日志####          ######或者########
[root@k8s-master01 secret]# cat secret-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: pod1
spec:containers:- image: busybox:1.28name: busyboxcommand: ["/bin/sh","-c","sleep 3600"]env:- name: usernamevalueFrom:secretKeyRef:key: usernamename: secret-volume    # secret 名称
####pod会启动,需要进入容器中查看####

获取容器日志

# 创建
[root@k8s-master01 secret]# kubectl create -f pod1.yaml[root@k8s-master01 secret]# kubectl logs pod1
admin
KUBERNETES_PORT=tcp://10.10.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=pod1
NGINX_SVC_NODEPORT_PORT_8000_TCP_ADDR=10.10.166.16
SHLVL=1
username=admin
HOME=/root
NGINX_SVC_NODEPORT_PORT_8000_TCP_PORT=8000
SERVICE_BLUE_SERVICE_HOST=10.10.157.201
NGINX_SVC_NODEPORT_PORT_8000_TCP_PROTO=tcp
NGINX_SVC_NODEPORT_SERVICE_HOST=10.10.166.16RVICE_BLUE_SERVICE_PORT=80
SERVICE_BLUE_PORT=tcp://10.10.157.201:80
NGINX_SVC_NODEPORT_PORT_8000_TCP=tcp://10.10.166.16:8000
KUBERNETES_PORT_443_TCP_ADDR=10.10.0.1
NGINX_SVC_NODEPORT_PORT=tcp://10.10.166.16:8000
NGINX_SVC_NODEPORT_SERVICE_PORT=8000
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SERVICE_BLUE_PORT_80_TCP_ADDR=10.10.157.201
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
SERVICE_BLUE_PORT_80_TCP_PORT=80
SERVICE_BLUE_PORT_80_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.10.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.10.0.1
PWD=/
SERVICE_BLUE_PORT_80_TCP=tcp://10.10.157.201:80
作为文件挂载及设置 POSIX 权限

创建 pod

apiVersion: v1
kind: Pod
metadata:name: pod2
spec:volumes:- name: secsecret:secretName: secret-volumedefaultMode: 0400  # 设置文件权限containers:- image: busybox:1.28name: busyboxcommand: ["sleep", "24h"]volumeMounts:- mountPath: /etc/configname: sec

注意: secret 挂载到容器后自动 base64 解码

$ kubectl exec pod2 -- ls -l /etc/config/
total 0
lrwxrwxrwx    1 root     root            15 Jan  9 08:00 password -> ..data/password
lrwxrwxrwx    1 root     root            15 Jan  9 08:00 username -> ..data/username$ kubectl exec pod2 -- cat /etc/config/username
admin
查看 secret
$ kubectl get secrets sa-secret -o yaml
apiVersion: v1
data:ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJWVB2VXI2cG02NFF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpFeU16QXdPVE16TVRkYUZ3MHpNekV5TWpjd09UTTRNVGRhTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUM0M1JFazZPZ0VFMGVWN1JHbmc1YnRONEdHaE5uUFNjbUZuYy9LKzhlSEZESVlPRkRKblZlZ0tOUmQKblVOSEFUL2h3T3RaWFZUTHhieWRGTVNqd0xSeDVPNTg5bUlVM3M2SlVZZjFvajFCUjFsWlkreXA5eVRGdXFYYQphbzc3WTVPbkVpT3BOQXUxek1WWUFRK0V2bzJtbmY2b0p6WDd3SFc2TkxZd0V0TVA2cklhclNaaU11MTllRnBWCnpmNU5RMGFGUU4vbkJyQUpHQm15eHF1cGhNRFpYOXlyK1c3emY4Q296NkxuTHRCMCtIaEtHYm9kUGVyaWk0bjgKczJlc2tLdmZ6NmdJK0dhR3ROYWtNU3gwbVZXV0MycTBDbndrOVJEOTNhd1JWRHd2VnZRczljR1B0R0I3WVdIcApDOXBLeTdaOEgybjdDZndza2FqZTMzWnhuUzJaQWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJRU1oxaVlWKzlQNTRiNHB3UU9QVkI0TklXYndEQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQkdNRzMvN3dSZwp0ZkxDMkNHTGtRcUdaQmNtTlBzR0lwbmRqSnpTSzVjMXJMSVUrNjNHN3ZnWEJENHVuZ3B5RDFRVE5VSWp1ZVRXCkMxM1lZb1ZjK09zZkIvWFlVRkFvZ1JiWWtvZjV2TTBUeFVzdXN1VVUvT0Q2NDc0cE5xajlzQStrejRiMUliMzAKOVFmUG5mM2ZieVZyVmh0dlYxQmxsNVMwMmVDa2xaazM1SjAzczFLdytOWHovSjQzTDF6UlJjNytCa3M1UVpvbAp2ZnhJYW1BaXdqWGFUMDBhVVB3WjZ4S215KzcvUkZuRjB4aExlanhKRTBrOUU0YWR3NGhWSkNWMUp2aWdzcEpDCmNQL3BJMC9hSlVKeHVKNWZVeENuRVRVOXRpNi9aTGloeDg4Uk1vdmRFS0R4RDZJYlpKSWkxYVJwajhVeGdnL0UKcm1ONU5YTnN3Sk9XCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0Knamespace: ZGVmYXVsdA==password: MTIzNDU2token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkluZHBiR05VZVVwd1pUbEpRbEJpV0ZReGFFeHFaamh5WlROWE4wOHdXRXBtU1Y4eGJtODRWblp0UlVFaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUprWldaaGRXeDBJaXdpYTNWaVpYSnVaWFJsY3k1cGJ5OXpaWEoyYVdObFlXTmpiM1Z1ZEM5elpXTnlaWFF1Ym1GdFpTSTZJbk5oTFhObFkzSmxkQ0lzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVnlkbWxqWlMxaFkyTnZkVzUwTG01aGJXVWlPaUowWkdRaUxDSnJkV0psY201bGRHVnpMbWx2TDNObGNuWnBZMlZoWTJOdmRXNTBMM05sY25acFkyVXRZV05qYjNWdWRDNTFhV1FpT2lKbVpEWTRZelkwTVMwMU1qSXpMVFJsTUdRdFlqRXlaQzFpWkdKbE5ETXlOMlpsT0dZaUxDSnpkV0lpT2lKemVYTjBaVzA2YzJWeWRtbGpaV0ZqWTI5MWJuUTZaR1ZtWVhWc2REcDBaR1FpZlEuY09UZXoyM2w3VFl2TjFFN1FYcW4xVkN4dUxhbEJCN0JOMTVyU05IWFZndk5waEY4ZTd3ZkY4R3VheXFaSmZtdXB3ZE5HVzV2SFVRbE8yQVQtX3pGZkEta0hSbEN6OVZzZUVnTV82S0lrZ3FiZlNKNGw2WDRQOWFwaEdvYUhBaEdJUGdibTVGU1UwTWR6NlhzNW9fSnVvVjZfWkxxN3BZRVlGU0Y3REF1U0VyZHljSjdBZFFidWl6cHhuOE5lb3JhZ3Y5OWNDWjFlQjVJS0lGQW05SjBld1dlZEJBOUJhM0haN2RXQWozNE9uLW9mTWVKOWtQcmhvZWlUb2dtSkk5SE9NYWd4Ynh4YmF5cVpYdW9TQWJBSkNqVkRoUVZxdUJZRnJ5T09lWFowSnlXaWkyeVdVQWVvdVNDSEtRWUFXd2pmU2dwaGtKdzFQUkE4M3pFQWFmc3hnusername: YWRtaW4=
kind: Secret
metadata:annotations:kubernetes.io/service-account.name: tddkubernetes.io/service-account.uid: fd68c641-5223-4e0d-b12d-bdbe4327fe8fcreationTimestamp: "2024-01-09T08:49:30Z"name: sa-secretnamespace: defaultresourceVersion: "630499"uid: c41bc253-c2c4-4d2f-a5d9-0a4fe8b0d8da
type: kubernetes.io/service-account-token

ssh 类型 secret

通过文件创建
$ kubectl create secret generic ssh-key-secret --from-file=ssh-privatekey=/path/to/.ssh/id_rsa --from-file=ssh-publickey=/path/to/.ssh/id_rsa.pub
pod 挂载 ssh secret
apiVersion: v1
kind: Pod
metadata:name: secret-test-podlabels:name: secret-test
spec:volumes:- name: secret-volumesecret:secretName: ssh-key-secretcontainers:- name: ssh-test-containerimage: mySshImagevolumeMounts:- name: secret-volumereadOnly: truemountPath: "/etc/secret-volume"

容器命令执行时,秘钥的数据可以在下面的位置访问到:

/etc/secret-volume/ssh-publickey
/etc/secret-volume/ssh-privatekey

容器就可以随便使用 Secret 数据来建立 SSH 连接。

四.总结

   本文介绍了Kubernetes中的Configmap和Secret两大核心资源。Configmap用于存储非机密配置数据,支持命令行、文件等多种创建方式,可通过环境变量或卷挂载到Pod中,实现配置与镜像解耦。Secret专门处理敏感数据,包括Opaque、TLS等类型,可通过环境变量或卷挂载。重点讲解了两种资源的使用场景、创建方法及实践案例,如Configmap热更新限制、Secret的base64编码特性等,帮助实现安全的配置管理和敏感信息处理。

http://www.dtcms.com/a/339131.html

相关文章:

  • 【Java】Spring Boot 3.0 微服务架构:高效开发与部署的最佳实践指南
  • CETOL 6σ 解决一次性支架输送器精度与法规验证难题
  • 算法——快速幂
  • 教程:用XiaothinkT6语言模型快速实现文本情感分类,附轻量模型推荐
  • 全链路自主构建智慧科研写作系统——融合LLM语义理解、多智能体任务协同与n8n自动化工作流构建
  • TDengine IDMP 运维指南(3. 使用 Ansible 部署)
  • 决策树算法全景解析:从 ID3、C4.5 到 CART
  • 响应式爬虫系统设计:Scala异步任务编排与弹性容错机制
  • 工业级蓝光三维扫描仪:助力汽车零部件高精度检测与质量提升
  • C++11 lambda表达式使用讲解
  • string 题目练习 过程分析 具体代码
  • leetcode_239 滑动窗口最大值
  • 本地部署消息中间件 Weblogic 并实现外部访问
  • 2025年9月计算机二级MySQL题库及wampserver2.2e下载安装教程
  • 解决linux中磁盘爆满(准确说是文件系统爆满)导致mysql启动失败的问题——对文件系统进行扩容
  • Chrome 插件开发实战技术文章大纲
  • 前端国际化(i18n)解决方案深度比较
  • C#项目集成海康SDK指南:从搭建环境到实现视频预览、录制、截屏
  • 从H.264到AV1:音视频技术演进与模块化SDK架构全解析
  • ComfyUI部署Wan2.2,开放API,文生视频与图生视频
  • 基于Python的宠物服务管理系统 Python+Django+Vue.js
  • 农村污水处理行业物联网解决方案
  • Vue3 el-table实现 将子表字段动态显示在主表行尾
  • GaussDB 中 alter default privileges 的使用示例
  • 鱼骨图图片制作全指南:使用工具推荐 + 行业案例
  • Python实战:SEO优化自动化工具开发指南
  • 大数据毕业设计选题推荐:护肤品店铺运营数据可视化分析系统详解
  • Android面试指南(三)
  • 在Excel和WPS表格中为多个数字同时加上相同的数值
  • 从接口自动化测试框架设计到开发(三)主流程封装、返回数据写入excel