1、概述:

(1)访问k8s集群的时候,需要经过三个步骤完成具体操作 

       第一步:认证操作

       第二步:鉴权(授权)

       第三步:准入控制

(2)进行访问时候,过程中都需要经过apiserver,apiserver做统一协调,比如门卫。

访问过程中需要证书、token、或者用户名+密码

如果访问Pod,需要serviceAccount

 

第一步认证 传输安全

*  传输安全: 对外不暴露8080端口,只能内部访问,对外使用端口6443

* 认证

客户端身份认证常用方式

  * https证书认证,基于ca证书

 * http token认证,  通过token识别用户

* http 基本认证,用户名+密码认证

第二步 鉴权(授权)

 * 基于RBAC进行鉴权操作

 * 基于角色的访问控制

第三步 准入控制

  * 就是准入控制器的列表,如果列表有请求内容通过,没有拒绝

2、 RBAC

基于角色的访问控制

* 角色

** role:特定命名空间访问权限

** ClusterRole:所有命名空间访问权限

*角色绑定

** roleBinding:角色绑定到主体

** ClusterRoleBinding:集群角色绑定到主体 

* 主体

user:用户

group:用户组

serviceAccount:服务账号

1、创建命名空间

kubectl create ns 命名空间名

2、在新创建的命名空间中创建一个Pod

kubectl run nginxNS --image=nginx -n nsdemo

3、创建角色

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: nsdemo
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

4、创建角色绑定

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-pods1
  namespace: nsdemo
subjects:
- kind: User
  name: mary
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role # this must be Role or ClusterRole
  name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io

部署的时候有问题:❓

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐