K8S第一讲 Kubernetes之Secret详解

本文详细介绍了Kubernetes中的Secret资源,它用于安全地存储密码、token和秘钥等敏感数据,以降低暴露风险。Secret分为用户创建和系统自有的类型,并可通过特定方式供Pod引用和使用,如作为Volume挂载或环境变量。同时,讨论了如何通过设置访问策略保护secret的安全,特别是在协作场景下防止机密泄露。

Secret详解

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

  • 用户可以创建自己的secret,系统也会有自己的secret。
  • Pod需要先引用才能使用某个secret

secret仅提供有限安全

  • 协作时防止机密数据泄露
  • 为secret资源设置单独安全访问策略

Pod有2种方式来使用secret:

    1. 作为volume的一个域被一个或多个容器挂载
    1. 在拉取镜像的时候被kubelet引用。
创建一个secret.yaml文件,内容用base64编码:明文显示容易被别人发现,这里先转码。
echo -n 'admin' | base64
YWRtaW4=
echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm



vim secret.yml
---
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque  #模糊
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

或者

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque  #模糊
stringData:
  username:  admin
  password:  1f2d1e2e67df
kubectl apply -f secret.yml  创建
kubectl get secrets
kubectl get secret mysecret -o yaml

pod使用

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: testredis
    image: daocloud.io/library/redis
    volumeMounts:    #挂载一个卷
    - name: foo     #这个名字需要与定义的卷的名字一致
      mountPath: "/etc/foo"  #挂载到容器里哪个目录下,随便写
      readOnly: true
  volumes:     #数据卷的定义
  - name: foo   #卷的名字这个名字自定义
    secret:    #卷是直接使用的secret。
      secretName: mysecret   #调用刚才定义的secret

映射secret key到指定的路径

 volumes:
  - name: foo
    secret:
      secretName: mysecret
      items:   #定义一个items
       - key: username   #将那个key重新定义到那个目录下
         path: my-group/my-username  #相对路径,相对于/etc/foo的路径

以环境变量的形式使用Secret

---
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: testredis
    image: daocloud.io/library/redis
    env:  #定义环境变量
     - name: SECRET_USERNAME   #创建新的环境变量名称
       valueFrom:
        secretKeyRef:     #调用的key是什么
         name: mysecret       #变量的值来自于mysecret
         key: username       #username里面的值
spec:
  containers:
     - name: testredis
       image: daocloud.io/library/redis
       envFrom:  #定义环境变量
         - secretRef:     #调用的key是什么
             name: mysecret       #变量的值来自于mysecret
         - configMapRef: 
              name: configmap1

Deployment配置

apiVersion: v1
kind: Deployment
metadata:
  name: myDeployment
spec:
   selector:
       matchLabels:
             app: redisDeploy
   replicas: 1
   template:
   	   metadata:
   	        labels:
   	            app:  redisDeploy
       spec:
           containers:
                - name:  redisDeploy
                   image:  daocloud.io/library/redis
                   envFrom:
                        - configMapRef:
                              name: myconfigMap
                       - secretRef:
                             name: mysecret       
apiVersion: v1
kind: Service
metadata:
  name: myService
spec:
    ports:
       - name: http
         port: 8080
         targetPort: 8080
         nodePort: 31080
    selector:
        app: redisDeploy
    type: NodePort
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值