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、普罗米修斯监控