k8s secret 资源存储

secret 

secret:用来保存一些敏感信息,比如数据库的用户名,或者秘钥,这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。

用户可以创建自己的secret,系统也会有自己的secret

pod需要先引用才能使用某个secret,pod有两种凡是使用secret:

  • 作为volume的一个域被一个或者多个容器挂载,
  • 在拉去镜像时候被kubelet引用

内建的secret

有sa创建api证书附加的秘钥。k8s自动生成的用来访问apiserver的secret,所有的pod都会默认使用这个secret与apiserver通讯

创建自己的secret

使用kubectl create secret 命令创建secret

#例:访问数据库,需要用户名密码,分别保存在2个文件中,username password
kubectl create secret generic db-user-passwd --from-file=./username --from-file=./password  -n ns-secret
#查看创建的secret
kubectl -n ns-secret get secret db-user-passwd -o yaml

基于yaml文件的方式创建secret

apiVersion: v1
kind: Namespace
metadata:
    name: ns-secret
spec: {}

---
apiVersion: v1
kind: Secret
metadata:
    namespace: ns-secret
    name: slx-secret
data:
  user: c2x4Cg==
  passwd: MTIzMzIxCg==

使用secret

secret可以作为数据卷挂载或者作为环境变量暴露给pod中的容器使用,也可以被系统中的其他资源使用,比如可以使用secret导入外部系统交换需要证书文件等

在pod中可以以文件的形式使用secret

  1.  创建一个secret,多个pod可以引用,注意需要在同一个nsmespace
  2. 修改pod定义,在spec.volumes[]加一个volume起个名字,spec.volumes[].secret.secretName记录的要是引用的Secret名字
  3. 在每个需要使用Secret的容器中添加一项spec.containers[].volumeMounts[],指定spec.containers[].volumeMounts[].readOnly = truespec.containers[].volumeMounts[].mountPath要指向一个未被使用的系统路径。
  4. 修改镜像或者命令行使系统可以找到上一步指定的路径。此时Secret中data字段的每一个key都是指定路径下面的一个文件名
apiVersion: apps/v1
kind: Deployment
metadata:
  name: slx-secret
  namespace: ns-secret
  labels:
    app: secret
spec:
  replicas: 1
  selector:
    matchLabels:
      slx: secret
  template:
    metadata:
      labels:
        slx: secret
    spec:
      imagePullSecrets:   #使用docker-registry 创建的来从仓库中拉取镜像
      - name: myregistry #secret的名称
      containers:
      - name: nginx-slx
        image: registry.cn-beijing.aliyuncs.com/sunlixin/nginx-xiaoniaofeifei:v2
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 200m
        volumeMounts:   #使用挂载的方式挂载secret
          - name: slx  #指定挂载的名称
            mountPath: /etc/slx  #指定的路径
            readOnly: true
      volumes:
      - name: slx  #要被挂载的名称
        secret:
          secretName: slx-secret
      restartPolicy: Always  #pod的重启策略

 

posted @ 2023-02-28 01:33  百因必有果  阅读(74)  评论(0编辑  收藏  举报