安全机制
1.Kubernetes的安全框架 2.传输安全,认证,授权,准入控制 3.使用RBAC授权
Kubernetes的安全框架
•访问K8S集群的资源需要过三关:认证、鉴权、准入控制 •普通用户若要安全访问集群API Server,往往需要证书、Token或者用户名+密码;Pod访问,需要ServiceAccount •K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件。 1.Authentication 2.Authorization 3.Admission Control # cat /opt/kubernetes/cfg/token.csv 0fb61c46f8991b718eb38d27b605b008,kubelet-bootstrap,10001,"system:kubelet-bootstrap" 注意:用户名+密码使用不多,一般都选择证书、Token
传输安全,认证
传输安全:告别8080,迎接6443(kube-apiserver) 认证 三种客户端身份认证: •HTTPS 证书认证:基于CA证书签名的数字证书认证 •HTTP Token认证:通过一个Token来识别用户 •HTTP Base认证:用户名+密码的方式认证
授权
RBAC(Role-Based Access Control,基于角色的访问控制):负责完成授权(Authorization)工作。
准入控制
AdminssionControl实际上是一个准入控制器插件列表,发送到APIServer的请求都需要经过这个列表中的每个准入控制器插件的检查,检查不通过,则拒绝请求。 1.11版本以上推荐使用的插件:--enable-admission-plugins= \NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds, ResourceQuota
使用RBAC授权
RBAC(Role-Based Access Control,基于角色的访问控制),允许通过Kubernetes API动态配置策略
• 角色 • Role:授权特定命名空间的访问权限 • ClusterRole:授权所有命名空间的访问权限 • 角色绑定 • RoleBinding:将角色绑定到主体(即subject) • ClusterRoleBinding:将集群角色绑定到主体 • 主体(subject) • User:用户 • Group:用户组 • ServiceAccount:服务账号 https://kubernetes.io/docs/reference/access-authn-authz/rbac/
官网示例:授权对Pod读取权限
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: default name: pod-reader rules: - apiGroups: [""] # "" indicates the core API group resources: ["pods"] verbs: ["get", "watch", "list"] # This role binding allows "jane" to read pods in the "default" namespace. kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: read-pods namespace: default subjects: - kind: User name: jane # Name is case sensitive apiGroup: rbac.authorization.k8s.io roleRef: kind: Role #this must be Role or ClusterRole name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to apiGroup: rbac.authorization.k8s.io