🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质: CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥🎈支持我:可点赞👍、可收藏⭐️、可留言📝
📜管理加密信息
📑secret特性
Secret对象类型提供了一种机制来保存敏感信息,如密码、OCP客户端配置文件、Docker配置文件和私有仓库凭据。Secrets将敏感内容与Pod解耦。可以使用Volume插件将Secrets挂载到容器上,或者系统可以使用Secrets代表pod执行操作。
Secrets的主要特征包括:
- Secrets data可以独立于其定义引用。
- Secrets data Volume由临时文件存储支持。
- 可以在名称空间中共享Secrets data。
📑创建Secrets
在依赖于该Secrets的pod之前创建一个Secrets。
[user@demo ~]$ oc create secret generic secret_name \
--from-literal=key1=secret1 \
--from-literal=key2=secret2 #用secret data创建secret对象
[user@demo ~]$ oc secrets add --for=mount serviceaccount/serviceaccount-name \
secret/secret_name #更新pod的服务帐户,允许引用该secrets。
例如,允许一个运行在指定服务帐户下的pod挂载一个secrets
创建一个pod,该pod使用环境变量或数据卷作为文件的方式使用该secret,通常使用模板完成。
📑使用secret暴露Pod
secrets可以作为数据卷挂载,也可以作为环境变量以便供pod中的容器使用。
例如,要向pod公开一个secrets,首先创建一个secrets并将username和password以k/v形式配置,然后将键名分配给pod的YAML文件env定义。
示例:创建名为demo-secret的secrets,它定义用户名和密码为username/demo-user。
[user@demo ~]$ oc create secret generic demo-secret \
--from-literal=username=demo-user
要使用前面的secret作为MySQL数据库pod的数据库管理员密码,请定义环境变量,并引用secret名称和密码。
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: username
name: demo-secret
📑web端管理secret
从web控制台管理secret:
- 以授权用户身份登录到web控制台。
- 创建或选择一个项目来承载secret。
- 导航到resource——>secrets。
📑Secret使用场景
- password和user names
敏感信息(如password和user name)可以存储在一个secret中,该secret被挂载为容器中的数据卷。数据显示为位于容器的数据卷目录中的文件中的内容。然后,应用程序(如数据库)可以使用这些secret对用户进行身份验证。
- 传输层安全性(TLS)和密钥对
通过让集群将签名证书和密钥对生成到项目名称空间中的secret中,可以实现对服务的通信的保护。证书和密钥对使用PEM格式存储以类似tls.crt和tls.key的格式存储在secret的pod中。
📜ConfigMap对象
📑ConfigMap概述
ConfigMaps对象类似于secret,但其设计目的是支持处理不包含敏感信息的字符串。ConfigMap对象持有配置数据的键值对,这些配置数据可以在pods中使用,或者用于存储系统组件(如控制器)的配置数据。
ConfigMap对象提供了将配置数据注入容器的机制。ConfigMap存储精细的粒度信息,比如单个属性,或者详细信息,比如整个配置文件或JSON 集合。
📑CLI创建ConfigMap
可以使用--from-literal选项从CLI创建ConfigMap对象。
示例:创建一个ConfigMap对象,该对象将IP地址172.20.30.40分配给名为serverAddress的ConfigMap密钥。
[user@demo ~]$ oc create configmap special-config \
--from-literal=serverAddress=172.20.30.40
[user@demo ~]$ oc get configmaps special-config -o yaml #查看configMap
apiVersion: v1
data:
key1: serverAddress=172.20.30.40
kind: ConfigMap
metadata:
creationTimestamp: 2017-07-10T17:13:31Z
name: special-config
……
在配置映射的pod定义中填充环境变量APISERVER。
env:
- name: APISERVER
valueFrom:
configMapKeyRef:
name: special-config
key: serverAddress
📑web管理ConfigMap
从web控制台管理ConfigMap对象:
- 以授权用户身份登录到web控制台。
- 创建或选择一个项目来承载ConfigMap。
- 导航到资源→配置映射。
📜课本练习
📑环境准备
[student@workstation ~]$ lab install-prepare setup
[student@workstation ~]$ cd /home/student/do280-ansible
[student@workstation do280-ansible]$ ./install.sh
提示:若已经拥有一个完整环境,可不执行。
📑本练习准备
[student@workstation ~]$ lab secure-secrets setup
📑创建项目
[student@workstation ~]$ oc login -u developer -p redhat https://master.lab.example.com
[student@workstation ~]$ oc new-project secure-secrets
[student@workstation ~]$ cd /home/student/DO280/labs/secure-secrets/
[student@workstation secure-secrets]$ cat mysql-ephemeral.yml
…………
spec:
containers:
- capabilities: {}
env:
- name: MYSQL_USER
valueFrom:
secretKeyRef:
key: database-user
name: ${DATABASE_SERVICE_NAME}
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
key: database-password
name: ${DATABASE_SERVICE_NAME}
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: database-root-password
name: ${DATABASE_SERVICE_NAME}
- name: MYSQL_DATABASE
value: ${MYSQL_DATABASE}
…………
- description: The name of the OpenShift Service exposed for the database.
displayName: Database Service Name
name: DATABASE_SERVICE_NAME
required: true
value: mysql
…………
模板解读:
该mysql-ephemeral.yml模板文件,包含openshift项目中的mysql临时模板,pod所需的其他环境变量由模板参数初始化,并具有默认值。
但没有secret定义,后续操作将手动创建模板所需的secret。
根据模板的要求,创建一个包含MySQL容器image使用的凭证的secret,将这个secret命名为mysql。
- 应用程序访问的数据库用户名由database-user定义。
- 数据库用户的密码由database-password定义。
- 数据库管理员密码由database-root-password定义
📑创建secret
[student@workstation secure-secrets]$ oc create secret generic mysql \
--from-literal='database-user'='mysql' \
--from-literal='database-password'='redhat' \
--from-literal='database-root-password'='do280-admin'
secret "mysql" created
[student@workstation secure-secrets]$ oc get secret mysql -o yaml #确认secret
apiVersion: v1
data:
database-password: cmVkaGF0
database-root-password: ZG8yODAtYWRtaW4=
database-user: bXlzcWw=
kind: Secret
metadata:
creationTimestamp: 2021-03-03T03:40:47Z
name: mysql
namespace: secure-secrets
resourceVersion: "218611"
selfLink: /api/v1/namespaces/secure-secrets/secrets/mysql
uid: 3df1014e-7bd2-11eb-9656-52540000fa0a
type: Opaque
📑创建应用
[student@workstation secure-secrets]$ oc new-app --file=mysql-ephemeral.yml
[student@workstation secure-secrets]$ oc get pods
NAME READY STATUS RESTARTS AGE
mysql-1-deploy 1/1 Running 0 11s
mysql-1-r5rgn 0/1 ContainerCreating 0 8s
[student@workstation secure-secrets]$ oc get pods
NAME READY STATUS RESTARTS AGE
mysql-1-r5rgn 1/1 Running 0 12s
📑端口转发
[student@workstation secure-secrets]$ cd
[student@workstation ~]$ oc port-forward mysql-1-r5rgn 3306:3306
Forwarding from 127.0.0.1:3306 -> 3306
提示:验证完成之前forward不要关闭。
📑确认验证
[student@workstation ~]$ mysql -uroot -pdo280-admin -h127.0.0.1 #新开终端测试MySQL
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.7.16 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sampledb |
| sys |
+--------------------+
5 rows in set (0.00 sec)
MySQL [(none)]>
📑清除实验
[student@workstation ~]$ oc delete project secure-secrets
💡总结
RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。
以上就是【金鱼哥】对 第五章 DO280OpenShift访问控制--加密和ConfigMap 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。
💾 红帽认证专栏系列:
RHCSA专栏: 戏说 RHCSA 认证
RHCE专栏: 戏说 RHCE 认证
此文章收录在RHCA专栏: RHCA 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!