蓝易云

k8s 创建 serviceAccount 并测试其权限

446次阅读
没有评论

共计 1700 个字符,预计需要花费 5 分钟才能阅读完成。

什么是 serviceAccount

顾名思义,相对于userAccount(比如:kubectl访问APIServer时用的就是userAccount),serviceAccount 就是 Pod 中的 Process 用于访问 Kubernetes API的 account,它为 Pod 中的进程提供了一种身份标识。相比于 userAccount 的全局性权限,serviceAccount 更适合一些轻量级的task,更聚焦于授权给某些特定Pod中的Process所使用。

serviceAccount 并不复杂,只是关联了一个 Secret 资源作为 token,该token也叫service-account-token。

任意一个 pod 如果在不指定 serviceAccount 的情况下,都是用的默认的 serviceAccount。相关内容在容器的 /run/secrets/kubernetes.io/serviceaccount 目录下。该目录下有三个文件:ca.crt,namespace,token。

  • ca.crt 用来验证 APIServer 的证书,因为证书都是自己生成的,所以需要创建集群 CA 证书进行验证。
  • namespace 是该 pod 所在命名空间。
  • token 是容器访问 APIServer 认证和授权所使用的内容,请求时放在 Authorization。

接下来创建 serviceAccount 并进行权限的测试。

serviceAccount 实战

1. 创建账号和角色

sa-pod-reader.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: pod-reader
  namespace: dev

---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-role
  namespace: dev
rules:
  - apiGroups: [""] # 支持的API组列表,""空字符串,表示核心API群
    resources: ["pods"] # 支持的资源对象列表
    verbs: ["get","watch","list"]

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: authorization-role-binding
  namespace: dev
subjects:
  - kind: ServiceAccount
    name: pod-reader
roleRef:
  kind: Role
  name: pod-role
  apiGroup: rbac.authorization.k8s.io
# 创建用户和角色
kubectl apply -f sa-pod-reader.yaml

创建一个 pod-reader 的角色并和账号 pod-reader 进行绑定,pod-reader 的权限仅限于 dev 命名空间下 pod 的查询。

2. 创建 pod-reader 的 token

在以前版本的 kubernetes 中,进行了创建 serviceaccount 会自动生成一个 Secret 里面存放 token 值,但是新版本不会这样做了。可以参考之前的文章 k8s 手动管理 ServiceAccount 的 Secret

pod-reader-token.yaml

apiVersion: v1
kind: Secret
metadata:
  name: pod-reader
  namespace: dev
  annotations:
    kubernetes.io/service-account.name: pod-reader
type: kubernetes.io/service-account-token
# 创建 secret
kubectl apply -f pod-reader-token.yaml

3. 测试权限

kubectl describe secret pod-reader -n dev

获取到 token 以后,使用 postman 进行测试。

设置 token。

k8s 创建 serviceAccount 并测试其权限

3.1 获取 dev 下的 pod

k8s 创建 serviceAccount 并测试其权限

可以看见能够进行获取。

3.2 获取 default 下的 pod

k8s 创建 serviceAccount 并测试其权限

提示没有权限,至此,测试完毕。

提醒:本文发布于690天前,文中所关联的信息可能已发生改变,请知悉!

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 0
阿蛮君
版权声明:本站原创文章,由 阿蛮君 于2023-01-01发表,共计1700字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Copyright © 2022-2024 阿蛮君博客 湘ICP备2023001393号
本网站由 亿信互联 提供云计算服务 | 蓝易云CDN 提供安全防护和加速服务
Powered by Wordpress  Theme by Puock