ubuntu k8s安全设置怎么做
导读:Ubuntu 上 Kubernetes 安全设置清单 一 基础系统与网络加固 系统基线 保持系统与时区一致,启用 NTP 时间同步;禁用 Swap(注释 /etc/fstab 中的 swap 行并执行 swapoff -a);按需安装并...
Ubuntu 上 Kubernetes 安全设置清单
一 基础系统与网络加固
- 系统基线
- 保持系统与时区一致,启用 NTP 时间同步;禁用 Swap(注释 /etc/fstab 中的 swap 行并执行
swapoff -a);按需安装并配置 Containerd/Docker 作为容器运行时。 - 开启内核网络参数(/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 时间同步;禁用 Swap(注释 /etc/fstab 中的 swap 行并执行
- 防火墙与端口
- 使用 UFW 默认拒绝入站,仅放行业务必需端口,示例:
ufw allow from 192.168.1.0/24 to any port 22 proto tcp(SSH 管理)ufw allow from 10.0.0.0/24 to any port 6443 proto tcp(API Server)ufw allow from 10.0.0.0/24 to any port 10250 proto tcp(Kubelet API)ufw allow from 10.0.0.0/24 to any port 53 proto tcp,udp(DNS)ufw allow from < master1> ,< master2> to any port 2379,2380 proto tcp(etcd)- 如不使用 NodePort,建议限制或关闭 30000–32767 端口段。
- 验证:
ufw status numbered、ufw reload、nc -zv < IP> < 端口>。
- 使用 UFW 默认拒绝入站,仅放行业务必需端口,示例:
二 集群通信与证书管理
- 启用 TLS 与引导令牌
- 初始化集群时启用 TLS,为 API Server 证书添加 SAN(外网 IP/域名):
kubeadm init --apiserver-advertise-address=< 内网IP> --apiserver-cert-extra-sans=< 外网IP/域名> --pod-network-cidr=10.244.0.0/16
- 使用短时引导令牌:
kubeadm token create --validity 24h --print-join-command
- 初始化集群时启用 TLS,为 API Server 证书添加 SAN(外网 IP/域名):
- 证书生命周期
- 检查证书有效期:
kubeadm certs check-expiration - 续签全部证书:
kubeadm certs renew all - 滚动重启控制面组件(静态 Pod 会被重建):
systemctl restart kubeletkubectl delete pod -n kube-system -l k8s-app=kube-apiserverkubectl delete pod -n kube-system -l k8s-app=kube-controller-managerkubectl delete pod -n kube-system -l k8s-app=kube-scheduler
- 检查证书有效期:
- 禁用不安全端口
- 确保 API Server 8080 不安全端口未启用;如存在需移除相关启动参数并仅保留 6443 等安全端口。
三 身份与访问控制 RBAC
- 原则与范围
- 遵循 最小权限原则;优先使用 Role/RoleBinding 限制到命名空间,谨慎使用 ClusterRole/ClusterRoleBinding。
- 每个微服务使用独立的 ServiceAccount,只授予所需权限。
- 快速示例
- 只读 Pods(命名空间级):
kubectl create role pod-reader --namespace=dev --verb=get,list,watch --resource=podskubectl create rolebinding pod-reader-binding --namespace=dev --role=pod-reader --serviceaccount=dev:default
- 全命名空间只读 Pods(集群级):
kubectl create clusterrole pod-reader-all --verb=get,list,watch --resource=podskubectl create clusterrolebinding pod-reader-all-binding --clusterrole=pod-reader-all --user=ops-team
- 只读 Pods(命名空间级):
- 自检与治理
- 权限自检:
kubectl auth can-i < verb> < resource> [--namespace=< ns> ] - 定期审计与回收无效绑定,避免过度授权。
- 权限自检:
四 网络与 Pod 安全
- 网络策略
- 部署 Calico/Cilium 等支持 NetworkPolicy 的 CNI 插件(示例):
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml - 默认拒绝(白名单制):
- 全局策略(Calico):创建
GlobalNetworkPolicy,selector: all(),types: [Ingress, Egress]
- 全局策略(Calico):创建
- DNS 放行(示例):
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: allow-dns namespace: defaultspec: 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
- 部署 Calico/Cilium 等支持 NetworkPolicy 的 CNI 插件(示例):
- Pod 安全准入
- 在 v1.25+ 使用 Pod Security Admission(PSA)替代 PSP:为命名空间设置标签,如
pod-security.kubernetes.io/enforce: restricted、pod-security.kubernetes.io/warn: restricted,或在 kube-apiserver 启用 PSA 准入插件。 - 旧版本如需 PSP(已弃用):创建策略(如禁止特权、要求非 root、只读根文件系统),并绑定到服务账户后再创建 Pod。
- 在 v1.25+ 使用 Pod Security Admission(PSA)替代 PSP:为命名空间设置标签,如
五 镜像 数据与审计监控
- 镜像与供应链
- 仅从可信源拉取镜像,使用 私有仓库(Harbor/Quay);定期扫描镜像漏洞(如 Trivy/Clair),及时更新基础镜像与依赖。
- 数据与密钥
- 使用 Secrets 管理敏感信息;对 PV/PVC 与 etcd 数据考虑 静态加密 与备份策略(定期备份 etcd 与证书)。
- 审计与监控
- 启用 API Server 审计日志(示例策略记录 delete/patch/update 等关键操作),并接入 Prometheus/Grafana 设置告警(异常 API 调用、资源异常等)。
- 验证与演练
- 防火墙连通性、TLS 证书有效性、网络策略阻断效果、RBAC 权限边界、审计日志落盘与告警触发等例行验证,形成 SOP 与周期性复测。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu k8s安全设置怎么做
本文地址: https://pptw.com/jishu/762577.html
