PROXY API
kubernetes API Server 最主要的 REST 接口是对资源对象执行 CRUD 操作的接口,但是它还有一类很特殊的 REST 接口 -- Kubernetes Proxy API 接口,这类接口的作用是代理 REST 请求,即 kubernetes API Server 把收到的 REST 请求转发到某个 Node 节点上的 kubelet 守护进程的 REST 端口,由该 kubelet 进程负责响应
Node接口
与 Node 相关接口的 REST 路径为/api/v1/nodes/{name}/proxy
,其中 {name} 是节点的名称或是 IP 地址
//列出结点内所有的pod的信息
curl http://localhost:8078/api/v1/nodes/scms01/proxy/pods
//列出指定结点内物理资源的统计信息
curl http://localhost:8078/api/v1/nodes/scms01/proxy/stats
<a href="/stats/">Moved Permanently</a>.
//没有资源,稍等看下
[root@scms01 system]# curl http://localhost:8078/api/v1/nodes/scms01/proxy/stats/
404: Page Not Found[root@scms01 system]#
//获取指定节点的概要信息
curl http://localhost:8078/api/v1/nodes/scms01/proxy/spec
404 page not found
//列出指定节点的各类日志信息
/api/v1/nodes/{name}/proxy/logs
//列出指定节点的 Metrics 信息
/api/v1/nodes/{name}/proxy/metrics
//列出结点上运行的pod
curl http://localhost:8078/api/v1/nodes/scms01/proxy/runningpods/
//列出结点上当前web服务的状态
curl http://localhost:8078/api/v1/nodes/scms01/proxy/debug/pprof
下面的命令 要加具体的参数才能运行
/api/v1/nodes/{name}/proxy/run
/api/v1/nodes/{name}/proxy/exec
/api/v1/nodes/{name}/proxy/attch
Pod接口
通过 Pod proxy 接口,我们可以访问 Pod 里面某个容器提供的服务。通常与 Pod 相关接口的 REST 路径为:
/api/v1/namespaces/{namespace}/pods/{name}/proxy # 访问 Pod
/api/v1/namespaces/{namespace}/pods/{name}/proxy/{path:*} # 访问 Pod 服务的 URL 路径
下面示例:
//通过get pods 获取pod的名称
[root@scms01 system]# kubectl get pods -o wide
//获取该pod的详细信息
curl http://localhost:8078/api/v1/namespaces/default/pods/webapp-5759bc56f7-pc75d
如果后面再加一层/proxy/,就可以和直接访问接口一样
[root@scms01 system]# curl http://localhost:8078/api/v1/namespaces/default/pods/webapp-5759bc56f7-pc75d/proxy/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Apache Tomcat/8.0.35</title>
<link href="favicon.ico" rel="icon" type="image/x-icon"/>
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon"/>
<link href="tomcat.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="wrapper">
<div id="navigation" class="curved con
看到这里,你可能已经知道proxy接口的意义了:在k8s集群之外访问某个pod容器服务时,就可用proxy api 实现,用于管理目的,比如逐一排查service的pod副本,检测pod服务是否存在异常。
Service接口
service和pod的用法一样,不再赘述
补充:也可以通过kubect命令请求 加上 --raw参数 后面加上uri就行了,效果和curl的一样,在写shell脚本请求的时候比较有用,返回的也是json数据
kubectl get --raw /api/v1/namespaces/default/pods/webapp-5759bc56f7-pc75d/proxy
kubectl get --raw /api/v1/nodes
kubectl get --raw /api/v1/namespaces