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节中重点介绍。

results matching ""

    No results matching ""