K8S之配置信息应用

在K8S中,为容器提供预先定义好的数据,K8S支持四种volume:Secret、ConfigMap、DownloadAPI、ServiceAccountToken

Secret

把Pod想要访问的加密数据存放到etcd中,然后可以在Pod容器通过挂载的方式访问secret里保存的数据
一旦secret被创建,我们可以通过三种方式使用

  1. 在创建Pod时,通过为Pod指定service account来自动使用secret
  2. 通过挂载该secret到Pod来使用它
  3. 在Docker镜像下载时使用,通过指定Pod的spc.ImagePullSecrets来引用它
apiVersion: v1
kind: Pod
metadata: 
  name: pod-volume-test
  labels:
    app: pod-volume-test
spec:
  containers:
  - name: volume-secret-test
    image: xxx
    command:
    - "/bin/sh"    
    - "-c"
    - "sleep 3600"
    volumeMounts:
    - name: my-secret
      mouthPath: "/project-volume"
      readOnly: true
  volumes:
  - name: my-secret
    projected:
      sources:
      - secret:
          name: my-secret-volume

-------------
apiVersion: v1
kind: Secret
metadata:
  name: my-secret-volume
type: Opaque
data:
  user: cm9vdA==
  password: UEBzc1cwcmQ=

通过这种方式挂载的secret,如果单个数据被更新,这些volume里的内容不会被更新,如要更新,重新apply或删除重建

ConfigMap

configMap 保存的数据不需要加密,比如存放应用的配置信息

定义配置信息yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-params
  labels:
    app: my-app
data:
  db.host: localhost
  db.port: "3306"

使用上述定义配置信息

apiVersion: v1
kind: Pod
metadata:
  name: env-configmap
  labels:
    app: env-configmap-db
spec:
  containers:
  - name: test-configmap
    image: xxx
    command:
    - "/bin/sh"    
    - "-c"
    - "env"
    env:
    - name: DB_HOST
      valueFrom:
        configMapKeyRef:
          name: my-app-params
          key: db.host
    - name: DB_PORT
      valueFrom:
        configMapKeyRef:
          name: my-app-params
          key: db.port      
    envFrom:
    - configMapRef:
      name: my-app-params     

DownloadAPI

让这个Pod里的容器可以直接获取这个Pod API对象本身的信息

apiVersion: v1
kind: Pod
metadata:
  name: test-downwardapi-volume
  labels:
    zone: us-est-coast
    cluster: test-cluster1
    rack: rack-22
spec:
  containers:
    - name: client-container
      image: k8s.gcr.io/xxxx
      command: ["sh", "-c"]
      args:
      - while true; do
          if [[ -e /etc/podinfo/labels ]]; then
            echo -en '\n\n'; cat /etc/podinfo/labels; fi;
          sleep 5;
        done;
      volumeMounts:
        - name: podinfo
          mountPath: /etc/podinfo
          readOnly: false
  volumes:
    - name: podinfo
      projected:
        sources:
        - downwardAPI:
            items:
              - path: "labels"
                fieldRef:
                  fieldPath: metadata.labels

ServiceAccountToken

ServiceAccountToken是K8S内置一种服务账户,是K8S进行权限分配的对象。ServiceAccountToken的授权信息和文件保存在
secret对象中,它是一个特殊的secret对象。任何运行在K8S集群上的应用,都必须使用ServiceAccountToken里保存的授权信息,
也就是token,这样才能合法访问API Server。K8S已经提供一个默认的服务账户,任何一个运行在K8S里的Pod,都可以无显示声明地
挂载ServiceAccountToken并使用它

posted @ 2024-08-23 14:13  秋水秋色  阅读(5)  评论(0编辑  收藏  举报