k8s基于rbac权限管理serviceAccount授权管理

测试通过http访问apiServer

curl没有证书不能通过https来访问apiServer需要使用kubectl代理

bash 复制代码
#使用kubectl代理
kubectl proxy --port=8111&
#curl访问 api/v1 是资源所属群组/版本 即创建资源时定义的apiVersion
#后边跟的是要访问的资源
#查看所有命名空间
#查看核心资源用api 其他都用apis/apps
curl http://localhost:8111/api/v1/namespaces
#查看kube-system命名空间下的所有deployments
curl http://localhost:8111/apis/apps/v1/namespaces/kube-system/deployments
#查看具体deployment
curl http://localhost:8111/apis/apps/v1/namespaces/kube-system/deployments/coredns

k8s认证授权分两类

一类是集群外访问apiServer 例如:cubectl客户端等 使用token,证书等进行认证

一类是集群内部资源的认证授权例如对pod,svc等资源 使用serviceAccount认证

每个pod在创建时 都会有个默认的认证信息 例如:

bash 复制代码
Volumes:
  kube-api-access-gm7dh:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true

k8s 默认使用serviceAccount管理权限

serviceAccount本身不对权限管理 只是创建个账号 进行认证

授权是rbac来管理

bash 复制代码
#创建serviceAccount 加上参数 -o yaml --dry-run 不会执行操作 而是会返回个yaml文件 我们可以在这个文件基础上进行修改方便编辑yaml文件
kubectl create serviceaccount sacc -o yaml --dry-run
# 

创建serviceAccount

bash 复制代码
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  namespace: default
bash 复制代码
#查看
kubectl get sa

对应pod

bash 复制代码
apiVersion: v1
kind: Pod
metadata:
 name: sa-nginx-pod
 namespace: default
spec:
 containers:
 - name: nginx-containers
   image: docker.io/library/nginx
 serviceAccountName: ssa-test

查看 kubectl 配置

bash 复制代码
#查看kubectl 配置 包括连接的集群 账号等
kubectl config view

rbac授权方式

bash 复制代码
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cluster-role-test
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cluster-role-binding-test
subjects: #sa对象绑定到角色
  - kind: ServiceAccount
    name: ssa-test #sa对象
    namespace: default
roleRef:
  kind: ClusterRole
  name: cluster-role-test #角色
  apiGroup: rbac.authorization.k8s.io

ClusterRole与Role区别 :

ClusterRole不限制namespace

Role:只能限制在一个namespace中

相关推荐
分布式存储与RustFS1 小时前
OpenSearch 的索引快照别只留本地:用 repository-s3 存进 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
瑞克-桑切斯2 小时前
docker Harbor 单机部署手册
大数据·运维·elasticsearch·docker·容器
wzq11_6663 小时前
Kubernetes集群——存储管理
云原生·容器·kubernetes
孔令飞3 小时前
企业智能化升级:智能体平台设计和实现
云原生·go·ai编程
分布式存储与RustFS19 小时前
镜像仓库的层别堆本地盘:用 RustFS 给 Docker Registry 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
闲云自留地1 天前
K8s 的记忆大脑!ETCD 集群部署、etcdctl 命令与备份恢复全通关
容器·kubernetes·etcd
weirong1 天前
Operator 上生产前补的 6 件事,和 5 件我明确不做的
kubernetes
孙克旭_1 天前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
孙克旭_1 天前
云原生基础之Containerd容器运行时
运维·云原生
分布式存储与RustFS1 天前
RustFS 自建对象存储实战目录:110 篇按场景分类(持续更新)
运维·云原生·开源·对象存储·分布式存储·s3·性能基准