十一、k8s安全机制

发布于:2025-02-27 ⋅ 阅读:(14) ⋅ 点赞:(0)

k8s作为一个分布式的微服务管理系统,保证集群安全是一个非常重要的任务,

核心-----------api-server

我们围绕集群权限的设置,其实就是设置api-server权限。

围绕api-server的权限机制,分为三个步骤:

1、认证-----------server-account

1)、token,api-server私钥签名的字符串列号,用于访问api-server,server端的认证

2)、ca.crt:ca根证书,用于客户端验证api-server发送的证书

3)、namespace:api-server办法的token来使用指定的命名空间。

认证只是确认双方的通信是可信的,在此基础之上建立通信的连接。

2、鉴权

确定请求方对集群的资源的权限。

RBAC:基于角色的访问控制

k8s1.6之后,默认的鉴权方式

对集群中的资源(pod,deployment,service)和非资源(元信息和资源状态)都可以进行完整的覆盖,权限在运行的时候调整,无需重启api-server。

鉴权的主体:

(1)角色:

ROLE:授权指定命名空间的资源控制权限

ClusterRole:可以对所有命名空间的资源的控制权

(2)角色绑定:

RoleBinding:把角色绑定到主体(命名空间)

ClusterRoleBinding:将集群角色绑定到主体(所有命名空间)

(3)主体的对象:

user:用户

group 用户组
serviceAccount:服务账号
namespace 命名空间


3、准入控制

每一个对于api-server的请求都会有一个准入控制器插件的列表,发送到api-server的请求经过准入控制器插件的检查,检查不通过,请求会被拒绝

官方自带请求控制器:

LimitRanger

resourceQuota

namespaceLifecycle:命名空间的回收机制

创建一个用户,访问指定的命名空间,权限的设置和修改

操作步骤

创建用户,指定密码

设置证书   把三个证书放到这个目录下

给证书权限

创建用户认证的证书

给证书签发密钥

认证

鉴权

k8s重点

1、组件功能api-server

kube-controlllmer-manger 控制器

kube-scheduler 调度器

etcd k8s的数据库,只有api-server可以读写

kube-proxy 节点组件,网络代理,又来自动发现部署的服务(pod),以及把流量分发到指定的pod

网络插件-cni

flannel

calico

kubelet:节点管理器

2、kubectl 常用的命令

kubectl get namespace ns 创建命名空间

kubectl create deployment

kubectl run ----创建pod

rollout history回滚

3、service的类型:

clusterip 默认类型--只能在内部使用,集群内部使用

NodePort  30000-32767

loadBalancer  ----内网可以直接访问

loadBalancer

externalName

ingress-----可以处理url请求,对域名可以访问

4、控制器的类型:

deployment

daemonset

statfulset

job

cronjob

5、pod的状态和探针*

启动探针

存活探针

就绪探针

exec

topsocket

httpGet

pending的状态该如何解决?

cacshloopback

pod的重启策略

镜像的拉取策略

6、调度:

亲和性和反亲和性

node有亲和性

pod有亲和和反亲和

污点,容忍

7、配置管理:

secret

configmap*-------如何把配置文件传给pod。configmap的热更新

8、HPA:自动扩缩容

对pod的数量自动增减

一定要有资源限制

limit:

cpu:

menory:

9、数据卷:

emptyDir{}:pod内容器的共享数据

hostPath:pod所在的节点生成一个挂载,每个pod的数据卷是独立的

nfs:所有的pod共享一个目录使用的数据是一致的

pv和pvc:发起一个pvc的请求,使用pv的挂载资源

动态和静态

10、权限控制:

11、普罗米修斯监控