用户通过代理与API服务器交互
通常情况下,用户往往使用kubectl客户端与API服务器进行交互,而实际上,kubectl客户端是对Kubernetes的REST API进行封装,并加上了相关的验证操作(验证所需的配置文件在~/.kube/config中),保证用户可以省去验证等操作,直接对集群中的资源进行操作。
因此,用户同样可以直接调用Kubernetes的REST API与之进行交互,只是需要自行处理验证等相关操作。
幸运的是,我们可以通过执行kubectl proxy命令,通过代理与API服务器交互,从而,验证的相关操作由代理完成,不需要用户自行处理。
因此,用户想通过代理与API服务器交互,需要执行以下两步:
使用
kubectl proxy生成代理服务器;使用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服务器收到请求后,再向后端的资源进行请求:

交互
当生成代理后,用户就可以通过代理间接的与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-jobLast updated
Was this helpful?