Kubernetes的Secret对象使用

  • 2019 年 10 月 3 日
  • 笔记

Secret可以把想要访问的加密数据,存放到Etcd中,然后Pod可以通过的Volume的方式,访问到Secret保存的信息 ,每当数据修改的时候,Pod挂载的Secret文件也会被修改,特别适合用来存放账户密码

一、创建Secret对象

1. 通过文件创建

生成两个文件,分别是username.txt和password.txt

echo "chenqionghe" > ./username.txt  echo "111111" > ./password.txt

创建

kubectl create secret generic user --from-file=./username.txt  kubectl create secret generic pass --from-file=./password.txt

2. 通过yaml创建

注意:值必须是base64转码

apiVersion: v1  kind: Secret  metadata:    name: mysecret  type: Opaque  data:    user:  Y2hlbnFpb25naGUK    pass: MTExMTExCg==

创建

kubectl apply -f mysecret.yaml

二、获取secret对象

root@VM-0-8-ubuntu:/home/ubuntu/project-volume# kubectl get secrets  NAME TYPE DATA AGE  default-token-gqfrx kubernetes.io/service-account-token 3 20d  mysecret Opaque 2 1m  pass Opaque 1 6m  user Opaque 1 6m

三、通过pod使用secret示例

这里指定了volume是projected类型,引用的是secret的user和pass,挂载路径为/projected-volume

apiVersion: v1  kind: Pod  metadata:    name: test-projected-volume  spec:    containers:    - name: test-secret-volume      image: busybox      args:      - sleep      - "86400"      volumeMounts:      - name: mysql-cred        mountPath: "/projected-volume"        readOnly: true    volumes:    - name: mysql-cred      projected:        sources:        - secret:            name: user        - secret:            name: pass

执行创建

kubectl apply -f test-projected-volume.yaml

查看pod已经创建出来

root@VM-0-8-ubuntu:/home/ubuntu/project-volume# kubectl get pod  NAME READY STATUS RESTARTS AGE  test-projected-volume 1/1 Running 0 5m

再进入pod内查看,看到文件已经存在,并且内容和设置的一样

root@VM-0-8-ubuntu:/home/ubuntu/project-volume# kubectl exec -it test-projected-volume -- /bin/sh  / # ls /projected-volume/  password.txt username.txt  / # cat /projected-volume/username.txt  chenqionghe

然后我们修改一下username的secret文件,将chenqionghe修改为cqh(对应的base编码为Y3FoCg==)

kubectl edit secret user

修改内容如下

apiVersion: v1  data:    username.txt: Y3FoCg==  kind: Secret  metadata:    creationTimestamp: 2019-09-27T09:14:00Z    name: user    namespace: default    resourceVersion: "2108808"    selfLink: /api/v1/namespaces/default/secrets/user    uid: 24566f8f-e107-11e9-8c22-f242c645cfec  type: Opaque

再次查看pod中挂载的文件,已经发生变化

root@VM-0-8-ubuntu:/home/ubuntu# kubectl exec -it test-projected-volume -- cat /projected-volume/username.txt  cqh