热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

k8s快速入门教程8secretandconfigmap

上一篇:k8s快速入门教程-----7数据管理8.1secretSecret会以密文的方式存储数据,避免了直接在配置文件中保存敏感信息。Secret会以Volum

上一篇: k8s快速入门教程-----7 数据管理


8.1 secret

Secret会以密文的方式存储数据,避免了直接在配置文件中保存敏感信息。Secret 会以Volume的形式被mount 到Pod,容器可通过文件的方式使用Secret 中的敏感数据;此外,容器也可以环境变量的方式使用这些数据。Secret可通过命令行或YAML创建。比如希望Secret 中包含如下信息:用户名admin, 密码123456。以下2种效果是一样的。


8.1.1 创建secret


8.1.1.1 通过–from-env-file

创建密钥文件

cat <> env.txt
root_password&#61;21vianet
database&#61;wangjinxiong
databaseuser&#61;wangjinxiong
datapassword&#61;123456
EOF

直接执行以下命令&#xff0c;生成的secret数据value值会自动加密。

kubectl create secret generic mysecret0913 --from-env-file&#61;env.txt

查看k8S相关secret信息&#xff1a;

# kubectl get secret mysecret0913 -oyaml
apiVersion: v1
data:database: d2FuZ2ppbnhpb25ndatabaseuser: d2FuZ2ppbnhpb25ndatapassword: MTIzNDU2root_password: MjF2aWFuZXQ&#61;
kind: Secret
metadata:creationTimestamp: "2022-09-13T08:38:05Z"name: mysecret0913namespace: defaultresourceVersion: "129446914"selfLink: /api/v1/namespaces/default/secrets/mysecret0913uid: 5fc183df-740b-48f1-a77e-a3efadf7c32b
type: Opaque

绑定pod&#xff1a;

# cat mysql0913.yaml
kind: Pod
apiVersion: v1
metadata:name: mysql0913labels:app: mysql0913
spec:containers:- name: mysql0913image: mysqlports:- name: tcp-3306containerPort: 3306protocol: TCPenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysecret0913key: root_password- name: MYSQL_DATABASEvalueFrom:secretKeyRef:name: mysecret0913key: database- name: MYSQL_USERvalueFrom:secretKeyRef:name: mysecret0913key: databaseuser- name: MYSQL_PASSWORDvalueFrom:secretKeyRef:name: mysecret0913key: datapasswordimagePullPolicy: IfNotPresentrestartPolicy: Always

8.1.1.2 通过yaml创建

value如果需要加密&#xff0c;需要手动用base64操作&#xff1a;

# echo -n 21vianet | base64
MjF2aWFuZXQ&#61;
#echo -n wangjinxiong | base64
d2FuZ2ppbnhpb25n
# echo -n 123456 | base64
MTIzNDU2

直接创建secret后用kubectl apply -f secret0913.yaml

vi secret0913.yaml
apiVersion: v1
kind: Secret
metadata:name: mysecret0913namespace: default
data:database: d2FuZ2ppbnhpb25ndatabaseuser: d2FuZ2ppbnhpb25ndatapassword: MTIzNDU2root_password: MjF2aWFuZXQ&#61;kubectl apply -f secret0913.yaml

绑定pod:

# cat mysql0913.yaml
kind: Pod
apiVersion: v1
metadata:name: mysql0913labels:app: mysql0913
spec:containers:- name: mysql0913image: mysqlports:- name: tcp-3306containerPort: 3306protocol: TCPenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysecret0913key: root_password- name: MYSQL_DATABASEvalueFrom:secretKeyRef:name: mysecret0913key: database- name: MYSQL_USERvalueFrom:secretKeyRef:name: mysecret0913key: databaseuser- name: MYSQL_PASSWORDvalueFrom:secretKeyRef:name: mysecret0913key: datapasswordimagePullPolicy: IfNotPresentrestartPolicy: Always

8.1.2 在pod里面使用secret


8.1.2.1 环境变量方式

创建一个pod绑定secret。

kind: Pod
apiVersion: v1
metadata:name: mysql0913labels:app: mysql0913
spec:containers:- name: mysql0913image: mysqlports:- name: tcp-3306containerPort: 3306protocol: TCPenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysecret0913key: root_password- name: MYSQL_DATABASEvalueFrom:secretKeyRef:name: mysecret0913key: database- name: MYSQL_USERvalueFrom:secretKeyRef:name: mysecret0913key: databaseuser- name: MYSQL_PASSWORDvalueFrom:secretKeyRef:name: mysecret0913key: datapasswordimagePullPolicy: IfNotPresentrestartPolicy: Always

8.1.1.1 与8.1.1.2 2种方式均可以正常进入数据库&#xff1a;

# kubectl exec -it mysql0913 /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root&#64;mysql0913:/# mysql -uroot -p21vianet
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 MySQL Community Server - GPLCopyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the current input statement.mysql> show databases;
&#43;--------------------&#43;
| Database |
&#43;--------------------&#43;
| information_schema |
| mysql |
| performance_schema |
| sys |
| wangjinxiong |
&#43;--------------------&#43;
5 rows in set (0.03 sec)mysql> quit
Bye
root&#64;mysql0913:/# mysql -uwangjinxiong -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.27 MySQL Community Server - GPLCopyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the current input statement.mysql> show databases;
&#43;--------------------&#43;
| Database |
&#43;--------------------&#43;
| information_schema |
| wangjinxiong |
&#43;--------------------&#43;
2 rows in set (0.01 sec)mysql>

8.1.2.2 volume方式

创建一个pod以volume绑定secret

kind: Pod
apiVersion: v1
metadata:name: busybox0914labels:app: busybox0914
spec:volumes:- name: mysecret0913secret:secretName: mysecret0913containers:- name: busybox0914image: busyboximagePullPolicy: IfNotPresentargs:- /bin/sh- -c- sleep 10;touch /tmp/healthy;sleep 30000volumeMounts:- name: mysecret0913mountPath: "/etc/foo"readOnly: truerestartPolicy: Always

登录pod:

# kubectl exec -it busybox0914 sh
/ # cat /etc/foo/database
wangjinxiong
/ # cat /etc/foo/databaseuser
wangjinxiong
/ # cat /etc/foo/datapassword
123456
/ # cat /etc/foo/root_password
21vianet
/ #

8.2 configmap

Secret可以为Pod 提供密码、Token、私钥等敏感数据;对于一些非敏感数据&#xff0c;比如应用的配置信息&#xff0c;则可以用ConfigMap。ConfigMap的创建和使用方式与Secret非常类似&#xff0c;主要的不同是数据以明文的形式存放。ConfigMap 一般用于下面2种方式&#xff0c;一种是环境变量传递&#xff1b;一种是配置文件读写。


8.2.1 创建configmap

创建configmap文件

cat <> env.txt
root_password&#61;21vianet
database&#61;wangjinxiong
databaseuser&#61;wangjinxiong
datapassword&#61;123456
EOF

直接执行以下命令&#xff0c;生成configmap

kubectl create configmap myconfigmap0914 --from-env-file&#61;env.txt

查看configmap配置&#xff0c;发觉以明文存放&#xff1a;

# kubectl get configmap myconfigmap0914 -oyaml
apiVersion: v1
data:root_password: 21vianetdatabase: wangjinxiongdatabaseuser: wangjinxiongdatapassword: 123456
kind: ConfigMap
metadata:creationTimestamp: "2022-09-14T02:20:59Z"name: myconfigmap0914namespace: defaultresourceVersion: "129868649"selfLink: /api/v1/namespaces/default/configmaps/myconfigmap0914uid: 30ad8371-6267-4e06-8fab-bc7d86c840af

8.2.2 通过yaml创建

直接创建configmap后用kubectl apply -f myconfigmap0914.yaml

kind: ConfigMap
apiVersion: v1
metadata:name: myconfigmap1008
data:root_password: 21vianetdatabase: wangjinxiongdatabaseuser: wangjinxiongdatapassword: 123456

8.2.3 在pod里面使用configmap


8.2.3.1 环境变量方式

kind: Pod
apiVersion: v1
metadata:name: mysql0914labels:app: mysql0914
spec:volumes:- name: host-timehostPath:path: /etc/localtimetype: &#39;&#39;- name: myconfigmap0914configMap:name: myconfigmap0914containers:- name: mysql0914image: mysql:5.7ports:- name: tcp-3306containerPort: 3306protocol: TCPenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:configMapKeyRef:name: myconfigmap0914key: root_password- name: MYSQL_DATABASEvalueFrom:configMapKeyRef:name: myconfigmap0914key: database- name: MYSQL_USERvalueFrom:configMapKeyRef:name: myconfigmap0914key: databaseuser- name: MYSQL_PASSWORDvalueFrom:configMapKeyRef:name: myconfigmap0914key: datapasswordvolumeMounts:- name: host-timereadOnly: truemountPath: /etc/localtimeimagePullPolicy: IfNotPresentrestartPolicy: Always

8.2.3.2 volume方式

volume方式一般用于服务的配置文件挂载。
创建文件&#xff1a;

cat my.cnf
[mysqld]
pid-file &#61; /var/run/mysqld/mysqld.pid
socket &#61; /var/run/mysqld/mysqld.sock
datadir &#61; /var/lib/mysql
secure-file-priv&#61; NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links&#61;0# Custom config should go here
!includedir /etc/mysql/conf.d/default_authentication_plugin&#61; mysql_native_password

创建configmap:

kubectl create configmap mysql-config0914 --from-file&#61;my.cnf

创建deployment绑定configmap:

kind: Deployment
apiVersion: apps/v1
metadata:name: mysql0914labels:app: mysql0914
spec:replicas: 1selector:matchLabels:app: mysql0914template:metadata:labels:app: mysql0914spec:volumes:- name: host-timehostPath:path: /etc/localtimetype: &#39;&#39;- name: mysql-config0914configMap:name: mysql-config0914items:- key: my.cnfpath: my.cnfcontainers:- name: container0914image: &#39;mysql:8.0&#39;ports:- name: tcp-3306containerPort: 3306protocol: TCPenv:- name: MYSQL_ROOT_PASSWORDvalue: gtland2021volumeMounts:- name: host-timereadOnly: truemountPath: /etc/localtime- name: mysql-config0914subPath: my.cnfmountPath: /etc/mysql/my.cnfimagePullPolicy: IfNotPresent

推荐阅读
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • k8snamespace配置cpu最大和最小限额
    世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。问:如何为namespace配置最大和最小限额&#x ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 如何在Vue项目中安装和使用VUX组件?
    vux2模板fork自webpack模板,基本和官方同步。1、默认为webpack2模板npminstallvue-cli-g如果还没安装vueinitairyla ... [详细]
  • 云原生SRE
    序言年底了,没有分手的朋友的赶紧分了,所谓新年新气象,年年不重样。去留无意,望看风卷残云。。。运维不会消失,但 ... [详细]
author-avatar
陆碧钰-_752
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有