k8s初级实战09--Secret

1 基础概念

Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 将这些信息放在 secret 中比放在 Pod 的定义或者 容器镜像 中来说更加安全和灵活。
Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中。Secret 可以通过 Volume 或者环境变量的方式使用。

在创建 Secret 对象时,你可以使用 Secret 资源的 type 字段,或者与其等价的 kubectl 命令行参数(如果有的话)为其设置类型。截至1.19版本,K8S提供了多种内置的类型,具体如下:

内置类型 用法
Opaque 用户定义的任意数据
kubernetes.io/service-account-token 服务账号令牌
kubernetes.io/dockercfg ~/.dockercfg 文件的序列化形式
kubernetes.io/dockerconfigjson ~/.docker/config.json 文件的序列化形式
kubernetes.io/basic-auth 用于基本身份认证的凭据
kubernetes.io/ssh-auth 用于 SSH 身份认证的凭据
kubernetes.io/tls 用于 TLS 客户端或者服务器端的数据
bootstrap.kubernetes.io/token 启动引导令牌数据

2 常见用法

2.1 创建 secret

  1. 通过文件创建 secret
    % echo -n 'admin' > ./username
    % echo -n 'kubernetes' > ./password
    % kubectl create secret generic sec-data01 --from-file=./username --from-file=./password
    secret/sec-data01 created
    查看secret数据:
    % kubectl get secrets sec-data01 -o go-template='{
          
          {.data}}'
    map[password:a3ViZXJuZXRlcw== username:YWRtaW4=]% 
    
  2. 手动加密
    默认情况下使用base64进行加密,如下直接通过base64加密,其值和secret中的加密结果相同:
    % echo -n 'admin'|base64
    YWRtaW4=
    % echo -n 'kubernetes'|base64
    a3ViZXJuZXRlcw==
    对加密数据进行解密:
    % echo 'YWRtaW4='|base64 --decode 
    admin% 
    
    % vim sec-data01.yaml 
    apiVersion: v1
    data:
      password: a3ViZXJuZXRlcw==
      username: YWRtaW4=
    kind: Secret
    metadata:
      name: sec-data01
    

2.2 使用 secret

  1. pod卷挂载 secret
    该方式会将secret信息挂载到指定的目录,然后让容器中的程序通过挂载目录的文件来读取secret的内容。
    % vim pod-sec-data01.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
     name: sec-data01
    spec:
     containers:
     - name: busybo-sec
       image: busybox:1.32
       volumeMounts:
       - name: config-volume 
         mountPath: /my-config
     volumes:
     - name: config-volume 
       secret:
         secretName: sec-data01
    创建pod:
    % kubectl apply -f pod-sec-data01.yaml
    pod/sec-data01 created
    查看secret挂载情况:
    / # ls /my-config/
    password  username
    / # cat /my-config/username 
    admin/ # 
    / # cat /my-config/password 
    kubernetes/ # 
    
  2. pod环境变量使用 secret
    该方式会将secret的key加载到pod的container env中,使用时需要通过 env[x].valueFrom.secretKeyRef 指定要包含的 Secret 名称和键名。
    % cat pod-env-sec-data02.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: env-sec-data01
    spec:
      containers:
      - name: busybo-sec
        image: busybox:1.32
        command: ['sh', '-c', 'sleep 1000000']
        env:
          - name: SECRET_USERNAME
            valueFrom:
              secretKeyRef:
                name: sec-data01
                key: username
          - name: SECRET_PASSWORD
            valueFrom:
              secretKeyRef:
                name: sec-data01
                key: password
    创建pod:
    % kubectl apply -f pod-env-sec-data02.yaml 
    pod/env-sec-data01 created
    查看环境变量:
    % kubectl exec -it  env-sec-data01 -- env|grep SEC
    SECRET_USERNAME=admin
    SECRET_PASSWORD=kubernetes
    ``
    

2.3 imagePullSecret 控制镜像访问权限

to add

3 注意事项

  1. 除了基本的secret外,也可以通过 immutable: true 字段来创建不可更改的Secret

4 说明

概念->配置->Secret
github feiskyer/kubernetes-handbook/blob/master/concepts/secret

猜你喜欢

转载自blog.csdn.net/u011127242/article/details/112390149