温馨提示×

centos安装k8s的安全设置

小樊
43
2025-10-05 06:29:55
栏目: 智能运维

CentOS安装Kubernetes后的安全设置

1. 系统基础安全加固

  • 关闭SELinux:SELinux可能干扰Kubernetes组件(如kubelet)的正常运行,需永久禁用。修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled,并执行setenforce 0临时生效。
  • 关闭Swap分区:Swap会影响Kubernetes的内存管理(如Pod驱逐策略),需永久关闭。执行swapoff -a临时关闭,修改/etc/fstab文件注释掉Swap行(如# /dev/mapper/centos-swap swap)永久生效。
  • 配置防火墙:使用firewalldiptables限制对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'添加规则。
  • 系统补丁与更新:定期更新CentOS系统和Kubernetes组件(如kubelet、kubeadm、kubectl),安装最新安全补丁。可通过yum update -y更新系统,使用kubeadm upgrade升级集群组件。
  • 时间同步:配置NTP服务(如chrony)确保所有节点时间同步,避免因时间差异导致证书验证失败或日志分析异常。执行yum install -y chrony安装,修改/etc/chrony.conf添加NTP服务器(如server ntp.aliyun.com iburst),执行systemctl enable chronyd && systemctl start chronyd启动服务。

2. Kubernetes组件安全配置

  • 启用TLS双向认证:为API Server、kubelet等组件配置TLS证书,禁用匿名访问。使用kubeadm init初始化集群时会自动生成证书,可通过--tls-cert-file--tls-private-key-file参数指定证书路径。修改API Server配置(/etc/kubernetes/manifests/kube-apiserver.yaml),添加--anonymous-auth=false禁用匿名访问。
  • 配置RBAC最小权限:遵循“最小权限原则”,为用户、服务账号分配完成任务所需的最小权限。例如,创建命名空间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命令验证权限)。
  • 加固kubelet安全:修改kubelet配置(/var/lib/kubelet/config.yaml),禁用匿名访问(anonymousAuth: false)、关闭只读端口(readOnlyPort: 0),并启用客户端证书认证(clientCAFile: /etc/kubernetes/pki/ca.crt)。重启kubelet服务使配置生效:systemctl restart kubelet

3. 网络与镜像安全

  • 配置网络策略:使用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)。
  • 镜像安全管控
    • 使用私有镜像仓库(如Harbor)托管容器镜像,避免使用公共仓库(如Docker Hub)的高风险镜像;
    • 集成镜像扫描工具(如Trivy、Clair),在CI/CD流水线中自动扫描镜像漏洞,阻断包含高危CVE(如CVSS评分≥9.0)的镜像进入集群;
    • 启用镜像签名验证(如使用cosign),部署时验证镜像签名有效性,防止篡改。

4. 运行时与审计安全

  • 启用Pod安全机制:使用PodSecurity(替代已废弃的PSP)限制Pod权限。例如,创建restricted策略,禁止特权容器、限制挂载主机路径、要求只读根文件系统:
    apiVersion: pod-security.admission.config.k8s.io/v1beta1
    kind: PodSecurityConfiguration
    defaults:
      enforce: "restricted"
      enforce-version: "latest"
    
    或通过PodSecurityPolicy(PSP)实现类似效果(需集群支持)。
  • 配置审计日志:开启Kubernetes API Server审计日志,记录所有API请求(如用户操作、资源变更),便于追溯安全事件。修改API Server配置(/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),定期备份日志。

5. 持续监控与维护

  • 部署监控与入侵检测工具:使用Prometheus+Grafana监控集群状态(如节点资源使用率、Pod健康状态),部署Falco监控异常容器行为(如宿主机文件访问、异常进程启动),及时告警安全事件。
  • 定期备份关键数据:备份etcd数据(集群状态存储),可使用etcdctl snapshot save命令定期创建快照,存储到安全位置(如远程存储、本地加密目录)。
  • 定期安全审计:使用kube-bench工具审计集群是否符合CIS Kubernetes Benchmark安全标准,检查配置漏洞(如API Server是否启用匿名访问、kubelet是否关闭只读端口);使用kube-hunter模拟攻击,发现集群中的潜在弱点。

0