学习kubernetes之安全机制流程一篇就够!!!

一.kubernetes的安全框架

管理kubernetes的有kubectl、api、UI界面
如下是k8s的安全框架图
在这里插入图片描述

安全认证流程:kubectl请求api资源,然后通过三层安全机制。

第一层是认证(Authentication),验证身份、用户名和密码或者token;

第二层是授权(Authorization)角色绑定(RBAC),以获得权限;

第三层是准入控制(Admission Control,资源使用限定)。

请求只有通过这三层安全机制,才会被k8s响应请求,创建资源。
  • k8s的安全控制框架主要由以上3个阶段进行控制,每一个阶段都支持插件方式,通过APIServer配置来启用插件方式,通过APiserver配置来启用插件。
  • 普通用户想要安全的访问集群APIServer,往往需要证书、token或者是用户名+密码
  • pod访问需要ServiceAccount
[root@master01 demo]# kubectl get serviceaccount
NAME      SECRETS   AGE
default   1         5d23h

apiserver内部使用8080端口,默认8080端口监听本地,通过master以及其他组件连接使用

[root@master01 demo]# netstat -napt | grep LISTEN | grep 8080
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      67360/kube-apiserve

apiserver外部使用6443端口

[root@master01 demo]# netstat -napt | grep LISTEN | grep 6443
tcp        0      0 192.168.158.10:6443     0.0.0.0:*               LISTEN      67360/kube-apiserve 

二.Authentication,认证

认证有三种客户端身份认证
HTTPS 证书认证:基于CA证书签名的数字证书认证
HTTP Token认证:通过一个Token来识别用户(生产环境中使用广泛)
HTTP Base认证:用户名+密码的方式认证

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

CA认证如下

[root@master01 demo]#  cat /root/k8s/k8s-cert/server-csr.json 
{
   
    "CN": "kubernetes",
    "hosts": [
      "10.0.0.1",
      "127.0.0.1",
      "192.168.158.10",
      "192.168.158.40",
      "192.168.158.100",
      "192.168.158.110",
      "192.168.158.120",
      "kubernetes",
      "kubernetes.default",
      "kubernetes.default.svc",
      "kubernetes.default.svc.cluster",
      "kubernetes.default.svc.cluster.local"
    ],
    "key": {
   
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
   
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}

HTTP Token认证,通过一个Token来识别用户(生产环境中使用广泛)

httpd的令牌认证如下

[root@master01 ~]# cat /opt/kubernetes/cfg/token.csv
2525e5219c98c6fd3747f969838a0456,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

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

三.Authorization,授权

RBAC(Role-Based Access Control,基于角色的访问控制),负责完成授权(Authorization)工作。
以下是授权模块的相关概念
user:身份验证期间提供的用户字符串;

user:身份验证期间提供的用户字符串;

group:已验证用户所属的组名列表;

extra:任意字符串键到字符串值得映射,由身份验证层提供;

API:指示请求是否针对API资源;

request path:到其他非资源端点得路径;

api request verb:api动作(get、list、create、update、patch、watch、proxy、redirect、delete和deletecollection)等,用于

资源请求。

http request verb:http动作(get、post和delete用于非资源请求);

resource:正在访问得资源的ID或者名称(仅仅用于资源请求),对于使用get、update、patch和delete谓词的资源请求,必须提供资源名称;

subresource:正在访问的资源(仅仅用于资源请求);

namespace:正在访问的子资源(仅用于资源请求);

api group:被访问的api组(仅用于资源请求),一个空字符串指定核心api组

由于RBAC是基于角色进行控制的,所以首先需要创建角色、然后创建绑定的资源、最后将角色与目标甚至api和请求等绑定。绑定api模式适用于二次开发。

四.admission contorl,准入控制

在这里插入图片描述

NamespaceLifecycle:命令空间回收

LimitRanger:配额管理

ServiceAccount:每个pod中导入方便访问apiserver

ResourceQuota:基于命名空间的高级配额管理

NodeRestriction:node加入到k8s群集中以最小的权限运行

以下是官方推荐的插件(用于1.11版本以上)

--enable-admission-plugins= \  NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds, ResourceQuota

五.基于授权机制创建新的用户

使用RBAC(基于角色的访问控制)授权,允许通过kubernetes API动态配置策略
在这里插入图片描述

主体:user(用户)、Group(用户组)、ServiceAccount(服务账号)

角色:Role(授权特定命名空间的访问权限)、ClusterRole(授权所有命名空间访问权限)

角色绑定:RoleBinding(将角色绑定到主体,即subject)、ClusterRoleBinding(将集群角色绑定到主体)

创建命名空间

[root@master01 ~]# kubectl create ns tom
namespace/tom created
[root@master01 ~]# kubectl get ns
NAME          STATUS   AGE
default       Active   5d23h
kube-public   Active   5d</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值