Kubernetes 集群安全机制

Kubernetes 集群安全机制

1.Api-server

Kubernetes api-server 安全访问机制

当我们访问 K8S 集群时,都需要经过 apiserver【 apiserver 做统一协调】,每个请求到达 apiserver 需要经过三个安全关卡:
① 认证
② 鉴权
③ 准入控制

  • 访问过程中,需要证书、token、或者用户名和密码
  • 如果访问 pod 需要 serviceAccount

1、认证
对外不暴露 8080 端口,只能内部访问,对外使用的端口 6443

客户端身份认证常用方式

  • https 证书认证,基于 ca 证书
  • http token 认证,通过 token 来识别用户
  • http 基本认证,用户名 + 密码认证

2、鉴权
基于 RBAC 进行鉴权操作

基于角色访问控制

3、准入控制
就是准入控制器的列表,如果列表有请求内容就通过,没有的话 就拒绝

2.TLS

Kubernetes 认证方式之客户端证书(TLS)

客户端证书(TLS)认证方式,也叫 HTTPS 双向认证。一般我们访问一个 https 网站,认证是单向的,只有客户端回验证服务端的身份,服务端不会管客户端身份如何

3.RBAC 介绍

Kubernetes 授权方式之 RBAC 基于角色的访问控制,为某个角色设置访问内容,然后用户分配该角色后,就拥有该角色的访问权限

k8s 中有默认的几个角色

  • role:特定命名空间访问权限
  • ClusterRole:所有命名空间的访问权限

角色绑定

  • roleBinding:角色绑定到主体
  • ClusterRoleBinding:集群角色绑定到主体

主体

  • user:用户
  • group:用户组
  • serviceAccount:服务账号

4.RBAC 鉴权

1、创建命名空间

1
2
3
4
# 查看已经存在的命名空间
kubectl get namespace
# 创建自己的命名空间
kubectl create ns webServer

2、命名空间内创建 Pod
如果不创建命名空间,Pod 默认在 default

1
kubectl run nginx --image=nginx -n webServer

3、创建角色

通过 rbac-role.yaml 进行创建
tips: 这个角色只对 pod 有 get 和 list 权限

1
2
3
4
5
6
7
8
9
10
11
cat > rbac-role.yaml << EOF
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: mytest
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]
EOF

通过 yaml 创建 role

1
2
3
4
# 创建
kubectl apply -f rbac-role.yaml
# 查看
kubectl get role -n mytest

4、创建角色绑定
通过 rbac-rolebinding.yaml 的方式,来创建我们的角色绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cat > rbac-rolebinding.yaml << EOF
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: mytest
name: read-pods
subjects:
- kind: User
name: lucy
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
EOF

kubectl apply -f rbac-rolebinding.yaml
kubectl get role,rolebinding -n mytest

# NAME CREATED AT
# role.rbac.authorization.k8s.io/pod-reader 2021-03-04T20:05:57Z
# NAME ROLE AGE
# rolebinding.rbac.authorization.k8s.io/read-pods Role/pod-reader 35s