1 概述

  1. 访问集群的三个步骤

    1. 认证
    2. 鉴权/授权
    3. 准入控制
  2. 进行访问的时候,过程中都需要经过apiserver,apiserver做统一协调,比如门卫。

  3. 访问过程中需要证书、token、或者用户名 + 密码。如果访问pod需要serviceAccount。

2 认证:传输安全

传输安全:对外不暴露8080端口,只能内部方位,对外端口使用6443。

2.1 认证方式

客户端认证常用的方式:

  1. https证书认证,基于ca证书
  2. http token认证,通过token识别用户
  3. http基本认证,用户名+密码认证

3 鉴权(授权)

  1. 基于RBAC进行鉴权操作
  2. 基于角色访问控制

3.1 RBAC:基于角色的访问控制

3.1.1 角色

  • role:特定命名空间访问权限
  • ClusterRole:所有命名空间访问权限

3.1.2 角色绑定

  • roleBinding:角色绑定到主体
  • ClusterRoleBinding:集群角色绑定到主体

3.1.3 主体

  • user:用户
  • group:用户组
  • serviceAccount:服务账号

3.1.4 鉴权演示相关操作

  1. // 1 新建命名空间
  2. // 1.1 查看命名空间
  3. kubectl get ns
  4. kubectl create ns nstest
  5. // 2 新建pod
  6. // 2.1 新建命名空间下名为nginx的pod
  7. kubectl run nginx --image=nginx -n nstest
  8. // 2.2 查询命名空间下的pod
  9. kubectl get pods -n nstest
  10. // 3 创建角色
  11. // 3.1 创建rbac-role.yaml 如3.1.4.1
  12. // 3.2 执行yaml文件
  13. kubectl apply -f rbac-role.yaml
  14. // 3.3 查询角色
  15. kubectl get role -n nstest
  16. // 4 创建角色绑定
  17. // 4.1 创建rbac-rolebinding.yaml 如3.1.4.2
  18. // 4.2 执行yaml文件
  19. kubectl apply -f rbac-rolebinding.yaml
  20. // 4.3 查询角色绑定
  21. kubectl get rolebinding -n nstest
  22. // 5 使用证书识别身份(在二进制中进行演示比较方便)
  23. // 5.1 创建证书(TODO)
  24. mkdir mary
  25. cd mary
  26. ...
  27. // 5.2 在新的用户中查询pod
  28. kubectl get pods -n nstest

3.1.4.1 rbac-role.yaml

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: Role
  3. metadata:
  4. namespace: nstest
  5. name: pod-reader
  6. rules:
  7. - apiGroups: [""]
  8. resources: ["pods"]
  9. verbs: ["get", "watch", "list"]

3.1.4.2 rbac-rolebinding.yaml

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: RoleBinding
  3. metadata:
  4. namespace: nstest
  5. name: read-pods
  6. subjects:
  7. - kind: User
  8. name: mary
  9. apiGroup: rbac.authorization.k8s.io
  10. roleRef:
  11. - kind: Role
  12. name: pod-reader
  13. apiGroup: rbac.authorization.k8s.io

4 准入控制

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