k8s~ServiceAccount_ClusterRole_ClusterRoleBinding

民工心事  金牌会员 | 2024-8-26 09:37:51 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 883|帖子 883|积分 2649

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:
  1. kind: ServiceAccount
  2. apiVersion: v1
  3. metadata:
  4.   name: apisix-test
  5.   namespace: default
复制代码
2 以及一个具有集群级查询和监听 Endpoints 资源权限的 ClusterRole:
  1. kind: ClusterRole
  2. apiVersion: rbac.authorization.k8s.io/v1
  3. metadata:
  4.   name: apisix-test
  5. rules:
  6. - apiGroups: [ "" ]
  7.   resources: [ endpoints ]
  8.   verbs: [ get,list,watch ]
复制代码
3 再将这个 ServiceAccount 和 ClusterRole 关联起来:
  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: ClusterRoleBinding
  3. metadata:
  4.   name: apisix-test
  5. roleRef:
  6.   apiGroup: rbac.authorization.k8s.io
  7.   kind: ClusterRole
  8.   name: apisix-test
  9. subjects:
  10.   - kind: ServiceAccount
  11.     name: apisix-test
  12.     namespace: default
复制代码
4 然后我们必要获取这个 ServiceAccount 的 token 值,假如 Kubernetes 是 v1.24 之前的版本,可以通过下面的方法获取 token 值:
  1. $ kubectl get secrets | grep apisix-test
  2. $ kubectl get secret apisix-test-token-879xv -o jsonpath={.data.token} | base64 -d
复制代码
5 Kubernetes 从 v1.24 版本开始,不能再通过 kubectl get secret 获取 token 了,必要使用 TokenRequest API 来获取,起首开启代理:
  1. $ kubectl proxy --port=8001
  2. Starting to serve on 127.0.0.1:8001
复制代码
6 然后调用 TokenRequest API 天生一个 token:
  1. $ curl 'http://127.0.0.1:8001/api/v1/namespaces/default/serviceaccounts/apisix-test/token' \
  2.   -H "Content-Type:application/json" -X POST -d '{}'
  3. {
  4.   "kind": "TokenRequest",
  5.   "apiVersion": "authentication.k8s.io/v1",
  6.   ...
  7.   "status": {
  8.     "token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImtLdHRyVzFmNTRHWGFVUjVRS3hrLVJMSElNaXM4aENLMnpfSGk1SUJhbVkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjc5NTMzMDQwLCJpYXQiOjE2Nzk1Mjk0NDAsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0Iiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImFwaXNpeC10ZXN0IiwidWlkIjoiMzVjZWJkYTEtNGZjNC00N2JlLWIxN2QtZDA4NWJlNzU5ODRlIn19LCJuYmYiOjE2Nzk1Mjk0NDAsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmFwaXNpeC10ZXN0In0.YexM_VoumpdwZNbSkwh6IbEu59PCtZrG1lkTnCqG24G-TC0U1sGxgbXf6AnUQ5ybh-CHWbJ7oewhkg_J4j7FiSAnV_yCcEygLkaCveGIQbWldB3phDlcJ52f8YDpHFtN2vdyVTm79ECwEInDsqKhn4n9tPY4pgTodI6D9j-lcK0ywUdbdlL5VHiOw9jlnS7b60fKWBwCPyW2uohX5X43gnUr3E1Wekgpo47vx8lahTZQqnORahTdl7bsPsu_apf7LMw40FLpspVO6wih-30Ke8CNBxjpORtX2n3oteE1fi2vxYHoyJSeh1Pro_Oykauch0InFUNyEVI4kJQ720glOw",
  9.     "expirationTimestamp": "2023-03-23T00:57:20Z"
  10.   }
  11. }
复制代码
7 默认的 token 有效期只有一个小时,可以通过参数改为一年:
  1. $ curl 'http://127.0.0.1:8001/api/v1/namespaces/default/serviceaccounts/apisix-test/token' \
  2.   -H "Content-Type:application/json" -X POST \
  3.   -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 字段 ):
  1. discovery:
  2.   kubernetes:
  3.     service:
  4.       schema: https
  5.       host: 127.0.0.1
  6.       port: "6443"
  7.     client:
  8.       token: ...
复制代码
这里有一个比较坑的地方,port 必须是字符串,否则会导致 APISIX 启动报错 invalid discovery kubernetes configuration: object matches none of the required
大功告成!
参考:https://www.aneasystone.com/archives/2023/03/apisix-service-discovery.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表