ToB企服应用市场:ToB评测及商务社交产业平台

标题: Kubernetes(k8s)API Server详解 [打印本页]

作者: 耶耶耶耶耶    时间: 2022-8-24 02:55
标题: Kubernetes(k8s)API Server详解
目录

一、概述

k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。
kubernetes API Server的功能:
kube-apiserver工作原理图

配置文件(/etc/kubernetes/manifests/kube-apiserver.yaml

ks8官网文档
二、K8s REST API 设计思想

由于k8s的Api是基于REST的设计思想,因此,不同种类的HTTP请求也就对应了不同的操作。比较常用的对应关系是:
三、API 访问

有多种方式可以访问 Kubernetes 提供的 REST API。
1)kubectl 命令行访问方式
  1. # 可以看到"serverAddress":"192.168.0.113:6443"
  2. $ kubectl get --raw /api/
  3. $ kubectl get --raw /api/v1
  4. $ kubectl get --raw /api/v1/namespaces
复制代码

2)kubectl proxy访问方式
  1. # 先起代理端口
  2. $ kubectl proxy --port=8080 &
  3. # 查看
  4. $ curl http://localhost:8080/api/ '{"versions": ["v1"]}'
复制代码

3)curl访问方式(https)

1、创建管理员用户,授权,获取token
  1. $ cat << EOF > CreateServiceAccountRoleBinding.yaml
  2. apiVersion: v1
  3. kind: ServiceAccount
  4. metadata:
  5.   name: admin-user
  6.   namespace: kube-system
  7. ---
  8. apiVersion: rbac.authorization.k8s.io/v1
  9. kind: ClusterRoleBinding
  10. metadata:
  11.   name: admin-user
  12. roleRef:
  13.   apiGroup: rbac.authorization.k8s.io
  14.   kind: ClusterRole
  15.   name: cluster-admin
  16. subjects:
  17. - kind: ServiceAccount
  18.   name: admin-user
  19.   namespace: kube-system
  20. EOF
复制代码
执行
  1. $ kubectl apply -f CreateServiceAccountRoleBinding.yaml
  2. $ kubectl get sa -n kube-system admin-user
复制代码

获取token
  1. $ kubectl describe secret -n kube-system `kubectl get secret -n kube-system|grep admin-user|awk '{print $1}'`|grep '^token:'|awk '{print $2}'
复制代码

2、生成变量
  1. $ TOKEN=$(kubectl describe secret -n kube-system `kubectl get secret -n kube-system|grep admin-user|awk '{print $1}'`|grep '^token:'|awk '{print $2}')
复制代码
3、curl请求示例(https)
加-k处理证书问题
  1. # -k        允许curl使用非安全的ssl连接并且传输数据(证书不受信)
  2. $ curl -k --header "Authorization: Bearer $TOKEN"  https://192.168.0.113:6443/api
复制代码

4)postman访问方式

postman下载地址
链接:https://pan.baidu.com/s/1SW86b9LrO7V2ebN0Eb2yhA
提取码:8888
1、取到的token,去访问api
  1. $ kubectl describe secret -n kube-system `kubectl get secret -n kube-system|grep admin-user|awk '{print $1}'`|grep '^token:'|awk '{print $2}'
复制代码
2、设置Token

3、禁用SSL证书校验(跟上面的curl -k一样)
File->setting->General

4、验证

5)使用证书认证访问方式(https)
  1. $ CACERT=/etc/kubernetes/pki/ca.crt
  2. $ curl --cacert $CACERT --header "Authorization: Bearer $TOKEN"  https://192.168.0.113:6443/api
复制代码

四、通过API接口增删改查

k8s API v1.22 官方文档
1)namespace

1、【增】 创建POST请求:
创建namespace:  /api/v1/namespaces
【示例】
  1. $ curl -XPOST -H 'Content-Type:application/json' -d@test001.json -k --header "Authorization: Bearer $TOKEN"  https://192.168.0.113:6443/api/v1/namespaces/
复制代码
json文件
  1. # cat test001.json
  2. {
  3.     "kind": "Namespace",
  4.     "apiVersion": "v1",
  5.     "metadata": {
  6.         "name": "test001",
  7.         "labels": {
  8.             "app": "test001"
  9.         }
  10.     }
  11. }
复制代码
验证
  1. $ kubectl get ns test001
复制代码

2、【删】 删除DELETE请求:
删除namespace:  /api/v1/namespaces/{name}
【示例】
  1. $ curl -XDELETE -H 'Content-Type:application/json' -k --header "Authorization: Bearer $TOKEN"  https://192.168.0.113:6443/api/v1/namespaces/test001
复制代码

上面显示命名空间还在,但是是终止的状态,如果想立马删除,可以使用下面的语句删除。
强制删除命名空间,如果命名空间不是test001,记得修改哦。
  1. $ kubectl get namespace test001 -o json \
  2.             | tr -d "\n" | sed "s/"finalizers": \[[^]]\+\]/"finalizers": []/" \
  3.             | kubectl replace --raw /api/v1/namespaces/test001/finalize -f -
复制代码
3、【改】 修改PUT/PATCH请求:
修改指定的命名空间:  /api/v1/namespaces/{name}
修改指定名称空间的状态:  /api/v1/namespaces/{name}/status
如果部分更新可以用 PATCH
【示例】将上面的命名空间修改成test002
  1. # cat test002.yaml
  2. {
  3.     "apiVersion": "v1",
  4.     "kind": "Namespace",
  5.     "metadata": {
  6.         "name": "test001",
  7.         "labels": {
  8.             "name": "development"
  9.         }
  10.     },
  11.     "spec": {
  12.         "finalizers": [
  13.             "openshift.com/origin",
  14.             "kubernetes"
  15.         ]
  16.     },
  17.     "status": {
  18.         "phase": "Active"
  19.     }
  20. }
复制代码
执行
  1. $ curl -XPUT -H 'Content-Type:application/json' -d@test002.json -k --header "Authorization: Bearer $TOKEN"  https://192.168.0.113:6443/api/v1/namespaces/test001
  2. $ kubectl describe ns test001
复制代码

4、【查】 查询GET请求:
查询全部:  /api/v1/namespaces
查询指定namespace:  /api/v1/namespaces/{name}
  1. $ curl -XGET -H 'Content-Type:application/json' -k --header "Authorization: Bearer $TOKEN"  https://192.168.0.113:6443/api/v1/namespacestest001/
复制代码

不仅支持json格式,还支持yaml格式
【注意】-H 'Content-Type: application/yaml'
【示例】
  1. $ curl -XPOST -H 'Content-Type: application/yaml' --data '
  2. apiVersion: v1
  3. kind: Namespace
  4. metadata:
  5.   name: test003
  6. ' -k --header "Authorization: Bearer $TOKEN"  https://192.168.0.113:6443/api/v1/namespaces/
复制代码
以下讲解的资源api操作,跟上面的类似,就不一一提供示例了。
2)Pod

1、【增】 创建POST请求:
创建pod:  /api/v1/namespaces/{namespace}/pods
2、【删】 删除 DELETE请求:
删除pod:  /api/v1/namespaces/{namespace}/pods/{name}
3、【改】 修改PUT/PATCH请求:
替换指定的pod:  /api/v1/namespaces/{namespace}/pods/{name}
4、【查】(查询) GET请求:
查询全部:  /api/v1/namespaces/{namespace}/pods
查询指定pod:  /api/v1/namespaces/{namespace}/pods/{name}
3)Node

1、【增】 创建POST请求:
创建node:   /api/v1/nodes
2、【删】 删除 DELETE请求:
删除node:  /api/v1/nodes/{name}
3、【改】 修改PUT/PATCH请求:
替换指定的node:  /api/v1/nodes/{name}
替换指定node的状态:  /api/v1/nodes/{name}/status
4、【查】 查询GET请求:
查询全部: /api/v1/nodes
查询指定node:  /api/v1/nodes/{name}
查询指定节点内所有Pod的信息: /api/v1/nodes/{name}/pods/
查询指定节点内物理资源的统计信息:  /api/v1/nodes/{name}/stats/
查询指定节点的概要信息:   /api/v1/nodes/{name}/spec/
3)Service

1、【增】 创建POST请求:
创建service:   /api/v1/namespaces/{namespace}/services
2、【删】 删除DELETE请求:
删除service:  /api/v1/namespaces/{namespace}/services/{name}
3、【改】 修改PUT/PATCH请求:
替换指定的service:  /api/v1/namespaces/{namespace}/services/{name}
4、【查】 查询GET请求:
查询全部: /api/v1/namespaces/{namespace}/services
查询指定service:  /api/v1/namespaces/{namespace}/services/{name}
~~~   这里只列举了一小部分常用的接口,更多接口,请查看官方文档  ~~~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4