温馨提示×

centos上k8s的安全策略如何配置

小樊
33
2025-12-15 19:53:08
栏目: 智能运维

在 CentOS 上配置 Kubernetes 的安全策略

一 基础系统与安全加固

  • 关闭 Swap:执行swapoff -a并注释**/etc/fstab**中的 swap 行,Kubelet 检测到 Swap 将拒绝启动。
  • 内核与网络:启用br_netfilter并开启桥接流量进入 iptables/ip6tables;开启ip_forward;按需加载 IPVS 模块(Service 高并发时性能更好)。
  • 时间同步:安装并启用NTP/chrony,保证节点间时间一致,避免证书校验与审计异常。
  • 防火墙:生产环境建议启用firewalld/iptables并仅放行必要端口,而非直接关闭;最小化暴露可减少攻击面。
  • SELinux:如与组件冲突可在测试环境设为permissive,生产环境建议保持enforcing并配合安全上下文/准入控制使用。
  • 容器运行时:以Containerd为例,启用SystemdCgroup = true以与 kubelet 一致。
    以上为常见且必要的前置与安全基线配置。

二 身份与访问控制

  • API Server 认证与加密:启用TLS,结合客户端证书、ServiceAccount Token、OIDC、Webhook等机制;对外暴露仅保留6443/HTTPS
  • RBAC 最小权限:按“最小权限原则”使用Role/ClusterRoleRoleBinding/ClusterRoleBinding授予权限,定期审计。
  • 准入控制:启用准入控制器(如PodSecurityImagePolicyWebhook等),在对象创建更新阶段强制安全基线。
  • 镜像与私有仓库:优先使用私有镜像仓库,并定期执行镜像扫描(如 Trivy、Clair 等)降低漏洞风险。
    这些机制共同确保“谁能访问、能访问什么、以何方式访问”受控且可审计。

三 运行时与 Pod 安全

  • 安全上下文 SecurityContext:在 Pod/容器级设置runAsNonRoot、readOnlyRootFilesystem、runAsUser/runAsGroup、fsGroup、capabilities.drop等,缩小攻击面。
  • 运行时权限:避免使用privileged容器;按需仅添加最小Linux capabilities;禁止共享主机命名空间(hostNetwork/hostPID/hostIPC)。
  • 资源与 QoS:为容器设置requests/limits(CPU/内存),防止资源耗尽型攻击与“吵闹邻居”。
  • Pod Security(准入):在 v1.21 之前可用PodSecurityPolicy;v1.22+ 使用内置的Pod Security Admission(或替代方案如 Kyverno、OPA Gatekeeper)强制基线(如restricted)。
  • 数据面加密:为etcd 数据静态加密,并为敏感流量启用mTLS(服务网格或手动注入 Sidecar)。
    以上措施覆盖容器运行时的身份、权限、能力与资源边界。

四 网络策略与最小暴露面

  • 选择支持 NetworkPolicy 的 CNI:如Calico、Cilium、Antrea、Kube-router、Weave;注意Flannel 不支持NetworkPolicy。
  • 默认行为:未匹配任何策略时,Pod 的入口/出口默认放行;一旦某方向被策略选中,则仅允许策略中显式放行的流量(策略是“加法”生效)。
  • 典型场景示例:仅允许带有access=true标签的 Pod 访问default命名空间中app=nginx的 80/TCP。
    示例清单:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: access-nginx
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: nginx
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          access: "true"
    ports:
    - protocol: TCP
      port: 80
  • 服务暴露:仅暴露必要服务,优先通过Service类型(如ClusterIP)在集群内部访问,对外通过Ingress Controller集中暴露并启用鉴权/限流/WAF。
  • 端口与防火墙:仅放行6443(API)10250(kubelet)2379/2380(etcd)53(DNS)等关键端口,并依据所用 CNI 开放其控制端口(如Calico BGP 179)。
    通过 NetworkPolicy 实现命名空间与 Pod 级别的L3/L4细粒度隔离,是减小横向移动风险的关键。

五 审计日志与持续运营

  • 审计日志:启用Kubernetes 审计日志,记录对 API 的关键操作与来源,配合集中化存储与分析平台进行告警与取证。
  • 监控与告警:使用Prometheus + Grafana监控API Server、kubelet、etcd、CoreDNS、网络等关键指标,设置异常阈值与通知。
  • 版本与补丁:保持Kubernetes 与节点组件为稳定版并及时打补丁;定期轮换证书与凭据
  • 合规与基线:结合CIS/K8s Benchmark与内部规范,定期扫描与加固(镜像、配置、权限、网络)。
    持续化的可观测、审计与加固闭环,能显著降低风险暴露时间并提升响应效率。

0