secret

  • 一、secret相关简介
    • 二、secret资源的使用
      • 三、Secret实践k8s连接Harbor
        • 四、ConfigMap相关介绍
          • 五、ConfigMap资源的使用

一、secret相关简介

1.Secret资源的作用
用来保存一些敏感信息,比如MySQL服务的账号和密码,或者一些秘钥、证书等。
2.使用示例

用户名: root密码:123.com

将上述信息保存为secret资源有以下几种方法可供使用。
(1)- -from-literal

[root@master ~]# kubectl create secret generic secret1 --from-literal=username=root --from-literal=password=123.com
[root@master ~]# kubectl get secrets

注意

generic是一种算法;一个--from-literal语句只能保存一条信息;

使用Describe命令查看其详细信息,可以看到对应的key值,却看不到详细values值。因为创建的时候,我们给这个数据做了一个加密动作。

[root@master ~]# kubectl describe secrets secret1
Name: secret1
Namespace: default
Labels: <none>
Annotations: <none>Type: OpaqueData
====
password: 7 bytes
username: 4 bytes

(2)- -from-file

[root@master secret]# echo root > username
[root@master secret]# echo 123.com > password
[root@master secret]# kubectl create secret generic secret2 --from-file=username --from-file=password
[root@master secret]# kubectl get secrets

注意

--from-file的方式中的每个文件中也是只能够保存一条信息

(3)- -from-env-file

[root@master secret]# vim env.txt
username=root
password=123.com
[root@master secret]# kubectl create secret generic secret3 --from-env-file=env.txt

注意

这种保存数据的方式比第二种要方便的多。不过文件中每一行只能记录一条数据(key=value);

(4)通过yaml文件创建
在创建yaml文件的时候,为了避免能直接看到我们保存的数据,所以我们通常会为保存的数据进行加密。

[root@master secret]# echo root | base64
cm9vdAo=
[root@master secret]# echo 123.com | base64
MTIzLmNvbQo=
[root@master secret]# vim secret4.yaml
apiVersion: v1
kind: Secret
metadata:name: secret4
data:username: cm9vdAo=password: MTIzLmNvbQo=
[root@master secret]# kubectl apply -f secret4.yaml

注意:即使在保存数据前对要保存的数据做了加密处理,但base64这种方法也不是绝对的安全。比如上边我们用base64这种方法得到的乱码字符串,就可以使用–decode解码。

[root@master secret]# echo -n cm9vdAo= | base64 --decode
root

二、secret资源的使用

1.通过volume的方式
示例:创建一个Pod资源,用volume的方式使用之前创建的secret1。

[root@master secret]# vim mypod.yaml
kind: Pod
apiVersion: v1
metadata:name: mypod
spec:containers:- name: mypodimage: busyboxargs:- /bin/sh- -c- sleep 30000volumeMounts:- name: test-volumemountPath: "/etc/volume"readOnly: truevolumes:- name: test-volumesecret:secretName: secret1

通过yalm文件运行此Pod资源,然后进入Pod对应的挂载目录验证是否有secret资源保存的数据。

[root@master secret]# kubectl apply -f mypod.yaml
[root@master secret]# kubectl get pod
[root@master secret]# kubectl exec mypod cat /etc/volume/username
root
[root@master secret]# kubectl exec mypod cat /etc/volume/password
123.com

注意:以volume的挂载方式去使用secret资源,它会随着secret资源对象数据的改变而改变。所以通常用volume挂载的时候,为了保证secret资源的安全,在挂载的使用都是只读挂载(readOnly)。
我们也可以自定义存放数据的文件名。比如上述Pod资源可以更改为

[root@master secret]# vim mypod.yaml
kind: Pod
apiVersion: v1
metadata:name: mypod
spec:containers:- name: mypodimage: busyboxargs:- /bin/sh- -c- sleep 30000volumeMounts:- name: test-volumemountPath: "/etc/volume"readOnly: truevolumes:- name: test-volumesecret:secretName: secret1items:- key: usernamepath: mygroup/my-username- key: passwordpath: mygroup/my-passwd
[root@master secret]# kubectl apply -f mypod.yaml

在对应的位置仍然可以查看到我们更改过后的数据,数据会实时同步更新。

[root@master secret]# kubectl exec -it mypod sh
/etc/volume # ls mygroup/
my-passwd my-username
/etc/volume # pwd
/etc/volume

2.用环境变量的方式
同样我们更改一下上述的Pod,将它引用secret资源对象的方式更改为环境变量的方式。

[root@master secret]# vim mypod.yaml
kind: Pod
apiVersion: v1
metadata:name: mypod
spec:containers:- name: mypodimage: busyboxargs:- /bin/sh- -c- sleep 30000env:- name: SECRET_USERNAMEvalueFrom:secretKeyRef:name: secret1key: username- name: SECRET_PASSWORDvalueFrom:secretKeyRef:name: secret1key: password

运行此yaml文件并进入Pod去验证一下变量的值是否正确。

[root@master secret]# kubectl apply -f mypod.yaml
[root@master secret]# kubectl get pod
[root@master secret]# kubectl exec -it mypod sh
/ # echo $SECRET_USERNAME -n
root
/ # echo $SECRET_PASSWORD -n
123.com

注意:用环境变量的方式也可以正确引用secret资源,但是它并不会像Volume的方式一样,它引用数据不会进行动态的更新。
资源在创建的过程中可以直接使用命令的方式,也可以使用yaml文件的方式。虽然yaml文件的方式创建相对比较麻烦,但是它会将我们在创建对应资源的时候的基本状态做一个保存。
我们可以先使用命令的方式创建出来对应的资源,然后将此资源另存为一个yaml文件。比如我们之前创建的secret2

[root@master secret]# kubectl get secrets secret2 -o yaml > secret2.yaml
[root@master secret]# cat secret2.yaml
apiVersion: v1
data:password: MTIzLmNvbQo=username: cm9vdAo=
kind: Secret
metadata:creationTimestamp: "2020-04-27T06:39:47Z"name: secret2namespace: defaultresourceVersion: "12904"selfLink: /api/v1/namespaces/default/secrets/secret2uid: 23b294ab-0ef8-411f-825b-b3c69f14115e
type: Opaque

三、Secret实践k8s连接Harbor

假设此时有一个deployment需要用到私有镜像,已知Harbor地址为:192.168.229.214,首先应该确认各节点都修改了/usr/lib/systemd/system/docker.service文件,或者在/etc/docker/daemon.json文件中添加过私有仓库地址。因为登录Harbor需要用户名和密码,所以我们可以先创建一个Secret文件,将Harbor的信息保存到k8s集群中。
1.先登录harbor仓库

[root@master ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.229.214
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
[root@node1 ~]# vim /usr/lib/systemd/system/docker.service
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart docker.service
[root@node2 ~]# vim /usr/lib/systemd/system/docker.service
[root@node2 ~]# systemctl daemon-reload
[root@node2 ~]# systemctl restart docker
[root@harbor harbor]# docker-compose restart
Restarting nginx              ... done
Restarting harbor-portal      ... done
Restarting harbor-jobservice  ... done
Restarting harbor-core        ... done
Restarting harbor-adminserver ... done
Restarting registryctl        ... done
Restarting registry           ... done
Restarting harbor-db          ... done
Restarting redis              ... done
Restarting harbor-log         ... done
[root@master ~]# docker login -u admin -p Harbor12345 192.168.229.214
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded

2.查看秘钥登录数据

[root@master ~]# cat .docker/config.json
{"auths": {"192.168.229.214": {"auth": "YWRtaW46SGFyYm9yMTIzNDU="}},"HttpHeaders": {"User-Agent": "Docker-Client/18.09.0 (linux)"}
}

3.进行加密

[root@master ~]# cat .docker/config.json | base64
ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjIyOS4yMTQiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2U0dGeVltOXlNVEl6TkRVPSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDkuMCAobGludXgpIgoJfQp9

4.创建secret资源

[root@master ~]# mkdir secret
[root@master ~]# cd secret/
[root@master secret]# vim secret.yaml
apiVersion: v1
kind: Secret
metadata:name: harbor-secret
type: kubernetes.io/dockerconfigjson
data:.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjIyOS4yMTQiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2U0dGeVltOXlNVEl6TkRVPSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDkuMCAobGludXgpIgoJfQp9
[root@master secret]# kubectl apply -f secret.yaml

5.创建Deployment资源引用secret资源

[root@master secret]# vim deploy.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:name: test
spec:replicas: 2template:metadata:labels:test: registryspec:containers:- name: testimage: 192.168.229.214/test/httpd:v1imagePullPolicy: AlwaysimagePullSecrets:- name: harbor-secret
[root@master secret]# kubectl apply -f deploy.yaml
[root@master secret]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
test-6d9c69c9f8-7nvlv   1/1     Running   0          42s
test-6d9c69c9f8-sc7w4   1/1     Running   0          42s

四、ConfigMap相关介绍

与secret资源一样,configMap也可以保存一些数据信息。不同的是,secret资源保存的是相对敏感的信息或者是秘钥等,而configMap保存的是一些明文的数据。
1.使用示例

user1=adminuser2=root

(1)- -from-literal

[root@master ~]# mkdir configmap
[root@master ~]# cd configmap/
[root@master configMap]# kubectl create configmap myconfigmap1 --from-literal=user1=admin --from-literal=user2=root
[root@master configmap]# kubectl describe configmaps myconfigmap1
Name:         myconfigmap1
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
user1:
----
admin
user2:
----
root
Events:  <none>

(2)- -from-file

[root@master configMap]# echo admin > user1
[root@master configMap]# echo root > user2
[root@master configMap]# kubectl create configmap myconfigmap2 --from-file=user1 --from-file=user2
[root@master configMap]# kubectl describe configmaps myconfigmap2
Name: myconfigmap2
Namespace: default
Labels: <none>
Annotations: <none>Data
====
user2:
----
rootuser1:
----
adminEvents: <none>

(3)- -from-env-file

[root@master configMap]# cat > user.txt <<EOF
> user1=admin
> user2=root
> EOF
[root@master configMap]# kubectl create configmap myconfigmap3 --from-env-file=user.txt
[root@master configMap]# kubectl describe configmaps myconfigmap3
Name: myconfigmap3
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
user2:
----
root
user1:
----
admin
Events: <none>

(4)通过yaml文件的方式

[root@master configmap]# vim myconfigmap4.yaml
kind: ConfigMap
apiVersion: v1
metadata:name: myconfigmap4
data:user1: adminuser2: root
[root@master configmap]# kubectl apply -f myconfigmap4.yaml
五、ConfigMap资源的使用

示例:创建一个Pod资源,引用上述myconfigmap1资源。
1.以volume的方式引用

[root@master configmap]# vim pod1.yaml
kind: Pod
apiVersion: v1
metadata:name: pod1
spec:containers:- name: pod1image: busyboxargs:- /bin/sh- -c- sleep 30000volumeMounts:- name: volume1mountPath: "/tmp/volume"readOnly: truevolumes:- name: volume1configMap:name: myconfigmap1
[root@master configmap]# kubectl apply -f pod1.yaml
[root@master configmap]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
pod1                    1/1     Running   0          14s
[root@master configmap]# kubectl exec -it pod1 sh
/ # cat /tmp/volume/user1 -n1   admin
/ # cat /tmp/volume/user2 -n1   root

这里假如我们将myconfigmap1对应的user1的值进行更改,会看到Pod内对应的值也会进行动态的更新。

[root@master configmap]# kubectl edit configmaps myconfigmap1
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:user1: snowuser2: root
kind: ConfigMap
metadata:creationTimestamp: "2020-11-10T08:02:43Z"name: myconfigmap1namespace: defaultresourceVersion: "9180"selfLink: /api/v1/namespaces/default/configmaps/myconfigmap1uid: 88719cef-fd57-4bfd-905f-c807d404ca3a[root@master configmap]# kubectl edit configmaps myconfigmap1
configmap/myconfigmap1 edited
[root@master configmap]# kubectl exec -it pod1 sh
/ # cat /tmp/volume/user1 -n1   snow

2.环境变量的方式引用

[root@master configmap]# vim pod2.yaml
kind: Pod
apiVersion: v1
metadata:name: pod2
spec:containers:- name: pod2image: busyboxargs:- /bin/sh- -c- sleep 30000env:- name: USER_1valueFrom:configMapKeyRef:name: myconfigmap1key: user1- name: USER_2valueFrom:configMapKeyRef:name: myconfigmap1key: user2
[root@master configmap]# kubectl apply -f pod2.yaml
[root@master configmap]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
pod1                    1/1     Running   0          12m
pod2                    1/1     Running   0          36s
[root@master configmap]# kubectl exec -it pod2 sh
/ # echo $USER_1
snow
/ # echo $USER_2
root

这里再把user1对应的更改为admin,再次验证Pod内的变量值仍然不会变,说明环境变量的方式不论引用的什么资源,都不会动态的更新。

[root@master configmap]# kubectl edit configmaps myconfigmap1
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:user1: adminuser2: root
kind: ConfigMap
metadata:creationTimestamp: "2020-11-10T08:02:43Z"name: myconfigmap1namespace: defaultresourceVersion: "14597"selfLink: /api/v1/namespaces/default/configmaps/myconfigmap1uid: 88719cef-fd57-4bfd-905f-c807d404ca3a
[root@master configmap]# kubectl exec -it pod2 sh
/ # echo $USER_1
snow

k8s资源secret和ConfigMap的相关详解相关推荐

  1. Kubernetes K8S之Taints污点与Tolerations容忍详解

    Kubernetes K8S之Taints污点与Tolerations容忍详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master C ...

  2. k8s教程(Volume篇)-PVC详解

    文章目录 01 引言 02 PVC详解 2.1 参数配置 2.1.1 资源请求(Resources) 2.1.2 访问模式 (Access Modes) 2.1.3 存储卷模式(Volume Mode ...

  3. K8s系列之:kubectl子命令详解edit

    K8s系列之:kubectl子命令详解edit 在服务器上使用默认编辑器资源,使用这个命令可以编辑多个对象,然后一次性地应用更改. #编辑名为nginx的服务 kubectl edit svc ngi ...

  4. K8s系列之:kubectl子命令详解explain

    K8s系列之:kubectl子命令详解explain 资源记录.获取资源及其字段的文档. kubectl explain pods#获取资源的特定字段的文档 kubectl explain pods. ...

  5. k8s挂载目录_云原生存储详解:容器存储与 K8s 存储卷

    作者 | 阚俊宝 阿里云技术专家 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战.本文为该系列文章的第二篇,会对容 ...

  6. [云原生专题-29]:K8S - 核心概念 - 名字空间/命名空间概念详解与主要操作案例

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  7. k8s教程(Volume篇)-PV详解

    文章目录 01 引言 02 PV详解 2.1 示例配置详解 2.1.1 存储容量 (Capacity) 2.1.2 存储卷模式 (Volume Modes) 2.1.3 访问模式 (Access Mo ...

  8. mysql数据库安装资源、步骤及基本操作指令详解

    mysql数据库安装及基本操作详解 目录 mysql安装资源及教程 安装资源 安装教程 mysql基本指令操作详解 实例操作 mysql安装资源及教程 安装资源 mysql安装包链接 链接:https ...

  9. 已解决:pod资源清单yaml中各字段详解

    1.按层级查看yaml清单 按照层级学习pod的yaml清单,比如apiVersion.kind.metadata.spec为第一层级,metadata下的name.namespace.lables为 ...

最新文章

  1. 清华校友总会AI大数据专委会(筹)第一次理事会顺利召开
  2. 发动机异响故障诊断与排除_发动机缺缸故障诊断以及排除方法
  3. linux awk 用一个或多个空格做分隔符
  4. Struts2中配置默认Action
  5. 中国电磁线行业发展前景预测与竞争态势分析报告2022-2028年版
  6. TCPIP / MTU 和 MSS 的区别和联系
  7. mysql 行转列 (结果集以坐标显示)
  8. 怎么在虚拟机上安装linux mint,如何在VirtualBox上安装Linux Mint?
  9. 关于软件测试工程师所应该具备的能力,就业前景还有适合女生从事吗?
  10. windows下matplotlib.pyplot图像中显示中文的方法
  11. N卡A卡流处理器的区别解析
  12. 简析struct in_addr ,struct sockadd
  13. ec6108v9c短接j15_华为悦盒EC6108V9C变砖头,J16强刷不出现机器人,重点介绍解决问题!...
  14. 分析:谷歌不会退出中国市场的8大理由
  15. ESP8266与阿里云传数据
  16. linux命令中tar什么意思,Linux中tar命令起什么作用呢?
  17. 什么是小托福考试?适合什么学生报考?
  18. 简体中文转繁体的python简单实现
  19. select 获取选择的值
  20. Android-悬浮窗功能的实现(附Java、KT实现源码,自学Android

热门文章

  1. 张雪峰2017年的演讲火了!老师家长说的话全是真的!
  2. 缓冲(caching)技术在网络应用程序中的作用
  3. OMI卫星数据介绍[整理]
  4. 2023年4月自考总结
  5. Python学习笔记---day07数据类型(下)
  6. Android中Theme主题和Style样式使用介绍总结
  7. python的re模块是自带的吗_Python 入门之 内置模块 -- re模块
  8. IT名人博客推荐(15个)载
  9. 销售行业如何用智能名片高效拓客?
  10. phantomjs 简介