目录
Secret,configmap的定义及使用
其实这两者是差不多的,只要搞懂了secret,那么configmap也是很好理解的。这两个是干什么的呢?有什么作用呢?
我们在创建有些容器的时候,比如mysql,你在创建的时候他就要求你给他配置密码,你如果直接在命令行或者yaml文件里面把密码给写上,密码就是明文的,别人可以随意看到,非常的不安全,secret就可以将你要传给容器的隐私内容做一个加密,没那么容易被别人知道,当然,我说的是没那么容易,也就是说是可以通过一些方法查看的
secret
secret的定义
secret的定义很容易,有3种方式
- 来自于文件 --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
- 来自于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,那么我们定义好了该如何去使用呢?
- 挂载使用
这种方式多适用于配置文件,比如传入一个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