客户端怎样通过Kubernetes集群API服务器认证吗?

  


现在我们上微博,或者网购,操作的其实不是眼前这台设备,而是一个又一个集群。通常,这样的集群拥有成百上千个节点,每个节点是一台物理机或虚拟机。集群一般远离用户,坐落在数据中心。为了让这些节点互相协作,对外提供一致且高效的服务,集群需要操作系统.Kubernetes就是这样的操作系统。

比较Kubernetes和单机操作系统,Kubernetes相当于内核,它负责集群软硬件资源管理,并对外提供统一的入口,用户可以通过这个入口来使用集群,和集群沟通。

客户端怎样通过Kubernetes集群API服务器认证?

而运行在集群之上的程序,与普通程序有很大的不同。这样的程序,是“关在笼子里”的程序。它们从被制作,到被部署,再到被使用,都不寻常。我们只有深挖根源,才能理解其本质。

”关在笼子里”的程序

代码

我们使用去语言写了一个简单的web服务器程序app.go,这个程序监听在这2580个端口。通过http协议访问这个服务的根路径,服务会返回,这是一个小应用Kubernetes……“字符串。

 <代码>包主要
  导入(
  ,,,,“;github.com/gorilla/mux"
  ,,,,“log"
  ,,,,“;net/http"
  )
  func (w http。ResponseWriter r * http.Request) {
  ,,,,w.Write([]字节(“这是一个小应用kubernetes…\ n"))
  }
  函数main () {
  ,,,,r:=mux.NewRouter ()
  ,,,,r.HandleFunc (“/?
  ,,,,log.Fatal (http.ListenAndServe (“0.0.0.0:2580", r))
  } 

使用去构建命令编译这个程序,产生应用可执行文件。这是一个普通的可执行文件,它在操作系统里运行,会依赖系统里的库文件。

 <代码> # ldd应用
  linux-vdso.so。1=比;(0 x00007ffd1f7a3000)
  libpthread.so。0=比;/lib64/libpthread.so。0 (0 x00007f554fd4a000)
  libc.so。6=比;/lib64/libc.so。6 (0 x00007f554f97d000)/lib64/ld - linux - x86 - 64.。2 (0 x00007f554ff66000)  

“笼子”

为了让这个程序不依赖于操作系统自身的库文件,我们需要制作容器镜像,即隔离的运行环境.Dockerfile是制作容器镜像的“菜”谱。我们的菜谱就只有两个步骤,下载一个centos的基础镜像,把应用程序这个可执行文件放到镜像中/usr/local/bin目录中去。

 <代码>从centos
  添加应用/usr/local/bin  

地址

制作好的镜像存再本地,我们需要把这个镜像上传到镜像仓库里去。这里的镜像仓库,相当于应用商店。我们使用阿里云的镜像仓库,上传之后镜像地址是:

 <代码>registry.cn-hangzhou.aliyuncs.com/kube-easy/app:latest  

镜像地址可以拆分成四个部分:仓库地址/命名空间/镜像名称:镜像版本。显然,镜像上边的镜像,在阿里云杭州镜像仓库,使用的命名空间是kube-easy,镜像名:版本是应用:最新。至此,我们有了一个可以在Kubernetes集群上运行的,”关在笼子里”的小程序。

入口

Kubernetes作为操作系统,和普通的操作系统一样,有API的概念。有了API,集群就有了入口;有了API,我们使用集群,才能得其门而入.Kubernetes的API被实现为运行在集群节点上的组件API服务器。这个组件是典型的web服务器程序,通过对外暴露http (s)接口来提供服务。

客户端怎样通过Kubernetes集群API服务器认证?

这里我们创建一个阿里云Kubernetes集群。登录集群管理页面,我们可以看到API服务器的公网入口。

 <代码> API服务器内网连接端点:https://xx.xxx.xxx。xxx: 6443  

双向数字证书验证

阿里云Kubernetes集群API服务器组件,使用基于CA签名的双向数字证书认证来保证客户端与API服务器之间的安全通信。这句话很绕口,对于初学者不太好理解,我们来深入解释一下。

从概念上来讲,数字证书是用来验证网络通信参与者的一个文件。这和学校颁发给学生的毕业证书类似。在学校和学生之间,学校是可信第三方,而学生是通信参与者。如果社会普遍信任一个学校的声誉的话,那么这个学校颁发的毕业证书,也会得到社会认可。参与者证书和CA证书可以类比毕业证和学校的办学许可证。

这里我们有两类参与者,CA和普通参与者;与此对应,我们有两种证书,CA证书和参与者证书;另外我们还有两种关系,证书签发关系以及信任关系。这两种关系至关重要。

我们先看签发关系。如下图,我们有两张CA证书,三个参与者证书。

客户端怎样通过Kubernetes集群API服务器认证吗?