3.1.3 访问kubernetes REST API
以编程的方式访问 Kubernetes REST API 有助于了解其流程化的集群管理机制,一种常用的方式是使用curl作为HTTP客户端直接通过API Server在集群上操作资源对象模拟请求和响应的过程。不过,由 kubeadm 部署 Kubernetes 集群默认仅支持 HTTPS的访问接口,它需要一系列的认证检查,还在用户也可以借助 kubectl proxy 命令在本地主机上为API Server启动一个代理网关,由它支持使用HTTP进行通讯,其工作逻辑如图3-3所示。
例如,于本地 127.0.0.1 的 8080 端口上启动 API Server 的一个代理网关:
**[terminal]
**[delimiter $ ]**[command kubectl proxy --port=8080]
Starting to serve on 127.0.0.1:8080
而后即可于另一终端使用 curl 一类的客户端工具对此套接字地址发起访问请求,例如,请求 kubernetes 集群上的NamespaceList资源对象,即列出集群上所有的Namespace对象:
**[terminal]
**[delimiter $ ]**[command curl localhost:8080/api/v1/namespaces/]
{
"kind": "NamespaceList",
"apiVersion": "v1",
"metadata": {
"selfLink": "/api/v1/namespaces/",
"resourceVersion": "1356011"
},
或者使用JSON的命令行处理器jq命令对响应的JSON数据流进行内容过滤,例如,下面的命令仅用于显示相关的NamespaceList对象中各成员对象:
**[terminal]
**[delimiter $ ]**[command curl -s localhost:8080/api/v1/namespaces/ | jq .items[].metadata.name]
"default"
"kube-node-lease"
"kube-public"
"kube-system"
给出特定的 Namespace 资源对象的名称则能够直接获取相对应的资源信息,以Kube-system 名称空间为例:
**[terminal]
**[delimiter $ ]**[command curl -s localhost:8080/api/v1/namespaces/kube-system]
{
"kind": "Namespace",
"apiVersion": "v1",
"metadata": {
"name": "kube-system",
"selfLink": "/api/v1/namespaces/kube-system",
"uid": "0af98bf7-0ba2-11ea-9b5d-000c29d3bc46",
"resourceVersion": "16",
"creationTimestamp": "2019-11-20T14:28:38Z"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"phase": "Active"
}
}
上述命令相应的结果中展现了 Kubernetes 大多数资源对象的资源配置格式,它是一个JSON 序列化的数据结构,具有 kind、apiVersion、metadata、spec和status五个一级字段,各字段的意义和功能将在3.2节中重点介绍。