1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Kubernetes---Secret配置管理

Kubernetes---Secret配置管理

时间:2020-07-05 02:56:59

相关推荐

Kubernetes---Secret配置管理

目录

一、Secret配置管理介绍

二、创建一个Secret

2.1 从文件创建

2.2 编写一个Secret对象

三、将Secret挂载到volume中

四、向指定路径映射Secret

五、将Secret设置为环境变量

六、创建私有仓库的认证

一、Secret配置管理介绍

Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。 敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。

Pod 可以用两种方式使用 secret:

• 作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里;

• 当 kubelet 为 pod 拉取镜像时使用。

Secret的类型:

Service Account:Kubernetes 自动创建包含访问 API 凭据的 secret,并自动修改 pod 以使用此类型的 secret。对应的 secret 会自动挂载到Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中

Opaque:使用base64编码存储信息,可以通过base64 --decode解码获得原始数据, 因此安全性弱。

kubernetes.io/dockerconfigjson:用于存储docker registry的认证信息。

对于每一个namespace的sa都有一个默认的default用来使得pod连接apiserver;每个namespace下有一个名为default的默认的ServiceAccount对象;

ServiceAccount里有一个名为Tokens的可以作为Volume一样被Mount到Pod里的Secret,当Pod启动时这个Secret会被自动Mount到Pod的指定目录下,用来协助完成Pod中的进程访问API Server时的身份鉴权过程。

图 1 查看默认secret的信息

二、创建一个Secret

2.1 从文件创建

##创建用户和密码的文件[root@server1 secret]# echo -n 'admin' > ./username.txt[root@server1 secret]# echo -n 'password' > ./password.txt[root@server1 secret]# ls -a. .. password.txt username.txt###通过文件创建[root@server1 secret]# kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txtsecret/db-user-pass created##查看秘密内容[root@server1 secret]# kubectl get secrets NAME TYPE DATA AGEdb-user-passOpaque 218sdefault-token-drfsm kubernetes.io/service-account-token 336d##含有特殊字符时的创建[root@server1 secret]# kubectl create secret generic dev-db-secret --from-literal=username=devuser --from-literal=password=S\!B\\*d\$zDsbsecret/dev-db-secret created##创建过程中使用BSAER64对内容进行一定的转义[root@server1 secret]# echo 'admin' | base64YWRtaW4K[root@server1 secret]# echo 'password' | base64cGFzc3dvcmQK##secret查看[root@server1 secret]# kubectl get secret db-user-pass -o yaml

图 2 从文件创建secret

默认情况下 kubectl get和kubectl describe 为了安全是不会显示密码的内容,可以 通过以下方式查看:

图 3 从命令行创建secret

2.2 编写一个Secret对象

##创建secret的对象文件[root@server1 secret]# vim secret.yml[root@server1 secret]# cat secret.yml apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: YWRtaW4= password: cmVkaGF0##文件应用并查看创建结果[root@server1 secret]# kubectl apply -f secret.yml secret/mysecret created[root@server1 secret]# kubectl get secret

图 4 通过yml文件创建Secret对象

三、将Secret挂载到volume中

##编写pod文件[root@server1 secret]# vim sa-volume.ymladmin[root@server1 secret]# cat sa-volume.yml apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: YWRtaW4= password: cmVkaGF0---apiVersion: v1 kind: Pod metadata: name: mysecret spec: containers: - name: nginx image: nginx volumeMounts: - name: secretsmountPath: "/secret"readOnly: true volumes: ##挂载的内容- name: secrets secret:secretName: mysecret##查看当前pod[root@server1 secret]# kubectl get allNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 36d##文件应用[root@server1 secret]# kubectl apply -f sa-volume.yml secret/mysecret unchangedpod/mysecret created##查看创建的secret[root@server1 secret]# kubectl get secretNAME TYPE DATA AGEdb-user-passOpaque 227mdefault-token-drfsm kubernetes.io/service-account-token 336ddev-db-secret Opaque 225mmysecret Opaque 28m16s##查看配置文件中的内容[root@server1 secret]# kubectl exec mysecret -- ls /secretpasswordusername[root@server1 secret]# kubectl exec mysecret -- cat /secret/passwordredhat[root@server1 secret]# kubectl exec mysecret -- cat /secret/username

图 5 查看挂载到卷中的secret

四、向指定路径映射Secret

##编写映射文件[root@server1 secret]# vim sa-morror.yml[root@server1 secret]# cat sa-morror.yml apiVersion: v1kind: Secretmetadata:name: mysecrettype: Opaquedata:username: YWRtaW4=password: cmVkaGF0---apiVersion: v1kind: Podmetadata:name: sa-nginx spec:containers:- name: sa-nginximage: nginxvolumeMounts:- name: secretsmountPath: "/secret" ##映射到该目录下readOnly: truevolumes:- name: secretssecret:secretName: mysecretitems:- key: username ##将mysecret中的username 映射到路径path下《主路径下》path: my-group/my-username##使文件生效[root@server1 secret]# kubectl apply -f sa-morror.yml secret/mysecret unchangedpod/sa-nginx created##查看创建的POD[root@server1 secret]# kubectl get pod NAME READY STATUS RESTARTS AGEmysecret 1/1Running 011msa-nginx 1/1Running 010s##查看映射路径中的文件[root@server1 secret]# kubectl exec sa-nginx -- ls /secret/my-groupmy-username[root@server1 secret]# kubectl exec sa-nginx -- cat /secret/my-group/my-usernameadmin

图 6 给指定路径挂载secret

五、将Secret设置为环境变量

##编写配置文件[root@server1 secret]# vim sa-env.yml[root@server1 secret]# cat sa-env.yml apiVersion: v1kind: Secretmetadata:name: mysecrettype: Opaquedata:username: YWRtaW4=password: cmVkaGF0---apiVersion: v1kind: Podmetadata:name: secret-envspec:containers:- name: nginximage: nginxenv: ##设置环境变量- name: SECRET_USERNAME ##名字:keyvalueFrom: ##值的来源:valuesecretKeyRef:name: mysecretkey: username- name: SECRET_PASSWORDvalueFrom:secretKeyRef:name: mysecretkey: password[root@server1 secret]# kubectl apply -f sa-env.yml secret/mysecret unchangedpod/secret-env created[root@server1 secret]# kubectl exec secret-env -- env

图 7 将secret挂载到环境变量

六、创建私有仓库的认证

当个人私有仓库不公开时,若没有登陆,则此时无法进行镜像下载。使用kubernetes.io/dockerconfigjson 可以用于存储docker registry的认证信息。在镜像下载时进行认证。

##创建认证[root@server1 secret]# kubectl create secret docker-registry myregistrykey --docker-server= --docker-username=admin --docker-password=redhat --docker-email=root@[root@server1 secret]# kubectl get secret NAME TYPE DATA AGEmyregistrykey kubernetes.io/dockerconfigjson 110s[root@server1 secret]# vim sa-registry.yml[root@server1 secret]# cat sa-registry.ymlapiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: game2048image: yakexi007/game2048 imagePullSecrets: ##设置镜像拉取时所需的认证资源 - name: myregistrykey[root@server1 secret]# kubectl apply -f sa-registry.yml pod/mypod created

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。