温馨提示×

Linux上K8S安全策略如何实施

小樊
34
2025-12-26 05:16:53
栏目: 智能运维

Linux上K8s安全策略实施路线图

一 基础系统与节点加固

  • 保持系统与组件更新:持续升级 LinuxKubernetes 组件(如 kubelet、kubeadm、kubectl),及时修补漏洞。
  • 禁用 Swap:Kubelet 要求节点禁用 Swap,执行 swapoff -a 并在 /etc/fstab 注释 swap 行,避免稳定性与安全风险。
  • 内核网络参数:开启桥接流量进入 iptables,启用转发。
    示例:
    cat >> /etc/sysctl.d/kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOF
    sysctl -p
  • 防火墙与端口最小化:使用 UFW 或 firewalld 仅开放必要端口(如 22/SSH、6443/API、10250/Kubelet、2379-2380/etcd、53/DNS、30000-32767/NodePort 可选),默认拒绝入站。
  • 主机加固:仅密钥登录、关闭不必要服务与端口、最小权限账户、启用日志与审计。
    以上措施能显著降低节点被入侵与横向移动的风险,并为后续策略落地提供稳定基础。

二 身份与访问控制 RBAC

  • 最小权限与分层授权:遵循最小权限原则,优先使用 Role/RoleBinding 收敛到命名空间,必要时再用 ClusterRole/ClusterRoleBinding
  • 避免滥用高权限:谨慎授予 cluster-admin,优先使用内置 view/edit/admin 或自定义细粒度规则。
  • 管理 default ServiceAccount:生产应用避免使用 default SA;如无需调用 API,设置 automountServiceAccountToken: false
  • 权限验证与排查:使用 kubectl auth can-i --list --as=system:serviceaccount:<ns>:<sa> 校验权限;通过 kubectl describe rolebinding/clusterrolebindingkubectl-who-can 等工具审计与排查。
  • 云上场景的双层授权:在 ACK 等托管集群中,需同时完成 RAM(谁能进集群)与 RBAC(能做什么)授权,形成从云资源到集群资源的完整授权链。
    RBAC 是集群权限的“门禁与分权”核心,落地时要以“最小权限 + 可审计 + 可验证”为目标。

三 网络策略与隔离

  • 前提条件:部署支持 NetworkPolicyCNI(如 Calico、Cilium);注意 Flannel 默认不支持 NetworkPolicy,需更换或叠加方案。
  • 策略范式:按“默认拒绝、按需放行”设计;为关键业务(如 数据库)仅允许来自 前端/业务 标签的入站端口(如 3306/TCP),并限制出站到必要 IP/CIDR 与端口(如 DNS 53)。
  • 典型策略示例:
    • 命名空间默认隔离(同一命名空间内互通):
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
      name: allow-same-namespace
      namespace: default
      spec:
      podSelector: {}
      policyTypes: [Ingress, Egress]
      ingress: [{ from: [{ podSelector: {} }] }]
      egress: [{ to: [{ podSelector: {} }] }]
    • 仅允许 app=client 访问 app=web 的 80 端口:
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
      name: web-access-policy
      namespace: default
      spec:
      podSelector: { matchLabels: { app: web } }
      policyTypes: [Ingress]
      ingress:
      • from: [{ podSelector: { matchLabels: { app: client } }]
        ports: [{ protocol: TCP, port: 80 }]
    • 限制数据库出站到特定网段与端口:
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
      name: restrict-egress
      namespace: default
      spec:
      podSelector: { matchLabels: { app: backend } }
      policyTypes: [Egress]
      egress:
      • to: [{ ipBlock: { cidr: 10.0.0.0/24 } }]
        ports: [{ protocol: TCP, port: 5432 }]
  • 验证与排错:创建临时客户端 Pod 进行连通性测试(如 wget/curl),使用 kubectl get/describe networkpolicy 与 CNI 日志定位问题。
    网络策略将“谁能和谁通信、用什么端口”收敛为白名单,是遏制横向渗透的关键防线。

四 镜像与运行时安全

  • 镜像与漏洞治理:在 CI/CD 中集成 镜像扫描(如 Clair、Trivy、商业扫描器),阻断含高危 CVE 的镜像进入生产;镜像仓库启用签名与可信源。
  • 运行时防护与取证:部署 Falco/Sysdig 等运行时安全工具,检测异常进程、系统调用与容器逃逸行为,保留审计线索。
  • 安全上下文与最小权限容器:在 Pod/容器 SecurityContext 中启用 runAsNonRoot、readOnlyRootFilesystem、drop capabilities、seccomp/AppArmor/SELinux 等,减少攻击面。
  • 加密与密钥管理:启用 TLS 保护控制面与数据面通信;Secrets 使用 KMS 或外部密钥管理进行加密与轮换;敏感数据避免在环境变量中明文存放。
  • 审计与监控:开启 Kubernetes 审计日志,集中收集与告警;对关键资源(如 Secrets、RBAC 变更、Namespace 创建)设置审计与告警策略。
  • 持续运营:建立 漏洞管理合规巡检 流程,定期复盘权限、策略与镜像风险,形成闭环改进。
    这些措施覆盖“构建—分发—运行—审计”全生命周期,显著降低容器逃逸与数据泄露的概率。

0