热门标签 | 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

推荐阅读
  • 前言: 网上搭建k8s的文章很多,但很多都无法按其说明在阿里云ecs服务器成功搭建,所以我就花了些时间基于自己成功搭建k8s的步骤写了个操作手册,希望对想搭建k8s环境的盆友有所帮 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在JUnit测试框架中,确保@Test注解的方法按特定顺序执行是常见的需求。本文总结了三种实现这一目标的策略。首先,介绍了通过方法名称排序来控制执行顺序的基本方法。其次,推荐了一种利用依赖管理插件的方式,这种方法更为灵活且易于维护。最后,探讨了使用第三方库如TestNG或Jupiter扩展来实现更复杂的顺序控制。每种方法都有其适用场景和优缺点,开发者可以根据具体需求选择最合适的方案。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
  • C#微信开发入门教程第二篇:新手快速上手指南,含详细视频讲解
    在距离上次课程一个多星期后,我们终于带来了第二讲的内容。虽然原计划是一周一次更新,但由于工作繁忙有所延迟。近期在交流群中发现,一些初学者已经能够熟练调用微信接口,但对微信公众平台的消息接收处理机制还不够了解。因此,本次课程将详细介绍如何高效处理微信公众平台的消息接收,并提供详细的视频讲解,帮助大家快速上手。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 深入解析Spring Boot自动配置机制及其核心原理
    Spring Boot 的自动配置机制是其核心特性之一,旨在简化开发过程并提高效率。本文将深入探讨这一机制的工作原理,解释其如何通过智能化的类路径扫描和条件注解实现自动装配。通过对 Spring Boot 自动配置的详细解析,读者将能够更好地理解和应用这一强大功能,从而在实际项目中更加高效地利用 Spring Boot。 ... [详细]
  • Envoy 流量分配策略优化
    在本研究中,我们对Envoy的流量分配策略进行了优化,旨在提高系统的稳定性和性能。实验环境包括一个前端代理服务(Envoy,IP地址为172.31.57.10)和五个后端服务。通过调整Envoy的配置,实现了更高效的流量分发和负载均衡,显著提升了整体系统的响应速度和可靠性。 ... [详细]
  • kubernetes 下实现socket.io 的集群模式
    2019独角兽企业重金招聘Python工程师标准socket.io单节点模式是很容易部署的,但是往往在生产环境一个节点不能满足业务需求,况且还要保 ... [详细]
  • 本文整理了Java中org.codehaus.enunciate.config.EnunciateConfiguration.getDefaultRestSubcontext() ... [详细]
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社区 版权所有