解析Kubernetes中工作节点组件和集群通信原理

本文会分析Node节点的两个组件(kube-proxy和kubelet)同集群如何建立通信的过程。这两个组件其实已经覆盖了从集群外(非Pod形式)和集群进行通信的所有可能,为什么这么说,我们可以看一下这两个组件的特点:

  • kube-proxy:只是做client和集群进行通信
  • kubelet:即作为客户端去监听和获取集群中的信息,又要作为服务端让集群获取这个Node节点上的Pod信息

前两部分我们会简单的科普一下SSL的过程和Kubernetes中通过RBAC进行认证的内容,因为这两部分内容属于看懂后续两部分的基础,如果对这两部分内容比较熟悉的同学可以跳过。

为了增加阅读体验,我把有过多代码的放到另一个文件里面,文章中相应的部分通过链接的方式。

密不透风:SSL的过程解析Kubernetes中工作节点组件和集群通信原理_第1张图片

 

首先如果要想有一个CA机构签发的证书的话,会自己生成私钥,然后通过私钥证书签名请求(CSR)让CA去签名,这个证书签名中会包含服务端的一些信息(比如common name、organization等)还有公钥。

CA收到证书签名请求(CSR)之后,会生成一个证书,证书内容包括申请者的信息,CA的信息以及申请者公钥,然后会用CA的私钥进行加密,然后把证书给服务端。

当客户端想要和服务端进行SSL连接的时候要先要发个申请连接的请求。

然后服务端就会把通过CA签发的证书给客户端。

客户端用CA的证书去验证服务端的证书是否正确(一般CA证书会内置在操作系统中,这也是为什么第0步骤会用虚线表示)。

客户端验证通过后会用证书中的公钥对数据进行加密保证安全。

注:

  • 这里只是说的单向SSL过程,如果是双向的话客户端也要有自己的证书
  • 验证证书通过后之后,客户端和服务端会协商一个对称加密进行通信,因为非对称加密太慢了。(因为对称加密的过程对本文没影响,所以有兴趣的读者可以自行查找资料或者和我探讨交流)
  • 这里为了照顾大多数读者,没有细致的深入,比如CA怎么签发的服务端证书。考虑到本文主要讲Kubernetes的,不是讲加密的,这里没有重点写出

附加几个生成密钥和查看的命令:

  • 生成私钥:openssl genrsa -out helios.key 1024
  • 通过私钥生成公钥:openssl rsa -in helios.key -pubout -out helios.pem
  • 生成证书签名请求:openssl req -key helios.key -new -out helios.req
  • CA签发证书:openssl x509 -req -in helios.req -CA cacertificate.pem -CAkey caprivate.key -out helioscertificate.pem
  • 查看证书签名请求文件内容:openssl req -in helios.req -noout -text
  • 如果不想自己尝试命令可以看看我的 输出

各司其职:RBAC是什么

RBAC的本质就是给不同的用户不同的角色,角色代表的权限,是由Kubernetes本身定义的,用户代表的访问集群的“人”。

所以要理解RBAC就要理解Kubernetes中有几种用户,角色怎么控制权限,以及用户和角色之间如何绑定的,下面我们就来一个个的看。

Kubernetes中的用户

在Kubernetes中,用户从宏观上就可以分为两种,集群内的用户以及集群外的用户:

  • 集群内的用户:serviceAccount

你可能感兴趣的:(Java,kubernetes,容器,云原生)