K8S之安全机制

安全机制

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动态配置策略

图片.png

• 角色
    • 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





猜你喜欢

转载自blog.51cto.com/dengaosky/2432407