Kubernetes在Ubuntu上的安全设置指南
runAsNonRoot: true和runAsUser(如runAsUser: 1000),避免容器以root权限运行,减少攻击面。allowPrivilegeEscalation: false,防止容器通过setuid/setgid等系统调用提升权限。securityContext.capabilities.drop移除不必要的权限(如NET_RAW),降低容器逃逸或发起网络攻击的风险。/etc/fstab注释掉Swap行,执行swapoff --all命令,避免内存交换导致性能下降及安全风险。sudo apt install ntpdate ntp),使用ntpdate ntp1.aliyun.com同步时间,确保集群节点时间一致(避免TLS证书验证失败、日志时间混乱等问题)。sudo apt update && sudo apt upgrade -y更新Ubuntu系统和Kubernetes组件(如kubelet、kubeadm),及时修复已知安全漏洞。kubeadm init初始化集群时,通过--apiserver-cert-extra-sans参数添加API Server额外Subject Alternative Name(如外网IP、域名),确保证书覆盖多场景访问;控制面组件(API Server、etcd、kubelet、controller-manager、scheduler)之间的通信默认通过TLS加密,无需额外配置。kubeadm certs check-expiration命令查看证书剩余有效期(默认1年),若即将过期,执行kubeadm certs renew all续签证书,并重启相关组件(systemctl restart kubelet)。kubeadm init默认启用RBAC,无需额外参数;避免使用--authorization-mode=AlwaysAllow(完全开放权限)。ClusterRole定义细粒度权限(如read-only、pod-editor),再通过RoleBinding或ClusterRoleBinding绑定到特定用户/服务账户(如kubectl create clusterrolebinding admin-binding --clusterrole=cluster-admin --user=admin-user)。admin账户,避免未授权访问;为运维人员创建专用服务账户,仅授予必要权限。/etc/kubernetes/manifests/kube-apiserver.yaml),添加--audit-log-path=/var/log/kubernetes/audit.log(日志路径)、--audit-log-maxage=30(日志保留天数)、--audit-log-maxsize=100(单日志文件大小MB)等参数,开启审计日志记录。kube-audit工具或ELK Stack分析审计日志,监控异常操作(如频繁删除Pod、修改集群配置),及时响应安全事件。sudo apt install ufw),默认拒绝所有入站连接(sudo ufw default deny incoming),仅开放必要端口:
sudo ufw allow from 管理IP to any port 22 proto tcp);sudo ufw allow from 10.0.0.0/24 to any port 6443 proto tcp);sudo ufw allow from 10.0.0.0/24 to any port 10250 proto tcp);sudo ufw allow from 主节点IP to any port 2379 proto tcp)。--service-node-port-range参数限制端口范围(如30000-32767),并仅允许管理IP访问(通过UFW规则)。kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml)或Cilium等支持NetworkPolicy的插件,提供Pod级网络隔离。NetworkPolicy限制Pod间通信,例如:apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-by-default
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
上述策略默认拒绝所有Pod间入站和出站流量,再根据业务需求放行特定流量(如允许app: frontend访问app: backend的80端口)。library仓库、企业私有仓库)拉取镜像,避免使用未知来源的镜像(如第三方未验证的镜像)。kubectl set image命令或CI/CD流水线定期更新镜像(如nginx:1.25→nginx:1.26),修复已知漏洞。trivy image nginx:1.25),检测并修复高危漏洞(如CVE-2023-1234)。kubectl create secret generic db-password --from-literal=password=123456创建Secret,替代直接在Pod配置中硬编码敏感信息(如数据库密码);Secret默认以Base64编码存储,可通过加密卷(如encryptedVolume)进一步加密。automountServiceAccountToken: false,防止Pod意外获取Service Account Token(用于访问Kubernetes API)。kubescape scan framework all扫描集群,识别未配置RBAC、未启用审计日志等安全风险,并根据报告修复问题。velero backup create etcd-backup --include-namespaces=default --default-volumes-to-restic)、集群配置(如/etc/kubernetes/manifests)和持久化存储卷(PV),确保数据丢失时可快速恢复。