天天看点

K8s API快速入门

前言

上一篇文章​​《Docker Restful API快速入门》​​介绍了有关Docker API的快速入门,今天这个文章给大家介绍一下K8s API的入门。

K8s API快速入门

下载K8s的API, k8s的API是OPENAPI的标准,可以从github.com/gohutool/docker.ui项目进行下载, 文件名k8s.swagger.json

K8s API快速入门

导入方法

打开Postman,点击File-》Import

K8s API快速入门
K8s API快速入门

如图这里就已经成功的导入了K8s的API至Postman里, 接下来,我们测试一个响应的API, 查看Pods

K8s API快速入门

执行出现错误

K8s API快速入门
[root@CENTOS-01 ~]# curl --insecure https://192.168.56.114:6443/api/v1/namespaces/ns-test/pods      
K8s API快速入门

这个错误是由于没有输入token,K8s比docker设计的更加的完善, APIServer的调用是基于K8s的RABC的认证方式;没有token标识,是用anonymous进行访问,而k8s默认anonymous是没有开启访问权限的。 

接下来,使用token进行访问

建立ROOT用户,并使用TOKEN访问

[root@CENTOS-01 ~]# kubectl create sa root      
[root@CENTOS-01 ~]# kubectl get sa root -o json
{
    "apiVersion": "v1",
    "kind": "ServiceAccount",
    "metadata": {
        "creationTimestamp": "2022-03-24T16:59:24Z",
        "name": "root",
        "namespace": "default",
        "resourceVersion": "45032",
        "uid": "18deddf8-08b8-4f4a-bd0f-48fb9a56ea7a"
    },
    "secrets": [
        {
            "name": "root-token-bsctg"
        }
    ]
}      
K8s API快速入门
[root@CENTOS-01 ~]# kubectl describe secret root-token-bsctg
Name:         root-token-bsctg
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: root
              kubernetes.io/service-account.uid: 18deddf8-08b8-4f4a-bd0f-48fb9a56ea7a

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6ImdiS1hCWGlJemxQc3U1d2FIOGNfTUctMFNUMnR6a1lPNTBHakVrTDVYaTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InJvb3QtdG9rZW4tYnNjdGciLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicm9vdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjE4ZGVkZGY4LTA4YjgtNGY0YS1iZDBmLTQ4ZmI5YTU2ZWE3YSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OnJvb3QifQ.i2M_aaM5QvIcFeKq_WViVzvrE8LwaOiP7F6EgmfITZJVFqg77pEns5Gx7uvQqAP2WUaFq_5kvKI5-ArWIO5pky40MyYMWOccI19HXZXlFwL9Z0_JelwMNQtoAVloVqwggm8hRjcytRhl5CDZTEUPZRs5S0EqUEytrr_C_0VCx5KDJXYlQCYdVBMWF91dLmlA92v2J3PnWZ9Kwd-ggreWGng7Orjdhjf-BXW1PdLKuicS8DLdpORA49x-BHTrGnDNZig_g3ypfRbv8Jk_TS0w_pDMq6dgEjx4hd7M6gSpAbxSeJ3eT0lLYZrgXU1obWzSy4ZgLUyIn4moELsZnsZq2A
ca.crt:     1099 bytes
namespace:  7 bytes      
K8s API快速入门

复制TOKEN,如图中所标识的,就是root用户对应的TOKEN; 把这里TOKEN复制后,在POSTMAN进行设置。

K8s API快速入门
K8s API快速入门

现在Token已经设置正确, 还需要给root这个用户,对应的APIServer的访问权限

kubectl create clusterrolebinding apiadmin \
--clusterrole cluster-admin --serviceaccount \
default:root      
[root@CENTOS-01 ~]# kubectl describe clusterrolebinding apiadmin 
Name:         apiadmin
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  cluster-admin
Subjects:
  Kind            Name  Namespace
  ----            ----  ---------
  ServiceAccount  root  default      
K8s API快速入门

权限已经成功授权。

进行最后的测试

[root@CENTOS-01 ~]# aaaa='eyJhbGciOiJSUzI1NiIsImtpZC...y4ZgLUyIn4moELsZnsZq2A'
[root@CENTOS-01 ~]# curl -H "Authorization: Bearer $aaaa" \
--insecure \
https://192.168.56.114:6443/api/v1/namespaces/ns-test/pods      

结束语

继续阅读