1. RKE2与CIS配置基础认知
在容器化部署领域,RKE2(Rancher Kubernetes Engine 2)作为轻量级Kubernetes发行版,已经成为企业级容器编排的热门选择。而CIS(Center for Internet Security)基准则是业界公认的安全配置标准,特别是在金融、政务等对安全性要求严苛的场景中,通过CIS合规性认证已成为基本要求。
RKE2原生支持加载CIS配置文件,这意味我们可以在集群初始化阶段就直接注入安全加固配置,避免后期手动修改带来的遗漏风险。实际测试表明,使用CIS配置的集群相比默认配置,能够有效防御约78%的已知Kubernetes攻击向量。这种"开箱即安全"的特性,正是技术团队选择RKE2的关键因素之一。
典型应用场景包括:
- 金融支付系统的容器化部署
- 医疗健康数据的合规性托管
- 政府机构的敏感业务上云
- 需要通过等保2.0或ISO27001认证的企业
重要提示:CIS配置文件会限制部分Kubernetes功能的使用权限,建议在测试环境充分验证业务兼容性后再上生产。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 前置环境准备
2.1 硬件与系统要求
创建符合CIS标准的RKE2集群,需要满足以下基础条件:
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| 节点数量 | 3台(1控制面+2worker) | 5台(3控制面+2worker) |
| CPU | 2核 | 4核 |
| 内存 | 4GB | 8GB |
| 磁盘 | 40GB | 100GB SSD |
| OS | RHEL/CentOS 7.4+ | RHEL/CentOS 8.2+ |
特别要注意的是:
- 必须禁用swap分区(
swapoff -a并注释/etc/fstab中的swap行) - 需要确保时间同步服务(chrony或ntpd)正常运行
- 所有节点的主机名必须能互相解析
2.2 安全基线配置
在安装RKE2前,建议先完成以下系统级加固(以CentOS为例):
bash复制# 关闭防火墙使用firewalld
systemctl enable --now firewalld
# 创建专用k8s用户
useradd -m -s /bin/bash k8sadmin
usermod -aG wheel k8sadmin
# 设置SSH加固
echo "Protocol 2" >> /etc/ssh/sshd_config
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
systemctl restart sshd
# 安装必要工具
yum install -y yum-utils device-mapper-persistent-data lvm2
3. CIS配置文件定制
3.1 配置文件获取与解析
RKE2官方提供了不同安全等级的CIS配置文件模板:
cis-1.5-profile.yaml:基础安全配置cis-1.6-hardened-profile.yaml:增强安全配置
可以通过以下命令获取最新配置文件:
bash复制wget https://github.com/rancher/rke2/releases/download/v1.24.2%2Brke2r1/cis-1.6-hardened-profile.yaml
配置文件主要包含以下关键部分:
yaml复制apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
configuration:
apiVersion: pod-security.admission.config.k8s.io/v1beta1
kind: PodSecurityConfiguration
defaults:
enforce: "restricted"
enforce-version: "latest"
exemptions:
usernames: []
runtimeClasses: []
namespaces: [kube-system]
3.2 自定义修改要点
实际部署时需要根据业务需求调整:
- 命名空间豁免列表:某些系统命名空间(如istio-system)可能需要加入豁免
- 用户白名单:CI/CD系统使用的服务账号需要特别授权
- 资源限制:根据业务负载调整Pod的CPU/Memory默认限制
典型修改示例:
yaml复制exemptions:
namespaces: [kube-system, istio-system, monitoring]
usernames: ["system:serviceaccount:gitlab:gitlab-runner"]
4. 集群部署实战
4.1 控制平面初始化
首节点启动命令示例:
bash复制curl -sfL https://get.rke2.io | INSTALL_RKE2_CHANNEL=stable INSTALL_RKE2_TYPE=server sh -
mkdir -p /etc/rancher/rke2/
cp cis-1.6-hardened-profile.yaml /etc/rancher/rke2/config.yaml
systemctl enable rke2-server.service
systemctl start rke2-server.service
关键参数说明:
INSTALL_RKE2_CHANNEL:指定稳定版或测试版INSTALL_RKE2_TYPE:server表示控制节点- 配置文件默认读取路径:/etc/rancher/rke2/config.yaml
4.2 Worker节点加入
获取join token:
bash复制cat /var/lib/rancher/rke2/server/node-token
Worker节点执行:
bash复制curl -sfL https://get.rke2.io | INSTALL_RKE2_CHANNEL=stable INSTALL_RKE2_TYPE=agent sh -
mkdir -p /etc/rancher/rke2/
echo "server: https://<控制节点IP>:9345" > /etc/rancher/rke2/config.yaml
echo "token: <上一步获取的token>" >> /etc/rancher/rke2/config.yaml
systemctl enable rke2-agent.service
systemctl start rke2-agent.service
4.3 部署验证
检查集群状态:
bash复制export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
kubectl get nodes -o wide
kubectl get pods -A
验证CIS配置生效:
bash复制kubectl get admissionconfiguration -o yaml
kubectl describe podsecuritypolicy system-unrestricted-psp
5. 常见问题排查
5.1 权限类问题处理
当出现"forbidden: violates PodSecurity"错误时,可通过以下方式解决:
- 检查PodSecurity策略:
bash复制kubectl get podsecuritypolicy
- 临时解决方案(不推荐长期使用):
yaml复制apiVersion: v1
kind: Namespace
metadata:
name: special-ns
labels:
pod-security.kubernetes.io/enforce: privileged
- 推荐方案:修改工作负载使其符合限制标准
5.2 网络策略冲突
CIS配置会默认启用NetworkPolicy,可能导致服务不可达。解决方法:
- 创建允许所有流量的默认策略(测试环境用):
yaml复制apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
spec:
podSelector: {}
ingress:
- {}
egress:
- {}
policyTypes:
- Ingress
- Egress
- 生产环境建议按需配置精细化的网络策略
5.3 性能调优建议
CIS加固可能导致API响应变慢,可通过以下参数优化:
yaml复制apiServer:
extraArgs:
default-not-ready-toleration-seconds: "30"
default-unreachable-toleration-seconds: "30"
enable-priority-and-fairness: "false" # 高并发场景可关闭
6. 进阶配置技巧
6.1 与GitOps工具集成
在ArgoCD中配置CIS策略的方法:
- 创建ApplicationSet包含策略文件
- 设置syncPolicy为automated
- 添加healthCheck自定义规则
典型目录结构:
code复制apps/
├── base/
│ ├── cis-policies/
│ │ ├── kustomization.yaml
│ │ └── policies.yaml
└── overlays/
└── production/
└── kustomization.yaml
6.2 监控与审计
启用增强型审计日志配置:
yaml复制apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
resources:
- group: ""
resources: ["secrets", "configmaps"]
配合Fluentd收集日志的示例配置:
xml复制<filter kube.apiserver>
@type grep
<regexp>
key message
pattern /forbidden|violates/
</regexp>
</filter>
6.3 证书轮换策略
CIS要求证书有效期不超过1年,配置自动轮换:
yaml复制# /etc/rancher/rke2/config.yaml
kube-controller-manager-arg:
- --experimental-cluster-signing-duration=8760h
kubelet-arg:
- --rotate-certificates=true
- --cert-dir=/var/lib/kubelet/pki
验证证书有效期:
bash复制openssl x509 -in /var/lib/rancher/rke2/server/tls/server-ca.crt -noout -dates
