一、secret

1、什么是secret?

  • 这个类型主要就是存储密码或者一些隐私一些内容

  • 主要就是保存这些东西的

  • 值都是base64加密的

  • 都是基于命名空间的

2、创建secret方式

1、命令行创建

[root@k-master 8-2]# kubectl create secret --help
Create a secret using specified subcommand. Available Commands:
docker-registry Create a secret for use with a Docker registry
generic Create a secret from a local file, directory, or literal value # 常用的
tls Create a TLS secret Usage:
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). [root@k-master 8-2]# kubectl create secret generic --help # 这些有的是案例的
[root@k-master 8-2]# kubectl create secret generic --help | grep from
kubectl create secret generic my-secret --from-file=path/to/bar
kubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-file=ssh-publickey=path/to/id_rsa.pub
kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret
kubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-literal=passphrase=topsecret
# Create a new secret named my-secret from env files
kubectl create secret generic my-secret --from-env-file=path/to/foo.env --from-env-file=path/to/bar.env
--from-env-file=[]: # 通过环境变量创建
--from-file=[]: # 通过文件创建
--from-literal=[]: # 键值对的方式
kubectl create secret generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none] [options] [root@k-master 8-2]# kubectl create secret generic mysec1 --from-literal=name1=aaa1 --from-literal=name2=bbb2
secret/mysec1 created # 上面创建了2个数据
[root@k-master 8-2]# kubectl get secrets
NAME TYPE DATA AGE
mysec1 Opaque 2 3s
[root@k-master 8-2]# kubectl describe secrets mysec1
Name: mysec1
Namespace: default
Labels: <none>
Annotations: <none> Type: Opaque # 基于base64密钥进行解密和加密 Data
====
name2: 4 bytes # 值默认是加密的
name1: 4 bytes
  • 显示加密后的密钥
[root@k-master 8-2]# kubectl get secrets mysec1 -o yaml
apiVersion: v1
data:
name1: YWFhMQ==
name2: YmJiMg==
kind: Secret
metadata:
creationTimestamp: "2025-08-02T07:00:20Z"
name: mysec1
namespace: default
resourceVersion: "150234"
uid: b89398bb-a512-41bf-9032-31d6e15e2fa0
type: Opaque # 使用base64进行解密
[root@k-master 8-2]# echo -n YWFhMQ== | base64 -d
aaa1[root@k-master 8-2]#

2、文件方式

  • 将内容保存到文件中去

  • 文件名相当于是键,内容是值

[root@k-master 8-2]# echo redhat > name3
[root@k-master 8-2]# ls
name3
[root@k-master 8-2]# cat name3
redhat
[root@k-master 8-2]# kubectl create secret generic mysec2 --from-file=name3

3、环境变量方式

cat 1.txt
name1=aaa1 [root@k-master 8-2]# kubectl create secret generic mysec3 --from-env-file=1.txt
secret/mysec3 created

4、通过yaml文件生成

# 通过查看命令帮助
[root@k-master ~]# kubectl explain secret --recursive | less [root@k-master 8-2]# cat secret1.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysec4
data:
name1: cXFxCg==

3、使用secret方式

1、卷使用secret

  • 将这个secret挂载到容器里面去即可

  • 以卷的方式来挂载这个secret和confgimap的话,适用场景就是一些服务的配置文件

  • 在pod里面存在的方式,文件名就是键

[root@k-master 8-2]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
volumeMounts: # 挂载到这个/mnt目录下
- name: v1
mountPath: /mnt
volumes: # 使用secret作为卷
- name: v1
secret:
secretName: mysec1 # 将这个密钥写到这个文件里面去了
# 文件名就是这个键,内容就是值 # 在pod里面的存在的方式文件名就是键
[root@k-master 8-2]# kubectl exec -ti pod1 -- ls /mnt
name1 name2
# nginx的页面来使用卷挂载网站页面

2、变量方式使用secret

  • mysql运行时,需要环境变量,因此上面的文件不方便
[root@k-master 8-2]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
env:
- name: env1 # 环境变量名
valueFrom: # 这个值来自于这个secret
secretKeyRef:
name: mysec1
key: name1 # 使用的键是这个name1,env1的值使用就是name1对应的值 # 进入容器使用环境变量
[root@k-master 8-2]# kubectl exec -ti pod1 -- /bin/bash
root@pod1:/# echo $env1
aaa1
  • 创建一个mysql容器
[root@k-master 8-2]# cat mysql.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: mysql1
name: mysql1
spec:
containers:
- image: mysql
imagePullPolicy: IfNotPresent
name: mysql1
ports:
- containerPort: 3306
env:
- name: MYSQLROOT_PASSWORD # 环境变量键
valueFrom:
secretKeyRef:
name: mysec1
key: name1 # 使用的值就是name1键对应的值
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
  • 远程登录mysql,密码是aaa1
[root@k-master 8-2]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql1 1/1 Running 0 84s 10.244.82.180 k-node1 <none> <none>
pod1 1/1 Running 0 16m 10.244.82.172 k-node1 <none> <none> # 语法,-u 可以要空格可以不需要空格
# 但是呢,这个密码的话不能有空格 [root@k-master 8-2]# mysql -uroot -paaa1 -h 10.244.82.180
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.4.0 MySQL Community Server - GPL Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>

二、configmap

1、什么是configmap

  • 主要就是保存配置文件用的

  • 明文的方式保存

  • 跟上面secret的操作一模一样

2、创建configmap方式

1、命令行创建

# 查看命令行帮助
[root@k-master 8-2]# kubectl create configmap --help | grep -i from
kubectl create configmap my-config --from-file=path/to/bar
kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
# Create a new config map named my-config from the key=value pairs in the file
kubectl create configmap my-config --from-file=path/to/bar
# Create a new config map named my-config from an env file
kubectl create configmap my-config --from-env-file=path/to/foo.env --from-env-file=path/to/bar.env
--from-env-file=[]:
--from-file=[]:
--from-literal=[]:
kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none] [options] [root@k-master 8-2]# kubectl create configmap cm1 --from-literal=name1=qqq
configmap/cm1 created
[root@k-master 8-2]# kubc^C
[root@k-master 8-2]# kubectl get cm
NAME DATA AGE
cm1 1 4s
kube-root-ca.crt 1 13d
[root@k-master 8-2]# kubectl describe cm cm1
Name: cm1
Namespace: default
Labels: <none>
Annotations: <none> Data
====
name1: # 键
----
qqq # 文件的内容 BinaryData
==== Events: <none>

2、文件创建

  • 文件名相当于是键,值是文件里面的内容
[root@k-master 8-2]# kubectl create configmap cm2  --from-file=name4
configmap/cm2 created
[root@k-master 8-2]# kubectl describe cm cm2
Name: cm2
Namespace: default
Labels: <none>
Annotations: <none> Data
====
name4: # 键
----
qqq # 文件的内容 BinaryData
==== Events: <none>

3、环境变量和yaml创建

[root@k-master 8-2]# kubectl create configmap cm3 --from-env-file=2.txt
configmap/cm3 created
[root@k-master 8-2]# kubectl get cmck^C
[root@k-master 8-2]# kubectl describe cm cm3
Name: cm3
Namespace: default
Labels: <none>
Annotations: <none> Data
====
name1:
----
qqq BinaryData
==== Events: <none>
[root@k-master 8-2]# kubectl apply -f cm4.yaml
configmap/cm4 created
[root@k-master 8-2]# kubectl describe configmaps cm4
Name: cm4
Namespace: default
Labels: <none>
Annotations: <none> Data
====
name1:
----
qqq BinaryData
==== Events: <none>

3、使用configmap方式

1、通过卷的方式使用

[root@k-master 8-2]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod2
name: pod2
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod2
volumeMounts:
- name: c1
mountPath: /mnt
resources: {}
volumes:
- name: c1
configMap:
name: cm4
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {} # 卷挂载的话,以键是文件的存在形式存在的
[root@k-master 8-2]# kubectl exec -ti pod2 -- cat /mnt/name1
qqq[root@k-master 8-2]#

2、通过变量的方式使用

[root@k-master 8-2]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod2
name: pod2
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod2
resources: {}
env:
- name: env1 # 环境变量键
valueFrom:
configMapKeyRef: # 使用的值是configmap
name: cm4
key: name1 # 值是name1对应的值
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {} [root@k-master 8-2]# kubectl exec -ti pod2 -- /bin/bash
root@pod2:/# echo $env1
qqq
root@pod2:/#

secret和configmap的更多相关文章

  1. secret或configmap对象key名称带点,env命令不显示分析

    分享一个最近在排查的问题: k8s的 secret 或 configmap 对象,如果 key 名称是带[.]的,比如[a.b.c .db.host]这种名称,注入到POD后,使用env等命令查看不到 ...

  2. k8s_使用k8s部署博客系统svc、secret、configmap(三)

    service service是抽象Pod对外提供服务的地址,将其固化的作用:屏蔽因pod的创删以及扩缩容带来ip变化.service通过自身定义文件的selector的标签配置匹配到需要提供服务的对 ...

  3. Kubernetes中的Configmap和Secret

    本文的试验环境为CentOS 7.3,Kubernetes集群为1.11.2,安装步骤参见kubeadm安装kubernetes V1.11.1 集群 应用场景:镜像往往是一个应用的基础,还有很多需要 ...

  4. ASP.NET Core on K8S深入学习(9)Secret & Configmap

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.Secret 1.1 关于Secret 在应用启动过程中需要一些敏感信息, ...

  5. Kubernetes 学习13 kubernetes pv pvc configmap 和secret

    一.概述 1.我们在pvc申请的时候未必就有现成的pv能正好符合这个pvc在申请中指定的条件,毕竟上一次的成功是我们有意设定了有一些满足有一些不满足的前提下我们成功创建了一个pvc并且被pod绑定所使 ...

  6. kubernetes Configmap secret的使用

    kubernetes configmap 核心作用是让配置信息和镜像解耦,pod可以使用configmap的数据生成配置文件.如果后端的pod配置文件要改变时,只需要更改下configmap里面的数据 ...

  7. Kubernetes学习笔记(六):使用ConfigMap和Secret配置应用程序

    概述 本文的核心是:如何处理应用程序的数据配置. 配置应用程序可以使用以下几种途径: 向容器传递命令行参数 为每个容器配置环境变量 通过特殊的卷将配置文件挂载到容器中 向容器传递命令行参数 在Kube ...

  8. 容器编排系统K8s之ConfigMap、Secret资源

    前文我们了解了k8s上的pv/pvc/sc资源的使用和相关说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14188621.html:今天我们主要来聊一下 ...

  9. Kubernetes 实战——配置应用(ConfigMap、Secret)

    配置容器化应用的方式:①命令行参数:②环境变量:③文件化配置 一.向容器传递命令行参数或环境变量 这两种方式在 Pod 创建后不可被修改 1. 在Docker中定义命令与参数 ENTRYPOINT:容 ...

  10. k8s配置中心-configmap,Secret密码

    目录 k8s配置中心-configmap,Secret 创建ConfigMap 使用ConfigMap subPath参数 Secret 官方文档 编写secret清单 使用secret 在 Pod ...

随机推荐

  1. TVM VLOG打印

    TVM 提供了详细日志记录功能,允许提交跟踪级别的调试消息,而不会影响生产中 TVM 的二进制大小或运行时.你可以在你的代码中使用 VLOG 如下: void Foo(const std::strin ...

  2. 6 指纹浏览器 CPU 核心数伪装教程

    目的 navigator.hardwareConcurrency 可用于获取当前设备的 CPU 逻辑核心数量.这一信息常被用于识别用户设备等级或作为浏览器指纹的一部分参与反欺诈系统分析. 通过伪造该信 ...

  3. Kafka King 推荐一款漂亮、现代、实用的kafka客户端

    Kafka King 一个漂亮.现代.实用的kafka客户端,使用python flet.flutter构建. Github主页:https://github.com/Bronya0/Kafka-Ki ...

  4. Spring Boot 整合Jedis连接Redis和简单使用

    摘要:首先介绍如何在Windows系统安装Redis环境,然后在Spring Boot 项目中集成 Redis,最后简单地做了一个使用Jedis操作redis连接池的测试用例. §准备Redis环境 ...

  5. Spring AOP 面向切面编程之AOP是什么

    前言   软件工程有一个基本原则叫做"关注点分离"(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的问题.这年头互联网也 ...

  6. JXOI2021游记

    JXOI2021游记 day0 虽然说退役的概率比较大,但是我不想.唉,这也不是说不想就可以避免的事情呐-- 总之我希望我稳一点就好-- day1 考场上 依照教练说的,先把三道题都看完再动笔. 看T ...

  7. vLLM部署实战重难点

    Kubernetes + 容器化部署 vLLM官方docker镜像: vllm/vllm-openai 这是官方提供的 Docker 镜像,可以用来快速部署 vLLM 服务,便于容器化管理. 实战: ...

  8. java中的mysql事务

    mysql事务 如何进入事务处理? 开启事务 start transaction; 执行语句 增加.修改.删除 等业务处理的sql语句... 回滚事务 rollback; 相当于sql语句都没有执行 ...

  9. gRPC 学习了解记录

    背景 项目中需要用到gRPC,所以需要去了解它的使用.去官网看它的介绍以及run Quick start run quickStart 遇到问题 根据官网的介绍,run Quick start 的时候 ...

  10. 如何用 FastAPI 和 RBAC 打造坚不可摧的安全堡垒?

    扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ 一.FastAPI 安全认证与 ...