用户通过代理与API服务器交互

通常情况下,用户往往使用kubectl客户端与API服务器进行交互,而实际上,kubectl客户端是对Kubernetes的REST API进行封装,并加上了相关的验证操作(验证所需的配置文件在~/.kube/config中),保证用户可以省去验证等操作,直接对集群中的资源进行操作。

因此,用户同样可以直接调用Kubernetes的REST API与之进行交互,只是需要自行处理验证等相关操作。

幸运的是,我们可以通过执行kubectl proxy命令,通过代理与API服务器交互,从而,验证的相关操作由代理完成,不需要用户自行处理。

因此,用户想通过代理与API服务器交互,需要执行以下两步:

  1. 使用kubectl proxy生成代理服务器;

  2. 使用curl通过代理与Kubernetes的REST API交互;

生成代理

使用kubectl客户端建立代理的方式来与API服务器通信,因为它可以在用户的请求中添加授权令牌,从而令用户获得访问API服务器的权限,从而间接的与API服务器交互。开启代理的命令如下:

kubectl proxy --port 8080

在本地的8080端口上开启kubectl proxy

生成代理后,用户的请求转发的过程如下图所示,当用户请求localhost:8080/api/v1/namespaces/default/pods/kubia-0/proxy/时,会被代理将地址进行转换为API服务器的地址,即192.168.99.106:8443,并且在请求中加入验证所需的授权令牌等信息,当API服务器收到请求后,再向后端的资源进行请求:

使用kubectl proxy转发请求至Pod

交互

当生成代理后,用户就可以通过代理间接的与API服务器进行交互。

假设代理监听的端口是8080,那么举几个例子,展示其用法:

# 列举Kubernetes资源的版本清单(不同的资源可能存在于不同的版本中)
curl http://localhost:8080
# 列举特定版本下的资源类别
curl http://localhost:8080/apis/batch/v1
# 列举某类资源的所有实例(此处列举的是Jobs)
curl http://localhost:8080/apis/batch/v1/jobs
# 查看某命名空间中某类资源的某一个具体实例(default命名空间,Jobs资源,my-job实例)
curl http://localhost:8080/apis/batch/v1/namespaces/default/jobs/my-job

Last updated

Was this helpful?