Kubernetes API的配置和使用

2021-07-04  本文已影响0人  北邮郭大宝

我们经常会使用Kubectl命令行工具管理 K8s 集群,获取诸如Pods等资源的信息,但是有时候也会在应用程序中通过调用API的方式去获取集群信息。本篇介绍如何配置和使用。

1625356773025.jpg

如图所示,无论是具体的User用户,还是Service Account,都需要经过三个步骤能调用API:认证、鉴权和准入控制。一般情况都是通过Service Account的名义去查询集群信息,所以以SA为例,讲一下如何对某个SA赋权,对集群某个namespace只读权限。整体思路是基于RBAC原理。

一、创建SA

首先肯定需要创建SA,在default的namespace下,名为api-view。

kubectl create sa api-view -n default

二、创建Role

RBAC原理的话,下一步是创建“权限”,在k8s里就是role或者ClusterRole。两者区别是Role需要指定namespace,ClusterRole可以对集群作用域的资源都有效。本例创建的是Role,作用域是default,权限是对pod可以进行get、watch、list等读权限。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
  namespace: default
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

写完yaml文件后执行生效

kubectl apply -f role-read.yaml

三、创建RoleBinding

下一步是通过RoleBinding绑定SA和Role,roleRef里填写的是刚创建的Role:pod-reader,subject里填的是SA。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rolebinding-api-view-serviceaccount
  namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: api-view
  namespace: default

同理执行生效

kubectl apply -f role-binding-api-veiw.yaml

四、获取Token

接下来就是获取token信息,执行步骤如下

kubectl get secret | grep api-view # 先查到secret
kubectl describe secret api-view-token-fdcng -n default # 获取token
1625357787629.jpg

五、调用API

准备工作已经全部就绪,可以拿着token去访问k8s api server了。

curl -k https://127.0.0.1:6443/api/v1/namespaces/default/pods -H "Authorization: Bearer <token xxxx>"

API的列表可以参考官网
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/

上一篇下一篇

猜你喜欢

热点阅读