K8s 从懵了到娴熟 – 镜像系统获取那件琐事-必威app下载_betway必威体育官网_必威体育亚洲官网

导读:比较 K8s 集群的其他功用,私有镜像的主动拉取,看起来可能是比较简略的。而镜像拉取失利,大多数状况下都和权限有关。所以,在处理相关问题的时分,咱们往往会轻松的说:这问题很简略,肯定是权限问题。但实践的状况是,咱们常常为一个问题,花了多个人的时刻却找不到原因。这首要仍是咱们对镜像拉取,特别是私有镜像主动拉取的原理了解不深。这篇文章,作者将带领咱们评论下相关原理。

次序上来说,私有镜像主动拉取会首要经过阿里云 Acr credential helper 组件,再经尕尔寺过 K8s K8s 从懵了到熟练 – 镜像体系获取那件小事-必威app下载_betway必威体育官网_必威体育亚洲官网 集群的 API Server 和 kubelet 组件,最终到 docker 容器运行时。可是我的叙说,会从后往前,从最基本的 docker 镜像拉取说起。

镜像拉取这件小事

为了评论便利,咱们来想象一个场景。许多人会运用网盘来寄存一些文件,像相片,文档之类。当咱们存取文件的时分,咱们需求给网盘供给账户暗码,这样网盘服务就能验证咱们的身份。这时,咱们是文件资源的所有者,而网盘则扮演着资源服务器的人物。账户暗码作为认证办法,确保只要咱们自己能够存取自己K8s 从懵了到熟练 – 镜像体系获取那件小事-必威app下载_betway必威体育官网_必威体育亚洲官网 的文件。

这个场景满足简略,但很快咱们就遇到新需求:咱们需求运用一个在线制造相册的运用。按正常的运用流程,咱们需求把网盘的相片下载到本地,然后再把相片上传到电子相册。这个进程是比较很繁琐的。咱们能想到的优化办法是,让相册运用,直接拜访网盘来获取咱们的相片,而这需求咱们把用户名和暗码授权给相册运用运用。

这样的授权办法,长处清楚明了,但缺陷也是很明显的:咱们把网盘的用户名暗码给了相册服务,相册服务就具有了读写网盘的才干,从数据安全视点,这个是很可怕的。其实这是许多运用都会遇到的一个一般性场景。私有镜像拉取其实也是这个场景。这儿的镜像库房,就跟网盘相同,是资源服务器,而容器集群则是三方服务,它需求拜访镜像库房获取镜像。

了解 OAuth 2.0 协议

OAuth 协议是为了处理上述问题而规划的一种规范计划,咱们的评论针对 2.0 版别。比较把账户暗码直接给三方运用,此协议采用了一种直接的办法来到达相同的意图。如下图,这个协议包含六个进程,分别是三方运用获取用户授权,三方运用获取暂时 Token 以及三方运用存取资源。

这六步了解起来不容易,首要是由于安全协议的规划,需求考虑协议的易证明性,所以咱们换一种办法来解说这个协议。简略来说,这个协议其实就做了两件工作撸撸哥哥:

  • 在用户授权的状况下,三方运用K8s 从懵了到熟练 – 镜像体系获取那件小事-必威app下载_betway必威体育官网_必威体育亚洲官网 获取 token 所表明的暂时拜访权限;
  • 然后三方运用运用这个 token 去获取资源。

假如用网盘的比如来阐明的话,那便是用户授权网盘服务给相册运用创立暂时 token,然后相册运用运用这个 token 去网盘服务获取用户的相片。实践上 OAuth 2.0 各个变种的中心不同刘佩琦,在于第一件工作,便是用户授权资源服务器的办法。

  1. 最简略的一种,适用于三方息斯敏运用自身就具有被拜访资源操控权限的状况。这种状况下,三方运用只需求用自己的账户暗码登录资ordinary源服务器并请求暂时 token 即可K8s 从懵了到熟练 – 镜像体系获取那件小事-必威app下载_betway必威体育官网_必威体育亚洲官网 ;
  2. 当用户对三方运用满足信赖的状况下,用户直接把账户暗码给三方运用,三方运用运用账户暗码向资源服务器请求暂时 token;
  3. 用户经过资源服务器供给的接口,登录资源服务器并授权资源服务器给三方运用发放 token;
  4. 完好完成 OAuth 2.0 协议,也是最安全的。三方运用首要获取以验证码表明的用户授权,然后用此验证码从资源服务器交换暂时 token,最终运用 token 存取资源。

从上面的描绘咱们能够看到,资源服务器实践上扮演了鉴权和资源办理两种人物,这两者分隔完成的话,协议流程会变成下图这样。

Docker 扮演的人物

大图

镜像库房 Registry 的完成,现在运用“把账户暗码给三方运用”的办法。即假定用户对 Docker 满足信赖,用户直接将账户暗码交给 Docker,然后 Docker 运用账户暗码跟鉴权服务器请求暂时 token。

了解 docker login

首要,咱们在拉取私有镜像之前,要运用 docker login 指令来登录镜像库房。这儿的登录其实并没有和镜像库房树立什么会话之类的联系。登录首要就做了三件工作:

  • 第一件工作是跟用户要账户暗码。

如下图,当履行登录指令,这个命会提示输入账户暗码,这件工作对应的是大图的第一步。

  • 第二件工作,docker 拜访镜像库房的 https 地址,并经过应战 v2 接口来承认,接口是否会回来 Docker-Distribution-Api-Version 头字段。

这件工作在协议图中没有对应的进程。它的效果跟 ping 差不多,仅仅承认下 v2 镜像库房是否在线,以及版别是否匹配。

  • 第三件工作,docker 运用用户供给的账户暗码,拜访 Www-Authenticat寒战2e 头字段回来的鉴权服务器的地址 Bearer realm。

假如这个拜访成功,则鉴权服务器会回来 jwt 格局的 token 给 docker,然后 docker 会把账户暗码编码并保存在用户目录的 .docker/docker.json丁传红 文件里。

下图是我登录库房之后的 docker.json 文件。这个文件作为 docker 登录库房的仅有依据,在后续镜像库房操作中,会被不断的读取并运用。其间要害信息 auth 便是账户暗码的 编码。

拉取镜像是怎样谌天舒回事

镜像一般会包含两部分内容,一个是 manifests 文件,这个文件界说了镜像的元数据,另一个是镜像层,是实践的镜像分层文件。镜像拉取基本上是环绕这两部分内容打开。由于咱们这篇文章的要点是权限问题,所以咱们这儿只以 manifests 文件拉取为例。

拉取 manifests 文件,基本上也会做三件工作:

  • 首要,docker 直接拜访镜像manifests的地址,以便获取 Www-Authenticate 头字段。这个字段包含鉴权服务器的地址 Bearer realm,镜像服务地址 service,以及界说了镜像和操作的 scope。

  • 接着,docker 拜访上边拿到的 Bearer realm 地址来鉴权,以及在鉴权之后获取一个暂时的 token。这对应协议大图运用账户暗码获取暂时 token 这一步,运用的账户暗码直接读取自 docker.json 文件。

  • 最终,运用上边的 token,以 Authorization 头字段的办法,来下载 manifests 文件。这对应的是协议大图下载镜像这一步。当然由于镜像还有分层文件,所以实践 docker 还会用这个暂时 K8s 从懵了到熟练 – 镜像体系获取那件小事-必威app下载_betway必威体育官网_必威体育亚洲官网 token 屡次下载文件才干完好镜像下载。

K8s 完成的私有镜像主动拉取

基本功用

K8s 集群一般会办理多个节点,每个节点都有自己的 docker 环境。假如让用户分别到集群节点上登录镜像库房,这显然是很不便利的。为了处理这个问题,K8s 完成了主动拉取镜像的功用。这个功用的中心,是把 docker.json 内容编码,并以 Secret 的办法作为 Pod 界说的一部分传给 Kubelet。

具体来说,进程如下:

  1. 创立 secret。这个 secret 的 .dockerconfigjson 数据项包含了一份 编码的 docker.json 文件;
  2. 创立 pod,且 pod 编列中 imagePullSecrets 指向第一步创立的 secret;
  3. Kubelet 作为集群操控器,监控着集群的改变。当它发现新的 pod 被创立,就会经过 API Server 获取 pod 的界说,这包妮莎柯比括 imagePullSecrets 引证的 secret;
  4. Kubelet 调用 docker 创美足胜桃夭建容器且把 .dockerconfigjson 传给 docker;
  5. 最K8s 从懵了到熟练 – 镜像体系获取那件小事-必威app下载_betway必威体育官网_必威体育亚洲官网 后 do中商惠源cker 运用解码出来的账户暗码拉取镜像,这和上一节的办法共同。

进阶办法

上边的功用,必定程度上处理了集群节点登录镜像库房不便利的问题。可是咱们在创立 Pod 的时分,依然需求给 Pod 指定 imagePullSecrets。K8s 经过改变准入操控(Mutating Admission Control)进一步优化了上边的基本功用。

进一步优化的内容如下:

  1. 在第一步创立 secret 之后,增加 default service account 对 imagePullSecrets 的引证;
  2. Pod 默许运用 default service account,而 service account 改变准入操控器会在 default service account 激活windows引证 imagePullSecrets 的状况下,增加 imagePullSecrets 装备到 pod 的编列心悦会员官网里。

阿里云rline是什么意思完成的 Acr credential helper

阿里云容器服务团队,在 K8s 的基础上完成了操控器 Acr credential helper。这个操控器能够让一同运用阿里云 K8s 集群和容器镜像服务产品的用户,在不必装备自己账户暗码的状况下,主动运用私有库房中的容器镜像。

具体来说,操控器会监听 acr-conf钙片iguration 这个 configmap 的改变,其首要关怀 acr-registry 和 watch-namespace 这两个装备。前一个装备指定为暂时账户授权的镜像库房地址,后一个装备办理能够主动拉取镜像的命名空间。当操控器发现有命名空间需求被装备却没有被装备的时分,它会经过阿里云容器镜像服务的 API,来获取暂时账户和暗码。

有了暂时账户暗码,Acr credential helper 为命名空间创立对K8s 从懵了到熟练 – 镜像体系获取那件小事-必威app下载_betway必威体育官网_必威体育亚洲官网 应的 Secret 以及更改 default SA 来引证这个 Secret。这样,操控器和 K8s 集群自身的功用怪鱼流入长沙商场,一同主动化了阿里云 K8s 集群拉取阿里云容器镜像服务上的镜像的悉数流程。

总结

叶安定薄靳煜

了解私有镜像主动拉取的完成,有一个难点和一个要点。

  • 难点是 OAuth 2.0 安全协议的原理,上文首要剖析了为什么 OAuth 会这么规划;
  • 要点是集群操控器原理,由于整个主动化的进程,实践上是包含 Adm咽炎的症状ission control 和 Acr credential helper 在内的多个操控器协作的成果。

--------------------------------

本文作者:声东

原文链接:https://yq.aliyun.com/articles/720278?utm_content=g_1000079643

本文为云栖社区原创内容,未经答应不得转载。

评论(0)