开发者社区> 店家小二> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Kubernetes(六) - Secret和私有仓库认证

简介: 对一个公司来说安全也是最为重要的因为可能一旦出现安全问题可能这个公司就完了,所以对密码管理是一个长久不变的话题,Kubernetes对密码管理提供了Secret组件进行管理,最终映射成环境变量,文件等方式提供使用,统一进行了管理更换方便,并且开发人员并不需要关心密码降低了密码的受众范围从而保障了安全.
+关注继续查看

对一个公司来说安全也是最为重要的因为可能一旦出现安全问题可能这个公司就完了,所以对密码管理是一个长久不变的话题,Kubernetes对密码管理提供了Secret组件进行管理,最终映射成环境变量,文件等方式提供使用,统一进行了管理 更换方便,并且开发人员并不需要关心密码降低了密码的受众范围从而保障了安全.

Kubernetes官方文档:https://kubernetes.io/docs/reference/

Kubernetes官方Git地址:https://github.com/kubernetes/kubernetes

PS:本系列中使用 KubernetesV1.8 RancherV1.6.14

1. 初始化Secret

首先我们需要初始化一个Secret,使用Yaml文件创建时需要使用base64之后的内容作为Value

$ echo -n "admin" | base64
YWRtaW4=
$ echo -n "1f2d1e2e67df" | base64
MWYyZDFlMmU2N2Rm

老规矩通过yaml的方式创建我们的Secret配置文件可以看到已经生效了

> vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
 name: mysecret
type: Opaque
data:
 username: YWRtaW4=
 password: MWYyZDFlMmU2N2Rm

> kubectl create -f ./secret.yaml
secret "mysecret" created
> kubectl get secret
NAME TYPE DATA AGE
default-token-lnftf kubernetes.io/service-account-token 3 1d
mysecret Opaque 2 9s

2. 环境变量

我们在使用Secret第一个场景就是作为容器的环境变量,大部分容器都提供使用环境变量配置密码的功能,你的程序只需要读取到这个环境变量使用这个环境变量的内容去链接到对应的服务就可以正常使用了,如下我们初始化一个Pod服务,使用之前预设好的信息作为用户名密码配置进去

> vim secret-env.yaml
apiVersion: v1
kind: Pod
metadata:
 name: secret-env-pod
spec:
 containers:
 - name: mycontainer
 image: redis
 env:
 - name: SECRET_USERNAME
 valueFrom:
 secretKeyRef:
 name: mysecret
 key: username
 - name: SECRET_PASSWORD
 valueFrom:
 secretKeyRef:
 name: mysecret
 key: password
 restartPolicy: Never
> kubectl create -f secret-env.yaml 

3.文件(TLS证书)

除了配置成环境变量我们在很多地方也会使用到文件的方式来存放密钥信息,最常用的就是HTTPS这样的TLS证书,使用证书程序(比如Nginx没法使用环境变量来配置证书)需要一个固定的物理地址去加载这个证书,我们吧之前配置用户名和密码作为文件的方式挂在到某个目录下

> vim secret-file.yaml
apiVersion: v1 kind: Pod metadata:
 name: secret-file-pod
spec:
 containers:
 - name: mypod
 image: redis
 volumeMounts:
 - name: foo
 mountPath: "/etc/foo"
 readOnly: true
 volumes:
 - name: foo
 secret:
 secretName: mysecret
> kubectl create -f secret-file.yaml

如果有需要对同的配置分开挂载到不同的地方可以使用如下配置

apiVersion: v1 kind: Pod metadata:
 name: secret-file-pod
spec:
 containers:
 - name: mypod
 image: redis
 volumeMounts:
 - name: foo
 mountPath: "/etc/foo"
 readOnly: true
 volumes:
 - name: foo
 secret:
 secretName: mysecret
 items:
 - key: username
 path: my-group/my-username
  • username存储在/etc/foo/my-group/my-username文件而不是/etc/foo/username。
  • password 不会挂载到磁盘

因为映射成了文件那么对权限也是可以控制的

 volumes:
 - name: foo
 secret:
 secretName: mysecret
 defaultMode: 256

然后,秘密将被挂载,/etc/foo并且由秘密卷挂载创建的所有文件都将具有权限0400。

PS: JSON规范不支持八进制表示法,因此对于0400权限使用值256。如果您使用yaml代替pod的json,则可以使用八进制表示法以更自然的方式指定权限。
您也可以使用映射(如上例所示),并为不同的文件指定不同的权限,如下所示:

 volumes:
 - name: foo
 secret:
 secretName: mysecret
 items:
 - key: username
 path: my-group/my-username
 mode: 511 

在这种情况下,生成的文件/etc/foo/my-group/my-username将具有权限值0777。由于JSON限制,您必须以十进制表示法指定模式。

4.Docker私有仓库认证

使用过K8s的小伙伴肯定会遇到一个问题,我们在使用自有的Docker仓库的时候都需要先登录用户名和密码,但是如果使用K8S怎么配置密码呢?在secret中有一个类型是docker-registry我们可以通过命令行的方式创建在获取Docker镜像时使用的用户名和密码

kubectl create secret docker-registry regsecret --docker-server=registry-vpc.cn-hangzhou.aliyuncs.com --docker-username=admin --docker-password=123456 --docker-email=xxxx@qq.com 

如果使用编排文件是如下格式

kind: Secret
apiVersion: v1
metadata:
 name: regsecret
type: kubernetes.io/dockercfg
data:
 ".dockercfg": eyJyZWdpc3RyeS12cGMuY24taGFuZ3pob3UuYWxpeXVuY3MuY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IjEyMzQ1NiIsImVtYWlsIjoieHh4eEBxcS5jb20iLCJhdXRoIjoiWVdSdGFXNDZNVEl6TkRVMiJ9fQ==

# 反base64的结果 : {"registry-vpc.cn-hangzhou.aliyuncs.com":{"username":"admin","password":"123456","email":"xxxx@qq.com","auth":"YWRtaW46MTIzNDU2"}} 

然后我们就可以在获取指定镜像的时候为他指定一个获取镜像的Docker凭证

apiVersion: v1 kind: Pod metadata:
 name: secret-file-pod
spec:
 containers:
 - name: mypod
 image: redis
 imagePullSecrets: # 获取镜像需要的用户名密码
 - name: regsecret
本文转自开源中国-Kubernetes(六) - Secret和私有仓库认证

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Kubernetes里的secret最基本的用法
Kubernetes里的secret最基本的用法
122 0
自建Kubernetes集群如何使用免密组件拉取容器镜像
aliyun-acr-credential-helper是一个可以在ACK集群中免密拉取ACR个人版或企业版私有镜像的组件。该组件会默认安装在所有ACK集群中。本文列举四个场景介绍如何使用免密组件拉取私有镜像。
474 0
从零到破万节点!支撑618大促背后的蚂蚁金服Kubernetes集群
今年618天猫大促,蚂蚁首次在调度系统和技术栈全量应用Kubernetes,这也是世界最大规模的Kubernetes集群之一。这是由一个仅有十几人组成的小队团蚂蚁金服的 Kubernetes开发团队用短短一年时间取得的成绩。
1997 0
Kubernetes最佳实践S01E03:Kubernetes集群健康检查最佳实践
今天是Google Developer Advocate Sandeep Dinesh关于如何充分利用Kubernetes环境的七部分视频和博客系列的第三部分。分布式系统很难管理。 一个重要原因是有许多动态部件都为系统运行起作用。
2129 0
如何创建高效、经济的Kubernetes集群
操作起来要简单快速,既要高效又要省钱,这样的Kubernetes集群怎么搭?Kubernetes是我主要学习的主题之一。我知道不光是我,还有一定数量的人愿意在工作之余进一步使用和研究它。本文是介绍关于如何创建一个高效的Kubernetes集群,用于在Scaleway上使用Terraform和Rancher 2.x的开发目的。
1925 0
如何在阿里云上构建一个合适的Kubernetes集群
本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整。 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其实即没有达到省钱的目的,也没有很好的发挥K8S集群的优势。
1435 0
以Kubeadm方式安装的Kubernetes集群的探索
以Kubeadm方式安装的Kubernetes集群的探索 博客分类: Kubernetes 当前手上有两个Kubernetes cluster,一个是采用kube-up.sh安装的k8s 1.3.7版本,另外一个则是采用kubeadm安装的k8s 1.5.1版本。
1981 0
+关注
645
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载