Kubernetes(K8S) 集群安全机制

kubernetes,k8s,集群,安全,机制 · 浏览次数 : 45

小编点评

**访问K8s集群的步骤:** 1. **认证鉴权 (Authorization and Authentication):**通过 ApiServer 进行身份验证和授权。 2. **授权控制 (Authorization Control):**使用 RBAC 或角色绑定控制对 Kubernetes 集群进行访问控制。 3. **身份验证 (Identity Verification):**根据用户的身份和角色,使用证书、token 或用户名+密码等方式验证身份。 **RBAC 授权控制:** 1. 创建一个命名空间角色。 2. 创建角色绑定。 3. 创建角色授权。 **RBAC 角色绑定:** 1. 创建一个角色绑定文件。 2. 将角色绑定到主体角色。 **RBAC 角色授权:** 1. 创建一个 RBAC 角色。 2. 添加角色授权。 **身份验证:** 1. 从证书、token 或用户名+密码中获取身份验证信息。 2. 使用身份验证信息与 Kubernetes 集群中的认证服务器交互验证身份。 **步骤总结:** 1. 创建一个命名空间角色。 2. 创建角色绑定。 3. 创建角色授权。 4. 创建 RBAC 角色。 5. 为角色绑定授权。 6. 创建 RBAC 角色绑定文件。 7. 将角色绑定到主体角色。 8. 创建 RBAC 角色授权。 9. 从证书、token 或用户名+密码中获取身份验证信息。 10. 使用身份验证信息与 Kubernetes 集群中的认证服务器交互验证身份。

正文

概述

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

  1. 认证
  2. 鉴权(授权)
  3. 准入控制

进行访问时,过程中需要经过 ApiServer,做统一协调,比如门卫,访问过程中需要证书、token、或者用户名+密码,如果访问pod需要 ServiceAccount
image

认证

传输安全:对外不暴露8080端口,只能内部访问,对外使用端口 6443
认证:客户端身份认证常用方法,

  • https:证书认证,基于CA证书;
  • http: token 认证,通过 token 识别用户(Node加入 master),基本认证(用户名+密码)

鉴权(授权)

基于RBAC进行鉴权操作
基于角色访问控制

准入控制

是一个准入控制器列表,如果列表中有就通过,没有不让通过

RBAC

基于角色的访问控制
image
角色

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

角色绑定

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

主体

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

RBAC 实现

rbac-role.yaml
image
rbac-bolebinding.yaml
image

# 创建命名空间
[root@k8smaster ~]# kubectl create ns roledemo
# 创建pod
[root@k8smaster ~]# kubectl run nginx --image=nginx -n roledemo

[root@k8smaster ~]# vi rbac-role.yaml
# 创建 rbac-role.yaml,内容见上图
[root@k8smaster ~]# kubectl apply -f rbac-role.yaml
# 查看角色
[root@k8smaster ~]# kubectl get role -n roledemo
# 创建角色绑定 rbac-rolebinding.yaml
[root@k8smaster ~]# vi rbac-rolebinding.yaml
# 创建 rbac-rolebinding.yaml
[root@k8smaster ~]# kubectl apply -f rbac-rolebinding.yaml
# 查看角色
[root@k8smaster ~]# kubectl get role,rolebinding -n roledemo
使用证书识别身份

image
image

rabc-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.31.63: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


[root@k8smaster ~]# mkdir mary
[root@k8smaster ~]# cd mary
# 详细内容见上文
[root@k8smaster mary]# vi rabc-user.sh
# 将证书复制到 mary 目录中,具体文件(私聊)
[root@k8smaster mary]# cp ./k8s/ca* ./
[root@k8smaster mary]# ls
ca-config.json ca.scr ca-csr.json ca-key.pem ca.pem rabc-user.sh
# 会多出一些 myar* 证书
[root@k8smaster mary]# bash rabc-user.sh
# 查看 mary-kubeconfig
[root@k8smaster mary]# bash mary-kubeconfig
# 查看 pod
[root@k8smaster mary]# kubectl get pods -n roledemo

image

与Kubernetes(K8S) 集群安全机制相似的内容:

Kubernetes(K8S) 集群安全机制

概述 访问K8S集群,需要经过三个步骤完成具体操作 认证 鉴权(授权) 准入控制 进行访问时,过程中需要经过 ApiServer,做统一协调,比如门卫,访问过程中需要证书、token、或者用户名+密码,如果访问pod需要 ServiceAccount 认证 传输安全:对外不暴露8080端口,只能内部

使用containerd从0搭建k8s(kubernetes)集群

## 准备环境 准备两台服务器节点,如果需要安装虚拟机,可以参考[《wmware和centos安装过程》](https://blog.csdn.net/huashetianzu/article/details/109510266) | 机器名 | IP | 角色 | CPU | 内存 | | : :

使用 Helm 管理应用的一些 Tips

背景 Helm 是一个 Kubernetes 的包管理工具,有点类似于 Mac 上的 brew,Python 中的 PIP;可以很方便的帮我们直接在 kubernetes 中安装某个应用。 比如我们可以直接使用以下命令方便的在 k8s 集群安装和卸载 MySQL: helm install my-s

DevSecOps 需要知道的十大 K8s 安全风险及建议

Kubernetes (K8s)是现代云原生世界中的容器管理平台。它实现了灵活、可扩展地开发、部署和管理微服务。K8s 能够与各种云提供商、容器运行时接口、身份验证提供商和可扩展集成点一起工作。然而 K8s 的集成方法可以在任何基础设施上运行任何容器化应用程序,这使得围绕 K8s 和其上的应用程序堆

K8S 性能优化 - 大型集群 CIDR 配置

前言 K8S 性能优化系列文章,本文为第三篇:Kubernetes 大型集群 CIDR 配置最佳实践。 系列文章: 《K8S 性能优化 - OS sysctl 调优》 《K8S 性能优化 - K8S APIServer 调优》 CIDR 配置 在安装大型集群或将现有的集群扩展到较大规模时,在安装集群

k8s安装prometheus

##### 安装 在目标集群上,执行如下命令: ```shell kubectl apply -f https://github.com/512team/dhorse/raw/main/conf/kubernetes-prometheus.yml ``` ##### 使用 1.在浏览器访问地址:ht

Kubernetes(K8S) Node NotReady 节点资源不足 Pod无法运行

k8s 线上集群中 Node 节点状态变成 NotReady 状态,导致整个 Node 节点中容器停止服务。 一个 Node 节点中是可以运行多个 Pod 容器,每个 Pod 容器可以运行多个实例 App 容器。Node 节点不可用,就会直接导致 Node 节点中所有的容器不可用,Node 节点是否

Kubernetes(K8S) 监控 Prometheus + Grafana

监控指标 集群监控 节点资源利用率 节点数 运行Pods Pod 监控 容器指标 应用程序 Prometheus 开源的 监控、报警、数据库 以HTTP协议周期性抓取被监控组件状态 不需要复杂的集成过程,使用http接口接入就可以了 Grafana 开源的数据分析和可视化工具 支持多种数据源 Yam

如何在 K8S 集群范围使用 imagePullSecret?

在这篇文章中,我将向你展示如何在 Kubernetes 中使用 imagePullSecrets。

Kubernetes(K8S) 介绍

Master Api Server 统一入口,以 Restful 方式,交给 etcd 存储 Scheduler 节点调试,选择 Node 节点,做应用部署 Controller Manager 处理集群中常规后台任务,一个资源对应一个控制器 etcd 存储系统,用于保存集群相关的数据 Node k