温馨提示×

centos上k8s的安全策略

小樊
46
2025-11-08 05:40:24
栏目: 智能运维

CentOS上Kubernetes安全策略实施指南

一、系统基础安全加固

1. 节点系统配置

  • 关闭不必要的服务:禁用FTP、邮件服务器等非必需服务(systemctl disable <service-name>),减少攻击面。
  • 防火墙规则配置:使用firewalldiptables限制仅开放Kubernetes必要端口(如API Server的6443、kubelet的10250/10255),默认拒绝所有其他流量。
  • SELinux与Swap处理:SELinux设为permissive模式(临时命令setenforce 0,永久修改/etc/selinux/config);关闭Swap分区(swapoff -a并注释/etc/fstab中的Swap条目),避免内存隔离失效。
  • 时间同步:安装chrony并配置NTP服务器(如server ntp.aliyun.com iburst),运行chronyc sources验证同步状态,确保节点时间一致。

二、Kubernetes集群核心安全配置

1. 认证与授权

  • API Server TLS加密:生成CA证书、Server证书和Client证书(使用openssl),将证书放入/etc/kubernetes/pki,修改/etc/kubernetes/manifests/kube-apiserver.yaml添加--tls-cert-file--tls-private-key-file--client-ca-file参数,重启kubelet使配置生效。
  • RBAC权限控制:遵循“最小权限原则”,创建命名空间(kubectl create namespace dev-ns)、服务账户(kubectl create serviceaccount dev-sa -n dev-ns);定义角色(如仅允许读取Pod的pod-reader角色)并绑定到服务账户(kubectl create rolebinding dev-rb --role=pod-reader --serviceaccount=dev-ns:dev-sa -n dev-ns),避免使用cluster-admin角色给开发人员。
  • 限制API Server访问:通过kubeconfig文件限制API Server访问来源,结合RBAC实现细粒度权限管理。

2. 网络隔离

  • NetworkPolicy配置:使用Calico、Cilium等支持NetworkPolicy的网络插件,通过标签选择器限制Pod间通信。例如,仅允许带有app=frontend标签的Pod访问app=database的Pod的3306端口:
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: frontend-database-policy
      namespace: dev-ns
    spec:
      podSelector:
        matchLabels:
          app: database
      policyTypes:
      - Ingress
      ingress:
      - from:
        - podSelector:
            matchLabels:
              app: frontend
        ports:
        - protocol: TCP
          port: 3306
    
    默认拒绝所有入站/出站流量(podSelector: {}),强制业务团队显式定义允许的流量。

3. 容器运行时安全

  • 安全上下文(Security Context):在Pod或Container级别配置,限制容器权限。例如,禁止以root用户运行(runAsNonRoot: true)、指定低权限用户ID(runAsUser: 1000)、设置只读根文件系统(readOnlyRootFilesystem: true)、禁止提权(allowPrivilegeEscalation: false)。
  • Falco实时检测:部署Falco监控容器和节点行为,检测异常操作(如容器访问/etc/shadow文件)。示例规则:
    - rule: Read sensitive file inside container
      desc: Detect container accessing sensitive files like /etc/shadow
      condition: >
        container and evt.type in (open, openat) and
        evt.dir=< and
        fd.name in ("/etc/shadow", "/etc/passwd")
      output: "Sensitive file accessed by container (user=%user.name command=%proc.cmdline file=%fd.name)"
      priority: WARNING
    

三、镜像与数据安全

1. 镜像安全

  • 镜像来源与扫描:使用私有镜像仓库(如Harbor),配置CI/CD流水线集成Trivy或Clair扫描镜像漏洞,高危漏洞(如CVE-2023-1234)自动终止流水线。
  • 镜像签名与验证:使用Cosign对镜像签名(cosign sign --key cosign.key nginx:1.25),部署时验证签名有效性(cosign verify --key cosign.pub nginx:1.25),确保镜像未被篡改。

2. 数据安全

  • etcd加密:启用etcd静态加密保护Secret数据,修改/etc/kubernetes/manifests/etcd.yaml添加--encryption-provider-config=/etc/kubernetes/pki/encryption-config.yaml参数,创建加密配置文件指定AES-256-GCM算法和密钥。
  • Secret管理:避免在Pod中硬编码Secret,使用HashiCorp Vault或CSI驱动动态注入Secret(如volumeMounts挂载Vault中的Secret到Pod)。

四、持续维护与监控

1. 版本与补丁管理

  • 组件升级:定期使用kubeadm upgrade升级Kubernetes集群至最新稳定版本,升级前备份etcd数据(etcdctl snapshot save /tmp/etcd-snapshot.db);使用yum update更新CentOS系统包(如kernel、openssl)。
  • 漏洞扫描:使用kube-bench检查集群配置是否符合CIS Kubernetes Benchmark标准(kube-bench --benchmark cis-1.25),修复不安全配置(如未启用TLS、RBAC未配置)。

2. 监控与审计

  • 日志收集与分析:部署EFK(Elasticsearch+Fluentd+Kibana)或Loki+Promtail+Grafana堆栈,收集节点、kubelet、API Server日志,设置告警规则(如频繁的登录失败)。
  • 审计日志:启用Kubernetes Audit Logging,记录所有API请求(如创建Pod、修改Deployment),修改/etc/kubernetes/audit-policy.yaml设置日志级别(level: Metadata),将日志保存到/var/log/kubernetes/audit.log,定期分析异常行为。
  • 实时入侵检测:部署Falco监控容器和节点行为,检测异常操作(如容器逃逸、宿主机文件访问),告警信息发送至Slack或邮件。

0