• 14.Secret配置管理


    1.Secret 是什么?

    Configmap 一般是用来存放明文数据的,如配置文件,对于一些敏感数据,如密码、私钥等数据时,要用 secret 类型。
    Secret 解决了密码、token、秘钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用。要使用 secret,pod 需要引用 secret。Pod 可以用两种方式使用 secret:作为volume 中的文件被挂载到 pod 中的一个或者多个容器里,或者当 kubelet 为 pod 拉取镜像时使用。

    secret 可选参数有三种:

    • generic: 通用类型,通常用于存储密码数据。
    • tls:此类型仅用于存储私钥和证书。
    • docker-registry: 若要保存 docker 仓库的认证信息的话,就必须使用此种类型来创建。

    Secret 类型:

    • Service Account:用于被 serviceaccount 引用。serviceaccout 创建时Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。
    • Opaque:base64 编码格式的 Secret,用来存储密码、秘钥等。可以通过 base64 --decode 解码获得原始数据,因此安全性弱
    • kubernetes.io/dockerconfigjson: 用来存储私有 docker registry 的认证信息。

    2.使用 Secret

    • 通过环境变量引入 Secret
      把 mysql 的 root 用户的 password 创建成 secret
    [root@master1 ~]# kubectl create secret generic mysql-password --from-literal=password=lucky66
    [root@master1 ~]# kubectl get secret
    NAME              TYPE         DATA        AGE
    mysql-password    Opaque        1          30s
    [root@master1 ~]# kubectl describe secret mysql-password
    Name: mysql-password
    Namespace: default
    Labels: <none>
    Annotations: <none>
    Type: Opaque
    Data
    ====
    password: 20bytes
    #password 的值是加密的,
    #但 secret 的加密是一种伪加密,它仅仅是将数据做了 base64 的编码.
    

    创建 pod,引用 secret
    pod-secret.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-secret
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80
        env:
        - name: MYSQL_ROOT_PASSWORD #它是 Pod 启动成功后,Pod 中容器的环境变量名.
          valueFrom:
            secretKeyRef:
              name: mysql-password #这是 secret 的对象名
              key: password #它是 secret 中的 key 名
    
    [root@master1 ~]# kubectl apply -f pod-secret.yaml
    [root@master1 ~]# kubectl exec -it pod-secret -- /bin/sh
    / # printenv
    MYSQL_ROOT_PASSWORD=lucky66
    
    • 通过 volume 挂载 Secret
      创建 Secret 手动加密,基于 base64 加密
    [root@master1 ~]# echo -n 'admin' | base64
    YWRtaW4=
    [root@master1 ~]# echo -n '123456f' | base64
    eGlhbmNoYW8xMjM0NTZm
    
    #解码:
    [root@master1 ~]# echo eGlhbmNoYW8xMjM0NTZm | base64 -d
    

    secret.yaml

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      username: YWRtaW4=
      password: eGlhbmNoYW8xMjM0NTZm
    
    [root@master1 ~]# kubectl apply -f secret.yaml
    [root@master1]# kubectl describe secret mysecret
    Name:
    mysecret
    Namespace: default
    Labels: <none>
    Annotations: <none>
    Type: Opaque
    Data
    ====
    password: 15 bytes
    username: 5 bytes
    

    将 Secret 挂载到 Volume 中
    pod_secret_volume.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-secret-volume
    spec:
      containers:
      - name: myapp
        image: registry.cn-beijing.aliyuncs.com/google_registry/myapp:v1
        volumeMounts:
        - name: secret-volume
          mountPath: /etc/secret
          readOnly: true
      volumes:
      - name: secret-volume
        secret:
          secretName: mysecret
    
    [root@master1 ~]# kubectl apply -f pod_secret_volume.yaml
    [root@master1 ~]# kubectl exec -it pod-secret-volume -- /bin/sh
    / # ls /etc/secret
    password username
    / #
    / # cat /etc/secret/username
    admin/ #
    / #
    / # cat /etc/secret/password
    123456f/ #
    #由上可见,在 pod 中的 secret 信息实际已经被解密。
    
  • 相关阅读:
    LF Filed Control
    《C++反汇编与逆向分析技术揭秘》——流程控制语句的识别
    《C++反汇编与逆向分析技术揭秘》——观察各种表达式的求值过程
    项目笔记---图片处理
    项目笔记---压缩方式
    Visual Studio 使用调试技巧
    温故知新---重读C#InDepth(二)
    温故知新---重读C#InDepth(一)
    SQL笔记---多表左联
    SQL笔记---分页
  • 原文地址:https://www.cnblogs.com/forlive/p/15978304.html
Copyright © 2020-2023  润新知