Kubernetes第十三曲 安全机制

本文深入探讨了Kubernetes的安全框架,包括认证(HTTPS证书、Token、HTTP Base)、授权(RBAC)和准入控制。通过Service Account详细解析了Pod的访问方式,并通过实例展示了如何创建命名空间、Role、RoleBinding以及使用RBAC进行权限控制。
摘要由CSDN通过智能技术生成


kubernetes的安全框架
传输安全,认证,授权,准入控制
使用RBAC授权

一、kubernetes安全框架

三层:认证,授权,绑定角色

第一关是认证(authentication),第二关是授权(authorization),第三关是准入控制(admission control)

1.1 、结构分析:

kubectl、API、UI ,是访问管理K8S的方式,api用于二次开发时调用,https协议,6443端口

在kubectl处提交需求,请求调用/api/v1、/apis、/healthz等,然后经过安全框架

安全框架有认证(authentication),验证身份,使用【用户名密码】或者【token令牌】验证

授权(authorization),绑定权限,授权过程,分配到指定空间中

准入控制(admission control),空间准入控制,可以使用下面哪些资源,调用哪些插件

使用插件前先与etcd去验证,查看etcd是否授权,若是允许,会执行,并将操作记录到etcd中
在这里插入图片描述

1.2 、工作流程:

kubectl 首先请求api资源,然后是过三关,第一关是认证(authentication),第二关是授权(authorization),第三关是准入控制(admission control),只有通过这三关才可能会被K8S创建资源

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

普通用户若要安全访问集群api server,往往需要证书、token或者用户名+密码验证;

pod访问,需要serivceaccount

第一步:对客户端访问进行认证操作,确认是否具有访问k8s权限
    token(共享秘钥)
    SSL(双向SSL认证)
通过任何一个认证即表示认证通过,进入下一步

第二步:授权检查,确认是否对资源具有相关的权限
    ABAC(基于属性的访问控制)
    RBAC(基于角色的访问控制)
    NODE(基于节点的访问控制)
    WEB HOOK(自定义HTTP回调方法的访问控制)

第三步:准入控制(对操作资源相关联的其他资源是否有权限操作)

1.2.1、Service Account详解

https://github.com/kubernetes/kubernetes/blob/release-1.0/examples/cassandra/java/src/io/k8s/cassandra/KubernetesSeedProvider.java#L101
Service Account  Kubernetes 用于集群内运行的程序,进行服务发现时调用 API 的帐号,帐号的 token 会直接挂载到 Pod 中,可以供程序直接使用。
Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。它与User account不同
  1.User account是为人设计的,而service account则是为Pod中的进程调用Kubernetes API而设计;
  2.User account是跨namespace的,而service account则是仅局限它所在的namespace;
  3.每个namespace都会自动创建一个default service account
  4.Token controller检测service account的创建,并为它们创建secret
  5.开启ServiceAccount Admission Controller后
       .每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定了其他ServiceAccout)
    .验证Pod引用的service account已经存在,否则拒绝创建
    .如果Pod没有指定ImagePullSecrets,则把service account的ImagePullSecrets加到Pod中
    .每个container启动后都会挂载该service account的token和ca.crt到/var/run/secrets/kubernetes.io/serviceaccount/
#apiserver使用的是token认证
[root@localhost demo]# ps aux | grep apiserver
...
--token-auth-file=/opt/kubernetes/cfg/token.csv 
...

#可以通过ServiceAccount在pod中去访问apiserver
[root@localhost demo]# kubectl get sa
NAME      SECRETS   AGE
default   1         22d
传输安全:告别8080,迎接6443

#默认8080监听本地(是通过master及其他组件连接使用)
[root@localhost demo]# netstat -natp | grep 8080 | grep LISTEN
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      831/kube-apiserver  

#对外提供服务端口是6443
[root@localhost demo]# netstat -natp | grep 6443 | grep LISTEN
tcp        0      0 192.168.221.70:6443    0.0.0.0:*               LISTEN      831/kube-apiserver  

二、第一模块:认证

三种客户端身份认证:

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

2.1、https证书认证

[root@localhost demo]# cat /root/k8s/k8s-cert/k8s-cert.sh 
{
   
    "CN": "kubernetes",
    "hosts": [
      "10.0.0.1",
      "127.0.0.1",
      "192.168.221.70",
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值