您现在的位置是:首页 >学无止境 >K8S第一讲 Kubernetes之Secret详解网站首页学无止境

K8S第一讲 Kubernetes之Secret详解

追梦鹿少年 2023-06-18 08:00:02
简介K8S第一讲 Kubernetes之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
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。