首页主机资讯Ubuntu Kubernetes安全策略如何设置

Ubuntu Kubernetes安全策略如何设置

时间2025-12-19 01:28:03发布访客分类主机资讯浏览809
导读:Ubuntu 上落地 Kubernetes 安全策略的实操清单 一 基础系统与网络边界 禁用 Swap 并开启时间同步 禁用 Swap(Kubernetes 要求):编辑 /etc/fstab 注释 swap 行后执行 swapoff...

Ubuntu 上落地 Kubernetes 安全策略的实操清单


一 基础系统与网络边界

  • 禁用 Swap 并开启时间同步
    禁用 Swap(Kubernetes 要求):编辑 /etc/fstab 注释 swap 行后执行 swapoff -a;时间同步建议安装并使用 NTP/chrony,保证证书校验与审计时序一致。
  • 内核网络参数与转发
    写入 /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
  • Ubuntu 防火墙 UFW 最小化放通
    原则:默认拒绝入站,仅放通必要端口与来源。示例:
    • SSH 管理:ufw allow from 192.168.1.0/24 to any port 22 proto tcp
    • API Server:ufw allow from 10.0.0.0/24 to any port 6443 proto tcp
    • Kubelet API:ufw allow from 10.0.0.0/24 to any port 10250 proto tcp
    • DNS:ufw allow from 10.0.0.0/24 to any port 53 proto tcp,udp
    • etcd(仅主节点间):ufw allow from < master-ip> to any port 2379 proto tcp
    • NodePort 范围 30000–32767 仅在必要时按来源 IP 放开,不使用则关闭。
      应用:ufw enable & & ufw reload & & ufw status numbered
  • 控制面与节点端口基线
    仅从管理网/跳板机访问 6443(API Server);10250(kubelet)限制为节点间访问;10255(只读 kubelet)如非必要建议关闭或限制来源;2379/2380(etcd)仅主节点互信通信。

二 加密通信与证书生命周期

  • 启用 TLS 与引导令牌治理
    初始化集群时通过 kubeadm init 启用 TLS,必要时用 --apiserver-cert-extra-sans 添加外网 IP/域名;引导令牌设置短有效期(如 24h):kubeadm token create --validity 24h --print-join-command
  • 证书有效期与续签
    检查证书:kubeadm certs check-expiration;续签:kubeadm certs renew all;滚动重启控制面组件(kubelet 重启后删除相应 kube-system 的 apiserver/controller-manager/scheduler Pod 触发重建)。
  • 原则
    全链路启用 TLS;避免长期使用静态令牌;证书默认有效期通常为 1 年,不建议超过,以降低维护与泄露风险。

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

  • 部署网络策略插件
    选择 Calico/Cilium 等支持 NetworkPolicy 的 CNI。以 Calico 为例:
    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml,确认 calico-system 命名空间 Pods Running。
  • 默认拒绝与白名单优先
    全局默认拒绝(安全基线):
    apiVersion: projectcalico.org/v3
    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
  • 命名空间隔离示例
    对敏感命名空间(如 database)先拒绝全部入站,再按需仅放行 DNS 出站,分阶段验证后再推广到生产。

四 RBAC 最小权限与审计

  • 启用与建模
    确保 API Server 启用 RBAC(如 kubeadm 默认启用);使用 Role/ClusterRole 定义权限集合,用 RoleBinding/ClusterRoleBinding 将权限授予用户/组/ServiceAccount
  • 最小权限示例
    只读角色(命名空间级):
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata: namespace: dev; name: pod-reader
    rules:
    • apiGroups: [“”]; resources: [“pods”]; verbs: [“get”,“list”,“watch”]
      绑定示例:
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata: namespace: dev; name: read-pods-binding
      subjects: [{ kind: User; name: alice} ]
      roleRef: { kind: Role; name: pod-reader; apiGroup: rbac.authorization.k8s.io}
  • 验证与治理
    权限验证:kubectl auth can-i get pods --as=alice -n dev;避免过度授权,定期审计 RoleBinding/ClusterRoleBinding,遵循最小权限原则。
  • API Server 审计日志
    审计策略示例(/etc/kubernetes/audit/audit-policy.yaml):
    apiVersion: audit.k8s.io/v1
    kind: Policy
    omitStages: [“RequestReceived”]
    rules:
    • level: RequestResponse; verbs: [“delete”,“deletecollection”,“patch”,“update”]
    • level: Metadata; verbs: [“get”,“list”,“watch”]; users: [“system:kube-proxy”]
    • level: None; resources: [“endpoints”,“services”]
    • level: None; nonResourceURLs: [“/api*”,“/version”]
      在 kube-apiserver 启动参数加入:
      –audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml
      –audit-log-path=/var/log/kubernetes/audit.log
      –audit-log-maxsize=100 --audit-log-maxbackup=5 --audit-log-maxage=30
      重启 kubelet 后审计日志落盘 /var/log/kubernetes/audit.log,可用工具集中分析与告警。

五 准入控制与运行时安全

  • 策略即代码 OPA/Gatekeeper(替代 PSP)
    Kubernetes 1.25+ 已弃用 PodSecurityPolicy,推荐使用 OPA/Gatekeeper。部署:
    kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.16/deploy/gatekeeper.yaml
    示例策略(禁止特权容器):
    • ConstraintTemplate(templates.gatekeeper.sh/v1beta1/K8sPSPNoPrivileged)
    • Constraint(constraints.gatekeeper.sh/v1beta1/K8sPSPNoPrivileged)
      测试:kubectl run privileged-pod --image=nginx --privileged 应被拒绝。
  • 运行时安全 Falco(eBPF)
    使用 Helm 安装(eBPF 驱动):
    helm repo add falcosecurity https://falcosecurity.github.io/charts
    helm install falco falcosecurity/falco --namespace falco --set driver.kind=ebpf
    进入测试容器修改 /etc/passwd,在 Falco 日志中应出现敏感文件写入告警。
  • 工作负载安全基线
    securityContext 中落实:非 root 运行(runAsNonRoot)、禁止特权(privileged: false)、只读根文件系统(readOnlyRootFilesystem: true)、Drop 能力(capabilities.drop: [“ALL”])、按需要添加最小能力集;镜像来自可信源并定期漏洞扫描(如 Trivy/Clair)。

六 快速验证与持续运维

  • 验证清单
    • 防火墙:ufw status numbered,并对关键端口做来源 IP 连通性测试(如 nc -zv < IP> 6443)。
    • TLS:执行 kubectl cluster-info,确认通过 HTTPS 访问 API Server,证书有效。
    • 网络策略:跨命名空间 Pod 互访与 DNS 访问是否符合策略预期。
    • RBAC:用 kubectl auth can-i 验证不同主体权限边界。
    • 审计:检查 /var/log/kubernetes/audit.log 是否记录敏感操作。
  • 持续化
    定期执行 CIS/K8s 基线 检查、RBAC 权限盘点、镜像与依赖漏洞扫描、证书到期巡检与轮换、策略违规复盘与加固。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Kubernetes安全策略如何设置
本文地址: https://pptw.com/jishu/775756.html
Kubernetes日志在Ubuntu上如何查看 Ubuntu Kubernetes资源调度怎么做

游客 回复需填写必要信息