k8s~ServiceAccount_ClusterRole_ClusterRoleBinding

news/2024/10/13 10:24:38

apisix的k8s服务发现配置

命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。Kubernetes RBAC API定义了四种类型:Role、ClusterRole、RoleBinding与ClusterRoleBinding,这四种类型之间的关系和简要说明如下:

  • Role:角色,其实是定义一组对Kubernetes资源(命名空间级别)的访问规则。
  • RoleBinding:角色绑定,定义了用户和角色的关系。
  • ClusterRole:集群角色,其实是定义一组对Kubernetes资源(集群级别,包含全部命名空间)的访问规则。
  • ClusterRoleBinding:集群角色绑定,定义了用户和集群角色的关系。

Role和ClusterRole指定了可以对哪些资源做哪些动作,RoleBinding和ClusterRoleBinding将角色绑定到特定的用户、用户组或ServiceAccount上。如下图所示。

实践部分

1 为了让 APISIX 能查询和监听 Kubernetes 的 Endpoints 资源变动,我们需要创建一个 ServiceAccount:

kind: ServiceAccount
apiVersion: v1
metadata:name: apisix-testnamespace: default

2 以及一个具有集群级查询和监听 Endpoints 资源权限的 ClusterRole:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: apisix-test
rules:
- apiGroups: [ "" ]resources: [ endpoints ]verbs: [ get,list,watch ]

3 再将这个 ServiceAccount 和 ClusterRole 关联起来:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: apisix-test
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: apisix-test
subjects:- kind: ServiceAccountname: apisix-testnamespace: default

4 然后我们需要获取这个 ServiceAccount 的 token 值,如果 Kubernetes 是 v1.24 之前的版本,可以通过下面的方法获取 token 值:

$ kubectl get secrets | grep apisix-test
$ kubectl get secret apisix-test-token-879xv -o jsonpath={.data.token} | base64 -d

5 Kubernetes 从 v1.24 版本开始,不能再通过 kubectl get secret 获取 token 了,需要使用 TokenRequest API 来获取,首先开启代理:

$ kubectl proxy --port=8001
Starting to serve on 127.0.0.1:8001

6 然后调用 TokenRequest API 生成一个 token:

$ curl 'http://127.0.0.1:8001/api/v1/namespaces/default/serviceaccounts/apisix-test/token' \-H "Content-Type:application/json" -X POST -d '{}'
{"kind": "TokenRequest","apiVersion": "authentication.k8s.io/v1",..."status": {"token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImtLdHRyVzFmNTRHWGFVUjVRS3hrLVJMSElNaXM4aENLMnpfSGk1SUJhbVkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjc5NTMzMDQwLCJpYXQiOjE2Nzk1Mjk0NDAsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0Iiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImFwaXNpeC10ZXN0IiwidWlkIjoiMzVjZWJkYTEtNGZjNC00N2JlLWIxN2QtZDA4NWJlNzU5ODRlIn19LCJuYmYiOjE2Nzk1Mjk0NDAsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmFwaXNpeC10ZXN0In0.YexM_VoumpdwZNbSkwh6IbEu59PCtZrG1lkTnCqG24G-TC0U1sGxgbXf6AnUQ5ybh-CHWbJ7oewhkg_J4j7FiSAnV_yCcEygLkaCveGIQbWldB3phDlcJ52f8YDpHFtN2vdyVTm79ECwEInDsqKhn4n9tPY4pgTodI6D9j-lcK0ywUdbdlL5VHiOw9jlnS7b60fKWBwCPyW2uohX5X43gnUr3E1Wekgpo47vx8lahTZQqnORahTdl7bsPsu_apf7LMw40FLpspVO6wih-30Ke8CNBxjpORtX2n3oteE1fi2vxYHoyJSeh1Pro_Oykauch0InFUNyEVI4kJQ720glOw","expirationTimestamp": "2023-03-23T00:57:20Z"}
}

7 默认的 token 有效期只有一个小时,可以通过参数改为一年:

$ curl 'http://127.0.0.1:8001/api/v1/namespaces/default/serviceaccounts/apisix-test/token' \-H "Content-Type:application/json" -X POST \-d '{"kind":"TokenRequest","apiVersion":"authentication.k8s.io/v1","metadata":{"name":"apisix-test","namespace":"default"},"spec":{"audiences":["https://kubernetes.default.svc.cluster.local"],"expirationSeconds":31536000}}'

8 我们在 APISIX 的配置文件 config.yaml 中添加如下内容( 将上面生成的 token 填写到 token 字段 ):

discovery:kubernetes:service:schema: httpshost: 127.0.0.1port: "6443"client:token: ...

这里有一个比较坑的地方,port 必须是字符串,否则会导致 APISIX 启动报错 invalid discovery kubernetes configuration: object matches none of the required

大功告成!

参考:https://www.aneasystone.com/archives/2023/03/apisix-service-discovery.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/53139.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

国产化适配——银河麒麟V10(2)

续上文 三、nignx安装 ng版本是:nginx-1.20.2 链接:https://pan.baidu.com/s/1gVJ_YgD-_gyJ6JL2VxoFhA 提取码:bqf4 版本比较老了,大家可以自己去官网下载最新的版本使用。 官网地址:https://nginx.org/en/download.html 1.挂载镜像 mount -t iso9660 /mnt/tools/Kylin-Se…

nessus使用教程心得

安装教程网络一大堆,这里就不多哔哔。点击查看代码实例演示-扫描漏洞(小白级别) 1.输入你注册的账号密码进行登录,进入主页面。2.点击“New Scan”新建一个扫描。3.选择“Basic Network Scan”,进行配置项目名称,对项目的描述,以及最重要的目标IP地址。4.如果我们有目标…

Prometheus监控规则推荐网站

Prometheus监控规则推荐网站🔰Prometheus监控规则推荐网站: https://samber.github.io/awesome-prometheus-alerts/

学习vue3——element插槽

input 带有前缀图标1 <el-input 2 class="inputClass" 3 v-model="form.name" 4 ref="name" 5 placeholder="请输入用户名" 6 clearable 7 > 8 …

[ARC183D] Keep Perfectly Matched

树的重心,匹配My Blogs [ARC183D] Keep Perfectly Matched 这场不打感觉亏麻了,怎么大家都不会 D。首先匹配路径长度之和最大,很典的想到取重心,猜测答案上界 \(\sum_i dep_i\) 可以取到。 取完重心之后,希望不断把两个不同的子树里的点进行匹配,直到删空。因为原树本身存…

触想强固型工业显示器加速海上油气勘探开发

石油作为现代工业发展的主要能源,已成为国际间政治、经济博弈的重要工具。一、行业发展背景过去百年间,人类对陆地油气资源的勘探开发逐渐趋于饱和,而面对持续增长的全球能源需求,海洋勘探已成为当今油气能源角逐的主要“战场”,进一步催生出对先进的自动化海上钻井系统的…

Win11减少C盘占用及清爽系统配置教程

Win11减少C盘占用及清爽系统配置教程你是否有过C盘爆满而不得不重装系统的经历?你是否有过因为C盘爆满而不得不不断的拓展空间的无奈?你是否有过已经将软件安装在D盘但C盘的空间还是在日益变满的痛苦?好消息好消息!!!今天你看到了这篇文章从此就可以最大程度的告别C盘爆满…

浏览器启动首页被360篡改

可能原因: (一)浏览器快捷方式被篡改 (二)浏览器启动程序的启动行为被360监听,执行启动浏览器过程中被360进行篡改 解决方案一(edge为例):查找edge浏览器的安装路径: 右击edge浏览器-> 属性-> 快捷方式-> 起始位置删除桌面的edge快捷图标将edge安装路径的 ms…