11、Kubernetes集群安全机制

一、概述

当我们访问K8S集群时,需要经过三个步骤完成具体操作

  • 认证
  • 鉴权【授权】
  • 准入控制

进行访问的时候,都需要经过 apiserver, apiserver做统一协调,比如门卫

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

在这里插入图片描述

1.1 认证

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

客户端身份认证常用方式

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

1.2 鉴权

基于RBAC进行鉴权操作

基于角色访问控制

1.3 准入控制

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

二、RBAC介绍

基于角色的访问控制,为某个角色设置访问内容,然后用户分配该角色后,就拥有该角色的访问权限
在这里插入图片描述

k8s中有默认的几个角色

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

角色绑定

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

主体

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

三、RBAC实现鉴权

3.1 创建命名空间

首先查看已经存在的命名空间

[root@k8s-master ~]$ kubectl get namespace

创建一个自己的命名空间 roledemo

[root@k8s-master ~]$ kubectl create ns roledemo

3.2 命名空间创建Pod

为什么要创建命名空间?因为如果不创建命名空间的话,默认是在default下

[root@k8s-master ~]$ kubectl run nginx --image=nginx -n roledemo

3.3 创建角色

通过 rbac-role.yaml进行创建

[root@k8s-master ~]$ cat > rbac-role.yaml << EOF
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: roledemo
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"] #这个角色只对pod 有 get、list权限
EOF

通过 yaml创建role

# 创建
[root@k8s-master ~]$ kubectl apply -f rbac-role.yaml

# 查看
[root@k8s-master ~]$ kubectl get role -n roledemo

3.4 创建角色绑定

通过 role-rolebinding.yaml 的方式,来创建角色绑定

[root@k8s-master ~]$ cat > role-rolebinding.yaml << EOF
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-pods
  namespace: roledemo
subjects:
- kind: User
  name: mary # 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
EOF

创建角色绑定

# 创建角色绑定
[root@k8s-master ~]$  kubectl apply -f rbac-rolebinding.yaml

# 查看角色绑定
[root@k8s-master ~]$  kubectl get role,rolebinding -n roledemo

3.5 使用证书识别身份

[root@k8s-master ~]$ vim rbac-user.sh
cat > mary-csr.json <<EOF
{
  "CN": "mary",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes mary-csr.json | cfssljson -bare mary 

kubectl config set-cluster kubernetes \
  --certificate-authority=ca.pem \
  --embed-certs=true \
  --server=https://192.168.88.10:6443 \
  --kubeconfig=mary-kubeconfig
  
kubectl config set-credentials mary \
  --client-key=mary-key.pem \
  --client-certificate=mary.pem \
  --embed-certs=true \
  --kubeconfig=mary-kubeconfig

kubectl config set-context default \
  --cluster=kubernetes \
  --user=mary \
  --kubeconfig=mary-kubeconfig

kubectl config use-context default --kubeconfig=mary-kubeconfig

这里包含了很多证书文件,在TSL目录下,需要复制过来

通过下面命令执行我们的脚本

[root@k8s-master ~]$ chmod +x rbac-user.sh && ./rbac-user.sh

测试

# 用get命令查看 pod 【有权限】
[root@k8s-master ~]$ kubectl get pods -n roledemo

# 用get命令查看svc 【没权限】
[root@k8s-master ~]$ kubectl get svc -n roledmeo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes集群中,API Server是控制平面中最重要的组件之一,它是所有组件的入口点,用于管理整个集群。API Server对外提供RESTful API接口,供客户端和其他组件访问和操作集群中的资源。因此,正确地配置API Server对于集群的稳定性和安全性至关重要。 下面是设置Kubernetes集群中API Server的一些步骤: 1. 选择API Server的认证方式:Kubernetes支持多种认证方式,包括基于Token的认证、基于证书的认证等。在设置API Server之前,需要确定所使用的认证方式,并进行相应的配置。 2. 配置API Server的访问控制:使用Kubernetes中的RBAC(Role-Based Access Control)机制来配置API Server的访问控制。可以通过RBAC配置不同用户或组的权限,确保只有授权的用户才能访问API Server。 3. 配置API Server的TLS证书:为API Server配置TLS证书,确保通信过程中的安全性。 4. 配置API Server的访问地址和端口:API Server的默认监听地址和端口为127.0.0.1:6443,如果需要改变API Server的监听地址和端口,可以通过命令行参数或配置文件进行配置。 5. 配置API Server的HA模式:当需要保证API Server的高可用性时,可以使用Kubernetes提供的HA模式,通过使用多个API Server来实现。 以上是设置Kubernetes集群中API Server的一些基本步骤,具体配置可以根据实际情况进行调整。建议使用Kubernetes提供的工具和文档进行配置,以确保正确性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值