Secret

前言

使用场景:凭证
作用:解决了密码、token、秘钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或pod spec 中。可以以volume或环境变量的方式使用。

pod可以用三种方式来使用secret:
    • 作为挂载到一个或多个容器上的卷中的文件
    • 作为容器的环境变量
    • 由kubelet在为pod拉取镜像时使用

secret有三种类型:
    opaque:base64编码格式,数据也通过base64解码得到原始数据,加密性很弱
    dockerconfigjson:用来存储私有的docker registry 的认证信息。
    service-account-token:用于被serviceaccount引用。

配置实践

1、创建secret加密数据

[root@k8s-master ~]# cat secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

[root@k8s-master ~]# kubectl apply -f secret.yaml 
secret/mysecret created

[root@k8s-master ~]# kubectl get secrets 
NAME       TYPE     DATA   AGE
mysecret   Opaque   2      10s


2、创建secret以环境变量形式存在pod中

[root@k8s-master ~]# cat secret-val.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: nginx:1.15
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
            optional: false # 此值为默认值;意味着 "mysecret"
                            # 必须存在且包含名为 "username" 的主键
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password
            optional: false # 此值为默认值;意味着 "mysecret"
                            # 必须存在且包含名为 "password" 的主键
  restartPolicy: Never      
                                                                    
[root@k8s-master ~]# kubectl apply -f secret-val.yaml 
pod/secret-env-pod created

[root@k8s-master ~]# kubectl get pods
NAME             READY   STATUS    RESTARTS   AGE
secret-env-pod   1/1     Running   0          17s

[root@k8s-master ~]# kubectl exec -it secret-env-pod bash
root@secret-env-pod:/# echo $SECRET_PASSWORD
1f2d1e2e67df
root@secret-env-pod:/# echo $SECRET_USERNAME
admin
root@secret-env-pod:/# exit
Exit


3、以volume形式挂载在pod中

[root@k8s-master ~]# cat secret-vol.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: nginx:1.15
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret
      optional: false # 默认设置,意味着 "mysecret" 必须已经存在      
                                                                                      
[root@k8s-master ~]# kubectl apply -f secret-vol.yaml 
pod/mypod created

[root@k8s-master ~]# kubectl get pods
NAME             READY   STATUS    RESTARTS   AGE
mypod            1/1     Running   0          5s
secret-env-pod   1/1     Running   0          5m24s

[root@k8s-master ~]# kubectl exec -it mypod bash
root@mypod:/# cd /etc/foo/
root@mypod:/etc/foo# ls
password  username
root@mypod:/etc/foo# cat password 
1f2d1e2e67dfroot@mypod:/etc/foo# 
root@mypod:/etc/foo# cat username 
adminroot@mypod:/etc/foo# 
root@mypod:/etc/foo# exit
exit


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值