前言

一:secret配置管理

1:Secret机密

官网地址:https://kubernetes.io/zh/docs/concepts/configuration/secret/

Secret解决了密码、token、密钥等敏感数据的配置问题,将加密数据存放在etcd中,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。

Secret是用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥。这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。

用户可以创建自己的secret,系统也会有自己的secret。

Pod需要先引用才能使用某个secret,Pod有2种方式来使用secret:

1.1、作为volume的一个域被一个或多个容器挂载;

1.2、在拉取镜像的时候被kubelet引用。

2:创建secret

2.1:方式一:基于文件创建secret

创建用户与密码文件

[root@master ~]# mkdir -p  /opt/demo
[root@master ~]# cd /opt/demo/
[root@master demo]# echo -n 'admin' > ./username.txt
[root@master demo]# echo -n '1f2d1e2e67df' > ./password.txt
'//可以使用 kubectl create secret --help查看命令帮助'
[root@master demo]# kubectl create secret generic db-user-pass --from-file=./username.txt
secret/db-user-pass created
[root@master demo]# kubectl delete secret db-user-pass
secret "db-user-pass" deleted
[root@master demo]#  kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
secret/db-user-pass created
[root@master demo]# kubectl get secret        //包含两个数据
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      11s
default-token-fkhds   kubernetes.io/service-account-token   3      5h15m
[root@master demo]# kubectl describe secret db-user-pass
Name:         db-user-pass
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password.txt:  12 bytes
username.txt:  5 bytes

2.2:方式二:基于参数创建secret

1、创建变量参数(进行base64解码

[root@master demo]# echo -n 'admin' | base64
YWRtaW4=
[root@master demo]# echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm

2、创建yaml文件

[root@master demo]# vim secret.yaml

apiVersion: v1
kind: Secret       '//指定secret类型'
metadata:
  name: mysecret                 //你的挂载是什么  参数就是什么
type: Opaque
data:
  username: YWRtaW4=                   '//输入解码后的参数'
  password: MWYyZDFlMmU2N2Rm

3、创建secret资源并查看详细信息

[root@master demo]# kubectl create -f secret.yaml
secret/mysecret created
[root@master demo]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      4m53s
default-token-fkhds   kubernetes.io/service-account-token   3      5h19m
mysecret              Opaque                                2      8s
[root@master demo]#

3:pod使用secret

3.1:方式一:使用secret中的变量导入到pod中

//第一种:使用secret中的变量导入到pod中
复制configmap.yaml和secret-simple.yaml

[root@master demo]# kubectl get secret mysecret -o yaml
apiVersion: v1
data:
  password: MWYyZDFlMmU2N2Rm
  username: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: "2020-10-15T09:33:47Z"
  name: mysecret
  namespace: default
  resourceVersion: "39975"
  selfLink: /api/v1/namespaces/default/secrets/mysecret
  uid: 6a3372ff-218d-4a1b-b2ec-94770daf14bf
type: Opaque
//key: username赋值给SECRET_USERNAME
//key: password 赋值给SECRET_PASSWORD

创建yaml文件并创建资源

[root@master demo]# vim secret-var.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret         '//指定mysecret资源pod'
            key: username            '//指定用户名'
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret            '//指定mysecret资源pod'
            key: password                 '//指定密码'

创建资源

[root@master demo]# kubectl apply -f secret-var.yaml
pod/mypod created
[root@master demo]# kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
mypod                     1/1     Running   0          41s
nginx-86c57db685-7jjfj    1/1     Running   1          175m
nginx2-c74d46595-865pz    1/1     Running   1          174m
tomcat-7989d99887-q98c9   1/1     Running   1          3h5m

登陆pod资源验证用户名和密码

[root@master demo]#  kubectl exec -it mypod bash
root@mypod:/# echo $SECRET_USERNAME
admin
root@mypod:/# echo $SECRET_PASSWORD
1f2d1e2e67df
root@mypod:/#

3.2:方式二:使用挂载

以volume的形式挂载到pod的某个目录下
1、创建yaml文件资源

[root@master demo]# vim secret-vol.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"     '//容器内的挂载路径'
      readOnly: true                   //只读模式
  volumes:
  - name: foo                             //挂载名 foo
    secret:
      secretName: mysecret     // 挂载到此路径
[root@master demo]# kubectl delete -f secret-var.yaml
pod "mypod" deleted
[root@master demo]# kubectl create -f secret-vol.yaml
pod/mypod created

[root@master demo]# kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
mypod                     1/1     Running   0          32m
  1. 进入容器看见里面的文件被挂载
[root@master demo]#  kubectl exec -it mypod bash
root@mypod:/# ls /etc/foo
password  username
root@mypod:/# cd /etc/foo
root@mypod:/etc/foo# cat password
1f2d1e2e67dfroot@mypod:/etc/foo# cat username
adminroot@mypod:/etc/foo#
//此处没有换行

二:ConfigMap配置管理

configmap与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息

应用场景:应用配置

有两种创建方式:
1、使用kubectl创建(yaml文件)
2、使用变量参数创建

2.1:方法一:使用kubectl创建

1、编写redis服务需要的配置并创建configmap资源

[root@master demo]#  vim redis.properties

redis.host=127.0.0.1
redis.port=6379
redis.password=123456

2、 创建configmap资源

[root@master demo]#  kubectl create configmap redis-config --from-file=redis.properties
configmap/redis-config created
//查看资源
[root@master demo]# kubectl get configmap
NAME           DATA   AGE
redis-config   1      34s
//也可以用缩写查看
[root@master demo]# kubectl get cm               '//configmap可以缩写成cm'
NAME           DATA   AGE
redis-config   1      59s

[root@master demo]# kubectl describe cm redis-config
Name:         redis-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
redis.properties:
----
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

Events:  <none>

//创建mypod资源查看文件导入

[root@master demo]# vim cm.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config                                               //挂载点
  volumes:
    - name: config-volume                                //设备端
      configMap:
        name: redis-config
  restartPolicy: Never

3. 删除掉之前创建重名的mypod

[root@master demo]# kubectl delete pod mypod
pod "mypod" deleted

[root@master demo]# kubectl apply -f cm.yaml
pod/mypod created
查看pod
[root@master demo]# kubectl get pods
NAME                      READY   STATUS              RESTARTS   AGE
mypod                     0/1     ContainerCreating   0          9s
nginx-86c57db685-7jjfj    1/1     Running             1          3h38m
nginx2-c74d46595-865pz    1/1     Running             1          3h37m
tomcat-7989d99887-q98c9   1/1     Running             1          3h48m

4、验证结果,查看日志输出

[root@master demo]#  kubectl logs mypod
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

2.2:使用变量参数形式创建configmap资源

1. 创建configmap资源

[root@master demo]# vim myconfig.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info
  special.type: hello

[root@master demo]# kubectl apply -f myconfig.yaml
configmap/myconfig created

2. 创建mypod使用configmap资源输出变量参数

vim config-var.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
      env:
        - name: LEVEL
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.level
        - name: TYPE
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.type
  restartPolicy: Never

3. 清除已有的mypod资源

kubectl delete pod mypod
//创建mypod资源
[root@master demo]# kubectl apply -f config-var.yaml
pod/mypod created
[root@master demo]# kubectl get pods -w
NAME                      READY   STATUS      RESTARTS   AGE
mypod                     0/1     Completed   0          28s
nginx-86c57db685-7jjfj    1/1     Running     1          3h43m
nginx2-c74d46595-865pz    1/1     Running     1          3h42m
tomcat-7989d99887-q98c9   1/1     Running     1          3h53m

4.查看变量的输出

^C[root@master demo]# kubectl logs mypod
info hello
[root@master demo]#
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐