在Ubuntu系统上部署Kubernetes集群时,安全配置需覆盖系统基础、集群核心、网络通信、权限控制、监控审计五大层面,形成纵深防御体系,以下是具体措施:
最小权限原则与镜像安全
确保容器以非root用户身份运行(通过Dockerfile的USER指令或容器运行时配置),减少容器逃逸后的攻击面;仅使用可信镜像仓库(如Harbor、Quay)的镜像,定期通过Trivy、Clair等工具扫描镜像漏洞,及时更新镜像修复已知风险。
系统时间同步
安装并配置NTP服务(如ntpdate、chrony),确保Ubuntu节点与可靠时间源同步,避免因时间不同步导致TLS证书验证失败或审计日志时间混乱。
禁用Swap与内核参数调优
Kubernetes要求节点禁用Swap(通过swapoff --all命令并注释/etc/fstab中的Swap行),防止内存溢出时影响Pod稳定性;调整内核参数支持Kubernetes网络功能(如net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1),通过sysctl -p使配置生效。
启用TLS加密通信
使用kubeadm init初始化集群时,通过--apiserver-cert-extra-sans参数为API Server证书添加额外Subject Alternative Name(SAN,如外网IP或域名),确保证书有效性;所有组件(API Server、etcd、kubelet、kube-proxy)间通信均通过TLS加密,防止数据泄露或篡改。
配置kubelet安全参数
禁用kubelet匿名访问(--anonymous-auth=false),强制API Server通过客户端证书认证kubelet(--kubelet-client-certificate、--kubelet-client-key);关闭kubelet只读端口(--read-only-port=0),防止未经授权的集群信息泄露。
部署网络策略插件
使用Calico、Cilium等网络插件(通过kubectl apply -f部署对应YAML文件),实现Pod间、命名空间间的细粒度网络隔离;默认启用全局拒绝策略(如Calico的GlobalNetworkPolicy),拒绝所有未明确允许的流量,再按需开放特定服务的访问权限。
示例网络策略
database命名空间启用完全隔离策略,拒绝所有入站流量,仅允许出站访问集群内DNS服务。RBAC核心配置
Role定义命名空间内资源的权限(如pods、services),ClusterRole定义集群范围资源(如nodes、namespaces)或跨命名空间的权限(如pods);RoleBinding将角色权限授予特定命名空间的主体(用户、组、服务账号),ClusterRoleBinding用于集群范围或跨命名空间的授权;view只读、edit编辑、admin命名空间管理),避免自定义过度权限。最佳实践
get/list/create pods和deployments权限);my-app-sa),而非使用默认的default服务账号,通过RoleBinding绑定最小权限;kubectl auth can-i验证权限,通过kubectl get rolebindings --all-namespaces查看绑定情况,清理不再需要的权限。启用API Server审计日志
创建审计策略文件(如/etc/kubernetes/audit/audit-policy.yaml),定义审计规则(如delete、update操作记录为RequestResponse级别,get、list操作记录为Metadata级别);修改kube-apiserver配置(--audit-policy-file、--audit-log-path、--audit-log-maxsize),重启kubelet使配置生效,审计日志存储于/var/log/kubernetes/audit.log。
部署监控与告警系统
使用Prometheus+Grafana监控集群运行状态(如节点资源使用率、Pod状态、API Server延迟),设置告警规则(如异常API调用、资源使用超标),及时发现并响应安全事件。
apt update && apt upgrade)和Kubernetes组件(kubeadm、kubelet)为最新版本,及时修复已知漏洞;Kubernetes Secrets管理敏感信息(如数据库密码、API密钥),避免硬编码在Pod或ConfigMap中;以上措施需结合集群规模与业务需求调整,核心目标是降低攻击面、限制权限范围、实时监测异常,确保Ubuntu上Kubernetes集群的安全稳定运行。