1.Kubernetes的安全框架

  • 访问K8S集群的资源需要过三关:认证、鉴权、准入控制

  • 普通用户若要安全访问集群API Server,往往需要证书、Token或者用户名+密码;Pod访问,需要ServiceAccount

  • K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件。

访问API资源要经过以下三关才可以:

  1. Authentication(鉴权)

  2. Authorization(授权)

  3. Admission Control(准入控制)

2.传输安全,认证,授权,准入控制

传输安全:

  • 告别8080,迎接6443(http://172.16.1.70:6443/)
    Client sent an HTTP request to an HTTPS server.

  • 全面基于HTTPS通信

鉴权:三种客户端身份认证:

  • HTTPS 证书认证:基于CA证书签名的数字证书认证

    [root@k8s-admin ~]# ls /etc/kubernetes/pki/
    [root@k8s-admin ~]# ls -l /root/.kube/config
    -rw------- 1 root root 5451 Apr 24 18:40 /root/.kube/config

  • HTTP Token认证:通过一个Token来识别用户

  • HTTP Base认证:用户名+密码的方式认证

授权:

RBAC(Role-Based Access Control,基于角色的访问控制):负责完成授权(Authorization)工作。

根据API请求属性,决定允许还是拒绝。

准入控制:

Adminssion Control实际上是一个准入控制器插件列表,发送到API Server的请求都需要经过这个列表中的每个准入控制器插件的检查,检查不通过,则拒绝请求。

3.使用RBAC授权

RBAC(Role-Based Access Control,基于角色的访问控制),允许通过Kubernetes API动态配置策略。

角色

  • Role:授权特定命名空间的访问权限

  • ClusterRole:授权所有命名空间的访问权限

角色绑定

  • RoleBinding:将角色绑定到主体(即subject)

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

主体(subject)

  • User:用户

  • Group:用户组

  • ServiceAccount:服务账号

示例:为aliang用户授权default命名空间Pod读取权限

1、用K8S CA签发客户端证书

  1. # tar -xzf cfssl.tar.gz
    # cp -a cfssl/* /usr/bin/


    # cat cert.sh
  2. cat > ca-config.json <<EOF
  3. {
  4.   "signing": {
  5.     "default": {
  6.       "expiry": "87600h"
  7.     },
  8.     "profiles": {
  9.       "kubernetes": {
  10.         "usages": [
  11.             "signing",
  12.             "key encipherment",
  13.             "server auth",
  14.             "client auth"
  15.         ],
  16.         "expiry": "87600h"
  17.       }
  18.     }
  19.   }
  20. }
  21. EOF
  22. cat > lc-csr.json <<EOF
  23. {
  24.   "CN": "lc",
  25.   "hosts": [],
  26.   "key": {
  27.     "algo": "rsa",
  28.     "size": 2048
  29.   },
  30.   "names": [
  31.     {
  32.       "C": "CN",
  33.       "ST": "BeiJing",
  34.       "L": "BeiJing",
  35.       "O": "k8s",
  36.       "OU": "System"
  37.     }
  38.   ]
  39. }
  40. EOF
  41. cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-config.json -profile=kubernetes lc-csr.json | cfssljson -bare lc
  42.  

  43. # sh cert.sh
    生成如下文件
    ca-config.json lc.csr lc-csr.json lc-key.pem lc.pem

2、生成kubeconfig授权文件

  1. # cat config.sh
  2. kubectl config set-cluster kubernetes \
  3.   --certificate-authority=/etc/kubernetes/pki/ca.crt \
  4.   --embed-certs=true \
  5.   --server=https://172.16.1.70:6443 \
  6.   --kubeconfig=lc.kubeconfig
  7. # 设置客户端认证
  8. kubectl config set-credentials lc \
  9.   --client-key=lc-key.pem \
  10.   --client-certificate=lc.pem \
  11.   --embed-certs=true \
  12.   --kubeconfig=lc.kubeconfig
  13. # 设置默认上下文
  14. kubectl config set-context kubernetes \
  15.   --cluster=kubernetes \
  16.   --user=lc \
  17.   --kubeconfig=lc.kubeconfig
  18. # 设置当前使用配置
  19. kubectl config use-context kubernetes --kubeconfig=lc.kubeconfig
  20. # sh config.sh
  21. 会生成 lc.kubeconfig 文件
  22.  

3、创建RBAC权限策略

  1. # cat rbac.yaml
  2. ---
  3. # 创建角色(权限集合)
  4. kind: Role
  5. apiVersion: rbac.authorization.k8s.io/v1
  6. metadata:
  7.   namespace: default
  8.   name: pod-reader
  9. rules:
  10. - apiGroups: [""]
  11.   resources: ["pods"]
  12.   verbs: ["get", "watch", "list"]
  13. ---
  14. # 将lc用户绑定到角色
  15. kind: RoleBinding
  16. apiVersion: rbac.authorization.k8s.io/v1
  17. metadata:
  18.   name: read-pods
  19.   namespace: default
  20. subjects:
  21. - kind: User
  22.   name: lc
  23.   apiGroup: rbac.authorization.k8s.io
  24. roleRef:
  25.   kind: Role
  26.   name: pod-reader
  27.   apiGroup: rbac.authorization.k8s.io
  28. # kubectl apply -f rbac.yaml
  29. # 具体的角色权限可以参考官网rbac相关文档:https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/
  30.  

4、测试

  1. # kubectl get Role
    NAME         AGE
    pod-reader   7m46s

    # kubectl get RoleBinding
    NAME       AGE
    read-pods   7m49s

    # kubectl --kubeconfig=lc.kubeconfig get pods
    NAME                     READY   STATUS   RESTARTS   AGE
    nginx-86c57db685-rrhzp   1/1     Running   1         28d

    # kubectl --kubeconfig=lc.kubeconfig get pods -n kube-system
    Error from server (Forbidden): pods is forbidden: User "lc" cannot list resource "pods" in API group "" in the namespace "kube-system"
    # lc用户只有访问default命名空间Pod读取权限。

第13章:Kubernetes 鉴权框架与用户权限分配的更多相关文章

  1. 2_MVC+EF+Autofac(dbfirst)轻型项目框架_用户权限验证

    前言 接上面两篇 0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架 与 1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例) .在第一篇中介 ...

  2. 基于Springboot集成security、oauth2实现认证鉴权、资源管理

    1.Oauth2简介 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAu ...

  3. Mongodb 认证鉴权那点事

    [TOC] 一.Mongodb 的权限管理 认识权限管理,说明主要概念及关系 与大多数数据库一样,Mongodb同样提供了一套权限管理机制. 为了体验Mongodb 的权限管理,我们找一台已经安装好的 ...

  4. iOS进阶之UDP代理鉴权过程

    上一篇介绍的是TCP代理的鉴权过程,这篇将介绍UDP代理的大致鉴权过程. 在UDP鉴权过程中,有几点是需要注意的.首先,UDP是一种无连接协议,不需要连接,使用广播的方式:其次,为了通过鉴权,所以需要 ...

  5. JWT对SpringCloud进行系统认证和服务鉴权

    JWT对SpringCloud进行系统认证和服务鉴权 一.为什么要使用jwt?在微服务架构下的服务基本都是无状态的,传统的使用session的方式不再适用,如果使用的话需要做同步session机制,所 ...

  6. 「快学springboot」集成Spring Security实现鉴权功能

    Spring Security介绍 Spring Security是Spring全家桶中的处理身份和权限问题的一员.Spring Security可以根据使用者的需要定制相关的角色身份和身份所具有的权 ...

  7. 【Gin-API系列】Gin中间件之鉴权访问(五)

    在完成中间件的介绍和日志中间件的代码后,我们的程序已经基本能正常跑通了,但如果要上生产,还少了一些必要的功能,例如鉴权.异常捕捉等.本章我们介绍如何编写鉴权中间件. 鉴权访问,说白了就是给用户的请求增 ...

  8. 使用SpringSecurity Oauth2.0实现自定义鉴权中心

    Oauth2.0是什么不在赘述,本文主要介绍如何使用SpringSecurity Oauth2.0实现自定义的用户校验 1.鉴权中心服务 首先,列举一下我们需要用到的依赖,本文采用的是数据库保存用户信 ...

  9. 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...

随机推荐

  1. ES6中函数参数默认值问题

    参数默认值 // 以前的参数默认值写法 let fn = (a, b) => { a = typeof a === "undefined" ? 10 : a b = type ...

  2. deep

    deepinv20已经解决 sudo apt update && sudo apt upgrade

  3. echo -n -e "请输入重启间隔的时间(分钟):\t"

    echo -n -e "请输入重启间隔的时间(分钟):\t"read interval##echo -n "Your choice is " # 加上 -n 可 ...

  4. linux中级之HAProxy基础配置

    一.haproxy简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的.借助HAProxy可以快速并且可靠的提供基于T ...

  5. mybatis 同时使用 XML 和注解

    引言 学过 MyBatis 框架的童靴都知道, MyBatis 支持 XML 和注解两种方式配置,如下: 使用 XML 方式配置 只写明 XML 的 resource 路径(或者URL路径) < ...

  6. VMware vCenter Server 7.0 U2b/6.7 U3n/6.5 U3p,修复 vSphere Client 高危安全漏洞

    vSphere Client(HTML5)中的多个漏洞已秘密报告给 VMware.这里提供了更新和解决方法来解决受影响的 VMware 产品中的这些漏洞. 详见:VMSA-2021-0010 威胁描述 ...

  7. 在Visual Studio 中使用git——分支管理-下(九)

    在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...

  8. 定位服务API案例

    定位服务API案例 要使用定位服务API,需要确保设备已经下载并安装了HMS Core服务组件,并将Location Kit的SDK集成到项目中. 指定应用权限 Android提供了两种位置权限: A ...

  9. Druid数据库连接池基本使用

    一.导入Druid的jar包和数据库驱动jar包 二.定义配置文件 与c3p0不同,Druid的配置文件是properties形式的.而且Druid不像c3p0那样可以自动加载配置文件,Druid需要 ...

  10. AgileConfig轻量级配置中心1.3.0发布,支持多用户权限控制

    AgileConfig 当初是设计给我自己用的一个工具,所以只设置了一道管理员密码,没有用户的概念.但是很多同学在使用过后都提出了需要多用户支持的建议.整个团队或者整个公司都使用同一个密码来管理非常的 ...