Secret,configmap的定义及使用,探针

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Secret,configmap的定义及使用,探针

目录

Secret,configmap的定义及使用

其实这两者是差不多的,只要搞懂了secret,那么configmap也是很好理解的。这两个是干什么的呢?有什么作用呢?

我们在创建有些容器的时候,比如mysql,你在创建的时候他就要求你给他配置密码,你如果直接在命令行或者yaml文件里面把密码给写上,密码就是明文的,别人可以随意看到,非常的不安全,secret就可以将你要传给容器的隐私内容做一个加密,没那么容易被别人知道,当然,我说的是没那么容易,也就是说是可以通过一些方法查看的

secret

secret的定义

secret的定义很容易,有3种方式

  1. 来自于文件 --from-file
    来自于文件的这种方式,你的文件名就是你的键,文件内的内容就是你的值,我们现在来编写一个文件test,内容是aaa
[root@master k8s]# cat test
aaa

然后我们通过这个文件来创建secret

[root@master k8s]# kubectl create secret generic test1 --from-file=./test
[root@master k8s]# kubectl get secret
NAME    TYPE     DATA   AGE
test1   Opaque   1      1m48s

我们可以看到,有一个叫做test1的secret了,然后我们来看看它里面的内容

[root@master k8s]# kubectl get secret/test1 -o yaml
apiVersion: v1
data:
test: YWFhCg==
kind: Secret
metadata:
  creationTimestamp: "2024-01-17T03:02:45Z"
  name: test1
  namespace: default
  resourceVersion: "273551"
  uid: 5d2bb0c1-61d2-42fb-983d-70a112a11f49
type: Opaque

我们可以看到,data那里有一个叫做test的键,但是值是YWFhCg==,他是被加密过的内容

2. 来自于键值对 --from-literal

这种方式相对来说简单一点,学习的时候比较常用一点

[root@master k8s]# kubectl create secret generic test2 --from-literal=test2=bbb
secret/test2 created
[root@master k8s]# kubectl get secret
NAME    TYPE     DATA   AGE
test1   Opaque   1      10m
test2   Opaque   1      8s

这样test2就被创建出来了,同样可以查看内容

[root@master k8s]# kubectl get secret/test2 -o yaml
apiVersion: v1
data:
  test2: YmJi
kind: Secret
metadata:
  creationTimestamp: "2024-01-17T03:12:44Z"
  name: test2
  namespace: default
  resourceVersion: "274751"
  uid: 38158752-697d-4d7a-9991-a5ce791ca503
type: Opaque
  1. 来自于env文件 --from-env-file
    这样的方式其实就是把键值对全都写到文件内,然后一次性创建出来
    我们先创建一个文件
[root@master k8s]# cat test2
test3=ccc

我们再来查看一下

[root@master k8s]# kubectl create secret generic test3 --from-env-file=./test2
[root@master k8s]# kubectl get secrets/test3 -o yaml
apiVersion: v1
data:
  test3: Y2Nj
kind: Secret
metadata:
  creationTimestamp: "2024-01-17T03:16:59Z"
  name: test3
  namespace: default
  resourceVersion: "275263"
  uid: 9337e8d4-8818-4a12-9db4-f88d0110b900
type: Opaque

secret的使用

刚刚我们已经学会了如何去定义secret,那么我们定义好了该如何去使用呢?

  1. 挂载使用
    这种方式多适用于配置文件,比如传入一个index.html文件进去这样的做法
    我们直接来看看yaml文件
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: web
name: web
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: web
resources: {}
# 容器挂载卷,挂载到容器内的/data
volumeMounts:
- name: secret
mountPath: /data
dnsPolicy: ClusterFirst
restartPolicy: Always
# 定义一个卷,卷名叫做secret
volumes:
- name: secret
secret:
secretName: test3
status: {}

我们进入容器查看/data目录

[root@master k8s]# kubectl exec -it pods/web -- bash
root@web:/# cat /data/test3 
cccroot@web:/#

进入容器的/data目录之后,我们看见目录下有个test3,并且文件内容是ccc,跟我们之前定义的一样,没有问题,这种就是通过卷挂载的方式

2. 当作环境变量使用

我们也可以直接把secret当作环境变量传递给容器,这样我们在启动mysql容器的时候就不用明文显示密码了

先创建一个secret

[root@master k8s]# kubectl create secret generic pass1 --from-literal=MYSQL_ROOT_PASSWORD=123
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: db1
name: db1
spec:
containers:
- image: mysql
name: db1
resources: {}
# 定义容器的环境变量
env:
# 变量名是MYSQL_ROOT_PASSWORD
- name: MYSQL_ROOT_PASSWORD
# 值来自于secret
valueFrom:
secretKeyRef:
key: MYSQL_ROOT_PASSWORD
name: pass1
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}

我们来使用这个yaml文件来创建pod,看看能否直接创建成功

[root@master k8s]# kubectl apply -f secret_mysql.yaml 
pod/db1 created
[root@master k8s]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
db1    1/1     Running   0          62s

我们可以看到,他就直接变成running了,我们来尝试登录一下这个mysql

# 先查看ip
[root@master k8s]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
db1    1/1     Running   0          65s   10.244.104.46    node2   <none>           <none>
# 登录mysql
[root@master k8s]# mysql -uroot -p123 -h10.244.104.46
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.2.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

configmap与secret的区别是,secret你去查看的时候他是加密过的,而configmap是明文的,比如aaa=111 configmap里面他就直接这样显示,其他的内容都与secret差别不大,包括定义啊,使用啊,只需要将secret的地方修改成configmap就可以了

本文来自博客园,作者:FuShudi,转载请注明原文链接:https://www.cnblogs.com/fsdstudy/p/17969725

分类: CKA

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
存储 Kubernetes Linux
Kubernetes 的配置资源 ConfigMap(01部分)
Kubernetes 的配置资源 ConfigMap(01部分)
|
3月前
|
存储 Kubernetes 安全
在k8S中,Kubernetes Secret 作用是什么?
在k8S中,Kubernetes Secret 作用是什么?
|
6月前
|
存储 Kubernetes 数据安全/隐私保护
Kubernetes的ConfigMap和Secret
Kubernetes的ConfigMap和Secret
121 0
|
存储 Kubernetes 数据安全/隐私保护
k8s--配置存储 ConfigMap、Secret
k8s--配置存储 ConfigMap、Secret
|
存储 JSON Kubernetes
kubernetes为何需要默认的serviceaccount?
在 Kubernetes 中,ServiceAccount 是一种用于身份验证和授权的对象。它为 Pod 提供了一种身份,以便它们可以与 Kubernetes API 交互,并且可以通过 Role 和 RoleBinding 为它们分配特定的权限。
408 0
|
11月前
|
存储 Kubernetes 数据安全/隐私保护
ConfigMap 补充 和 Secret
ConfigMap 补充 和 Secret
|
Kubernetes 数据安全/隐私保护 Perl
ConfigMap、Secret
ConfigMap、Secret
77 1
|
Kubernetes 应用服务中间件 调度
Kubernetes 中几种常见的调度方式以及对应的 YAML 示例
在 Kubernetes 中,使用 YAML 文件来定义和配置 Pod。以下是几种常见的调度方式以及对应的 YAML 示例: 1. 基于资源需求与节点容量的调度: ```yaml apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx resources: requests: cpu: "0.5" memory: "512Mi" limits: cpu
127 0
|
存储 Kubernetes 网络协议
kubernetes ConfigMap 文件映射详解
kubernetes ConfigMap 文件映射详解
kubernetes ConfigMap 文件映射详解
|
Kubernetes Docker 容器
kubernetes 【组件】configmap配置更新
kubernetes 【组件】configmap配置更新