如何调用 API

ks-apigateway 是 KubeSphere 的 API 网关,当您部署 KubeSphere 之后,可参考如下的 API 调用流程。

第一步:暴露 ks-apigatway 服务

通过 NodePort 的方式暴露 kubesphere-system namespace 下 ks-apigatway 服务。

使用 admin 账户登录 KubeSphere,在右下角的 「工具箱」 打开 Web Kubectl,执行下述命令。

  1. kubectl -n kubesphere-system patch svc ks-apigateway -p '{"spec":{"type":"NodePort","ports":[{"name":"ks-apigateway","port":80,"protocal":"TCP","targetPort":2018,"nodePort":30881}]}}'

上述命令通过 NodePort 端口30881对外暴露 ks-apigateway 服务,可以通过集群中任意 <节点IP>:<30881> 端口访问到 ks-apigateway 服务。

第二步:获取 Token

KubeSphere 所有 API 都需要通过 Bearer Token 进行认证,在开始 API 调用之前,需要先通过 /kapis/iam.kubesphere.io/v1alpha2/login 接口获取 access_token

请求示例:

  1. curl -X POST \
  2. http://192.168.0.20:30881/kapis/iam.kubesphere.io/v1alpha2/login \
  3. -H 'Content-Type: application/json' \
  4. -d '{
  5. "username":"admin",
  6. "password":"P@88w0rd"
  7. }'

返回结果:

  1. {
  2. "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFkbWluQGt1YmVzcGhlcmUuaW8iLCJpYXQiOjE1NzM3Mjg4MDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.uK1KoK1c8MFkm8KnyORFTju31OsZ1ajtGNZQnUS1qk8"
  3. }

示例中192.168.0.20是本示例的节点 IP,请注意替换。

第三步:调用 API

通过上述步骤获取到 access_token 后,在之后所有的 API 请求中需带上认证请求头 Authorization: Bearer <access_token>,可进一步参考 API 文档

例:获取componentstatuses

  1. curl -X GET \
  2. http://192.168.0.20:30881/api/v1/componentstatuses \
  3. -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFkbWluQGt1YmVzcGhlcmUuaW8iLCJpYXQiOjE1NzM3Mjg4MDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.uK1KoK1c8MFkm8KnyORFTju31OsZ1ajtGNZQnUS1qk8'

返回结果:

  1. {
  2. "kind": "ComponentStatusList",
  3. "apiVersion": "v1",
  4. "metadata": {
  5. "selfLink": "/api/v1/componentstatuses"
  6. },
  7. "items": [
  8. {
  9. "metadata": {
  10. "name": "scheduler",
  11. "selfLink": "/api/v1/componentstatuses/scheduler",
  12. "creationTimestamp": null
  13. },
  14. "conditions": [
  15. {
  16. "type": "Healthy",
  17. "status": "True",
  18. "message": "ok"
  19. }
  20. ]
  21. },
  22. {
  23. "metadata": {
  24. "name": "controller-manager",
  25. "selfLink": "/api/v1/componentstatuses/controller-manager",
  26. "creationTimestamp": null
  27. },
  28. "conditions": [
  29. {
  30. "type": "Healthy",
  31. "status": "True",
  32. "message": "ok"
  33. }
  34. ]
  35. },
  36. {
  37. "metadata": {
  38. "name": "etcd-1",
  39. "selfLink": "/api/v1/componentstatuses/etcd-1",
  40. "creationTimestamp": null
  41. },
  42. "conditions": [
  43. {
  44. "type": "Healthy",
  45. "status": "True",
  46. "message": "{\"health\": \"true\"}"
  47. }
  48. ]
  49. },
  50. {
  51. "metadata": {
  52. "name": "etcd-0",
  53. "selfLink": "/api/v1/componentstatuses/etcd-0",
  54. "creationTimestamp": null
  55. },
  56. "conditions": [
  57. {
  58. "type": "Healthy",
  59. "status": "True",
  60. "message": "{\"health\": \"true\"}"
  61. }
  62. ]
  63. },
  64. {
  65. "metadata": {
  66. "name": "etcd-2",
  67. "selfLink": "/api/v1/componentstatuses/etcd-2",
  68. "creationTimestamp": null
  69. },
  70. "conditions": [
  71. {
  72. "type": "Healthy",
  73. "status": "True",
  74. "message": "{\"health\": \"true\"}"
  75. }
  76. ]
  77. }
  78. ]
  79. }

如何访问 Swagger UI

KubeSphere 的 API 可以在 Swagger UI 中预览,在浏览器中通过 URL http://<节点IP>:<NodePort>/swagger-ui 访问 Swagger UI,比如 http://192.168.0.20:30881/swagger-ui/

如何调用 API - 图1