zoukankan      html  css  js  c++  java
  • Kubernetes Secret

    一、简介

    Secret主要作用是保管私密数据,如密码,OAuth Tokens和 ssh key等,将这些信息放在Secret中比放在Pod的定义中或者docker镜像中来说更加灵活和安全

    Secret有三种类型:

    • Opaque:base64 编码格式的secret,用来存储密码、密钥等;但数据也可以通过base64-decode解码得到原始数据,所以加密下很弱

    • kubernetes.io/dockerconfigjson:用来存储docker registry的认证信息

    • kubernetes.io/service-account-token:用于被ServiceAccount引用,ServiceAccount创建时kubernetes会默认创建对应的secret。Pod如果使用了ServiceAccount,对应的secret会自动挂载到Pod目录/run/secrets/kubernetes.io/serviceaccount中

    二、Opaque Secret

    Opaque 类型的数据是一个map类型,要求value是base64编码格式,比如创建一个用户名为admin,密码为admin123的Secret对象,首先需要把这个用户名和密码做base64编码

    # echo -n 'admin' | base64
    YWRtaW4=
    ​
    # echo -n 'admin123'|base64
    YWRtaW4xMjM=

    编写secret-demo.yaml

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secret
    type: Opaque
    data:
      username: YWRtaW4=
      password: YWRtaW4xMjM=

    创建secret

    # kubectl create -f secret-demo.yaml 
    secret/my-secret created

    查看secret

    # kubectl get secret my-secret -o wide
    NAME        TYPE     DATA   AGE
    my-secret   Opaque   2      20s
    ​
    ​
    # kubectl describe secret my-secret
    Name:         my-secret
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    ​
    Type:  Opaque
    ​
    Data
    ====
    password:  8 bytes
    username:  5 bytes

    三、使用Secret

    3.1 环境变量

    secret-pod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: secret-pod1
    spec:
      containers:
      - name: secret-pod1
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/busybox
        command:
        - sleep
        - "600"
        env:
        - name: USERNAME
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: username
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: password 

    查看env环境变量

    # kubectl exec -it secret-pod1 -- env | grep -Ei 'username|password'
    USERNAME=admin
    PASSWORD=admin123

    3.2 volume挂载

    secret-pod2.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: secret-pod2
    spec:
      containers:
      - name: secret-pod2
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/busybox
        command: ['/bin/sh','-c','ls /etc/secrets']
        volumeMounts:
        - name: secrets
          mountPath: /etc/secrets
      volumes:
      - name: secrets
        secret:
          secretName: my-secret

    创建Pod

    # kubectl create -f secret-pod2.yaml 
    pod/secret-pod2 created

    查看日志输出

    # kubectl logs secret-pod2
    password
    username

    四、 Kubernetes.io/dockerconfigjson

    除了上面的Opaque这个类型外,还可以来创建用户docker registry 认证的 Secret,直接使用kubectl create 即可

    # kubectl create secret docker-registry myregistry --docker-server=DOCKER_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
    ​
    secret "myregistry" created

    五、Kubernetes.io/service-account-token

    另外一种Secret类型就是kubernetes.io/service-account-token,用于被serviceaccount引用。serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的secret会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中。

     

     六、Secret 与 ConfigMap对比

    相同点:

    • key/value 的形式

    • 属于某个特定的 namespace

    • 可以导出到环境变量

    • 可以通过目录/文件形式挂载

    • 通过volume挂载的配置信息均可热更新

    不同点:

    • Secret可以被ServerAccount关联

    • Secret可以存储docker register的鉴权信息,用在ImagePullSecret参数中,用于拉去私有仓库的镜像

    • Secret支持base64加密

    • Secret分为 kubernetes.io / service-account-token、kubernetes.io/dockerconfigjson、Opaque三种类型,而ConfigMap不区分类型

    •  

  • 相关阅读:
    背水一战 Windows 10 (26)
    背水一战 Windows 10 (25)
    背水一战 Windows 10 (24)
    背水一战 Windows 10 (23)
    背水一战 Windows 10 (22)
    背水一战 Windows 10 (21)
    背水一战 Windows 10 (20)
    背水一战 Windows 10 (19)
    背水一战 Windows 10 (18)
    背水一战 Windows 10 (17)
  • 原文地址:https://www.cnblogs.com/bigberg/p/13553373.html
Copyright © 2011-2022 走看看