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中

相关推荐
泡沫冰@8 分钟前
K8S集群管理(3)
云原生·容器·kubernetes
麦兜*1 小时前
MongoDB 常见错误解决方案:从连接失败到主从同步问题
java·数据库·spring boot·redis·mongodb·容器
LQ深蹲不写BUG2 小时前
微服务事务管理利器:Seata 核心原理与实践指南
微服务·云原生·架构
nathan05293 小时前
Kubernetes 实战练习指南
云原生·容器·kubernetes
無名之輩3 小时前
Nvidia Device Plugin入门二之envvar策略
kubernetes
云和数据.ChenGuang5 小时前
微服务技术栈
微服务·云原生·架构
syty20205 小时前
K8s是什么
容器·kubernetes·dubbo
江团1io06 小时前
微服务雪崩问题与系统性防御方案
微服务·云原生·架构
Evan Wang7 小时前
使用Terraform管理阿里云基础设施
阿里云·云原生·terraform
向上的车轮8 小时前
基于go语言的云原生TodoList Demo 项目,验证云原生核心特性
开发语言·云原生·golang