Kubernetes Proxy API接口

Kubernetes Proxy API接口的作用是代理REST请求,即Kubernetes API Server把收到的REST请求转发到某个Node上的kubelet守护进程的REST端口,由该kubelet进程负责响应。

Pod的Proxy接口的作用和意义:在Kubernetes集群之外访问某个Pod容器的服务(HTTP服务)时,可以用Proxy API实现,这种场景多用于管理目的,比如逐一排查Service的Pod副本,检查哪些Pod的服务存在异常。

关于Node的相关接口

该接口的REST路径为/api/v1/proxy/nodes/{name},其中{name}为节点的名称或IP地址,包括以下几个具体接口:

/api/v1/proxy/nodes/{name}/pods/      # 列出指定节点内所有Pod的信息
/api/v1/proxy/nodes/{name}/stats/     # 列出指定节点内物理资源的统计信息
/api/v1/proxy/nodes/{name}/spec/      # 列出指定节点的概要信息

注意:

这里获取的Pod的信息数据来自Node而非etcd数据库,所以两者可能在某些时间点有所偏差。此外,如果kubelet进程在启动时包含--enable-debugging-handlers=true参数,那么Kubernetes Proxy API还会增加下面的接口:

/api/v1/proxy/nodes/{name}/run             # 在节点上运行某个容器
/api/v1/proxy/nodes/{name}/exec            # 在节点上的某个容器中运行某条命令
/api/v1/proxy/nodes/{name}/attach          # 在节点上attach某个容器
/api/v1/proxy/nodes/{name}/portForward     # 实现节点上的Pod端口转发
/api/v1/proxy/nodes/{name}/logs            # 列出节点的各类日志信息
/api/v1/proxy/nodes/{name}/metrics         # 列出和该节点相关的Metrics信息
/api/v1/proxy/nodes/{name}/runningpods     # 列出节点内运行中的Pod信息
/api/v1/proxy/nodes/{name}/debug/pprof     # 列出节点内当前Web服务的状态,
                                           # 包括CPU占用情况和内存使用情况等

关于Pod的相关接口

通过这些接口,我们可以访问Pod里某个容器提供的服务(如Tomcat在8080端口的服务):

/api/v1/proxy/namespaces/{namespace}/pods/{name}/{path:*} # 访问Pod的某个服务接口
/api/v1/proxy/namespaces/{namespace}/pods/{name}          # 访问Pod
/api/v1/namespaces/{namespace}/pods/{name}/proxy/{path:*} # 访问Pod的某个服务接口
/api/v1/namespaces/{namespace}/pods/{name}/proxy          # 访问Pod

在上面的4个接口里,后面两个接口的功能与前面两个完全一样,只是写法不同。

关于Service的Proxy接口

Kubernetes Proxy API也有Service的Proxy接口,其接口定义与Pod的接口定义基本一样:/api/v1/proxy/namespaces/{namespace}/services/{name}

比如,若我们想访问MyWeb这个Service,则可以在浏览器里输入http://192.168.18.131:8080/api/v1/proxy/namespaces/default/services/myweb/demo/。

最后更新于