温馨提示×

ubuntu上k8s安全策略如何设置

小樊
34
2025-12-24 12:34:05
栏目: 智能运维

Ubuntu 上 Kubernetes 安全策略落地清单

一 基础系统与节点加固

  • 禁用 Swap:编辑 /etc/fstab 注释 swap 行,执行 swapoff -a,以满足 kubelet 要求并降低被交换侧信道攻击的风险。
  • 内核网络参数:写入 /etc/sysctl.d/kubernetes.conf
    net.bridge.bridge-nf-call-ip6tables=1、net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1,执行 sysctl -p
  • 时间同步:安装并启用 NTP/chrony,保证证书校验与审计日志时序正确。
  • 容器运行时:使用 containerd(或 Docker),并配置 systemd cgroup 驱动。
  • 主机防火墙 UFW:默认拒绝入站,按需仅放通必要端口,例如:
    • 22/TCP SSH(限定管理网段)
    • 6443/TCP kube-apiserver(仅内网/跳板网段)
    • 10250/TCP kubelet API(节点间)
    • 2379-2380/TCP etcd(主节点间)
    • 53/TCP/UDP CoreDNS
    • 如不使用 NodePort,建议关闭 30000-32767 范围或严格来源限制。

二 传输加密与证书管理

  • 全组件启用 TLS:确保 API Server、etcd、kubelet、kube-proxy 等组件间通信均使用证书校验。
  • kubeadm 初始化示例:
    sudo kubeadm init --apiserver-advertise-address=<内网IP> --apiserver-cert-extra-sans=<外网IP或域名> --pod-network-cidr=10.244.0.0/16
  • 证书生命周期:
    • 查看有效期:kubeadm certs check-expiration
    • 续签全部证书:kubeadm certs renew all
    • 滚动重启控制面(静态 Pod):
      systemctl restart kubelet
      kubectl delete pod -n kube-system -l k8s-app=kube-apiserver
      kubectl delete pod -n kube-system -l k8s-app=kube-controller-manager
      kubectl delete pod -n kube-system -l k8s-app=kube-scheduler
  • 引导令牌:创建短期令牌(如 –validity 24h),避免长期凭据泄露。

三 网络策略与命名空间隔离

  • 安装策略引擎:部署 Calico(或 Cilium),例如:
    kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
    kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
  • 默认拒绝基线:先“全拒绝、后放行”,避免策略缺口导致横向移动。
    • Kubernetes 网络策略(命名空间级默认拒绝):
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
      name: default-deny
      namespace: default
      spec:
      podSelector: {}
      policyTypes: [Ingress, Egress]
    • Calico 全局默认拒绝(集群级):
      apiVersion: projectcalico.org/v1
      kind: GlobalNetworkPolicy
      metadata:
      name: default-deny
      spec:
      selector: all()
      types: [Ingress, Egress]
  • DNS 例外(保证解析可用):
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
    name: allow-dns
    namespace: default
    spec:
    podSelector: {}
    policyTypes: [Ingress]
    ingress:
    • from:
      • namespaceSelector: {matchLabels: {name: kube-system}}
      • podSelector: {matchLabels: {k8s-app: kube-dns}}
        ports:
      • protocol: TCP; port: 53
      • protocol: UDP; port: 53
  • 分阶段推广:先在测试命名空间验证,再逐步覆盖生产。

四 身份与权限最小化 RBAC

  • 启用 RBAC 并为团队/系统分配最小权限:
    • 示例(开发命名空间只读 + 少量写权限):
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
      namespace: dev
      name: dev-role
      rules:
      • apiGroups: [“”]
        resources: [“pods”, “services”]
        verbs: [“get”,“list”,“create”,“update”,“delete”]
      • apiGroups: [“apps”]
        resources: [“deployments”]
        verbs: [“get”,“list”,“create”,“update”,“delete”]
      • apiGroups: [“”]
        resources: [“configmaps”]
        verbs: [“get”,“list”]

      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
      namespace: dev
      name: dev-binding
      subjects:
      • kind: User; name: dev-team; apiGroup: rbac.authorization.k8s.io
        roleRef:
        kind: Role; name: dev-role; apiGroup: rbac.authorization.k8s.io
  • 限制 default ServiceAccount 权限,避免工作负载“自动获得”过高权限。
  • 定期审计:核查 ClusterRole/RoleBinding、ServiceAccount 使用范围与绑定关系。

五 准入控制与运行时安全

  • 准入控制与 Pod 安全:
    • 旧机制 PodSecurityPolicy(PSP) 已在 v1.21 起弃用、v1.25 移除,不建议新集群继续使用。
    • 推荐替代:
      • Pod Security Admission(PSA)(内置,K8s v1.22+):通过 PodSecurity 命名空间标签实施基线/受限/特权三级策略。
      • OPA Gatekeeper / Kyverno:以策略即代码实现更细粒度准入控制(镜像白名单、不可变标签、Root 禁止、HostPath 限制等)。
  • 运行时与镜像:
    • 镜像安全:仅使用可信仓库(如 Harbor/Quay),启用镜像签名与漏洞扫描,定期 docker pull/ctr images pull 更新。
    • 主机与组件:关闭不必要的系统服务,及时 apt/yum 更新 与内核补丁;为 kubelet 配置 只读端口关闭认证/授权匿名访问禁用 等参数。
  • 审计与监控:
    • 启用 API Server 审计日志(策略示例:对 delete/patch/update 记录 RequestResponse,对 list/watch 记录 Metadata),集中到 ES/Loki 做告警与取证。
    • 部署 Prometheus + Grafana 监控 API Server/etcd/kubelet 指标与异常事件。

0