/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled,并执行setenforce 0临时生效。swapoff -a临时关闭,修改/etc/fstab文件注释掉Swap行(如# /dev/mapper/centos-swap swap)永久生效。firewalld或iptables限制对Kubernetes关键端口(如API Server的6443端口、kubelet的10250/10255端口)的访问,仅允许信任IP段访问。例如,通过firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="6443" protocol="tcp" accept'添加规则。yum update -y更新系统,使用kubeadm upgrade升级集群组件。yum install -y chrony安装,修改/etc/chrony.conf添加NTP服务器(如server ntp.aliyun.com iburst),执行systemctl enable chronyd && systemctl start chronyd启动服务。kubeadm init初始化集群时会自动生成证书,可通过--tls-cert-file和--tls-private-key-file参数指定证书路径。修改API Server配置(/etc/kubernetes/manifests/kube-apiserver.yaml),添加--anonymous-auth=false禁用匿名访问。dev,为该命名空间下的应用创建专用服务账号my-app-sa,并绑定仅能访问该命名空间Pod的Role:# 创建Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: dev
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
---
# 创建RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: dev
name: read-pods
subjects:
- kind: ServiceAccount
name: my-app-sa
namespace: dev
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
避免使用cluster-admin等超级权限角色,定期审计权限(如使用kubectl auth can-i命令验证权限)。/var/lib/kubelet/config.yaml),禁用匿名访问(anonymousAuth: false)、关闭只读端口(readOnlyPort: 0),并启用客户端证书认证(clientCAFile: /etc/kubernetes/pki/ca.crt)。重启kubelet服务使配置生效:systemctl restart kubelet。NetworkPolicy限制Pod间流量,仅允许必要的通信。例如,允许frontend命名空间的Pod访问backend命名空间的db标签Pod:apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-access
namespace: backend
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: frontend
需部署支持NetworkPolicy的CNI插件(如Calico、Cilium)。PodSecurity(替代已废弃的PSP)限制Pod权限。例如,创建restricted策略,禁止特权容器、限制挂载主机路径、要求只读根文件系统:apiVersion: pod-security.admission.config.k8s.io/v1beta1
kind: PodSecurityConfiguration
defaults:
enforce: "restricted"
enforce-version: "latest"
或通过PodSecurityPolicy(PSP)实现类似效果(需集群支持)。/etc/kubernetes/manifests/kube-apiserver.yaml),添加--audit-log-path=/var/log/kubernetes/audit.log(日志路径)、--audit-policy-file=/etc/kubernetes/audit-policy.yaml(审计策略)参数。审计策略示例:apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
resources:
- group: ""
resources: ["pods", "services", "configmaps"]
- level: RequestResponse
resources:
- group: ""
resources: ["secrets", "nodes"]
确保审计日志目录权限正确(如chmod 700 /var/log/kubernetes),定期备份日志。etcdctl snapshot save命令定期创建快照,存储到安全位置(如远程存储、本地加密目录)。kube-bench工具审计集群是否符合CIS Kubernetes Benchmark安全标准,检查配置漏洞(如API Server是否启用匿名访问、kubelet是否关闭只读端口);使用kube-hunter模拟攻击,发现集群中的潜在弱点。