Kubernetes 1.18.6集群部署后深度优化:Dashboard配置与IPVS网络调优实战
当Kubernetes集群完成基础部署后,真正的挑战才刚刚开始。本文将带您深入两个关键优化场景:Web管理界面Dashboard的精细化配置,以及网络性能提升利器IPVS模式的实战启用。这些进阶操作不仅能提升集群管理效率,还能显著改善网络性能表现。
1. Kubernetes Dashboard:从安装到安全加固
Dashboard作为Kubernetes官方提供的Web UI,是集群管理的可视化门户。但默认安装往往存在访问限制和安全隐患,我们需要进行深度定制。
1.1 定制化安装Dashboard
首先获取官方推荐的部署清单并进行关键修改:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta5/aio/deploy/recommended.yaml -O dashboard.yaml需要修改的关键配置点:
- Service类型变更:将ClusterIP改为NodePort,便于外部访问
- 自定义端口:指定固定的NodePort端口(如30008)
- 证书配置:注释掉自动生成的证书配置,准备使用自签名证书
修改后的Service部分示例:
kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 30008 selector: k8s-app: kubernetes-dashboard1.2 证书创建与安全配置
自签名证书能解决浏览器警告问题,同时提高安全性:
mkdir -p dashboard-certs && cd dashboard-certs # 生成私钥 openssl genrsa -out dashboard.key 2048 # 创建证书签名请求 openssl req -new -key dashboard.key -out dashboard.csr -subj '/CN=dashboard-cert' # 生成自签名证书(有效期10年) openssl x509 -req -days 3650 -in dashboard.csr -signkey dashboard.key -out dashboard.crt # 创建Kubernetes Secret kubectl create secret generic kubernetes-dashboard-certs \ --from-file=dashboard.key --from-file=dashboard.crt \ -n kubernetes-dashboard1.3 权限控制最佳实践
为Dashboard创建专用管理员账号比直接使用集群admin更安全:
# dashboard-admin.yaml apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard然后绑定集群管理员角色:
# dashboard-admin-bind-cluster-role.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin-bind-cluster-role roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboard应用配置后获取访问令牌:
kubectl apply -f dashboard-admin.yaml kubectl apply -f dashboard-admin-bind-cluster-role.yaml # 获取访问令牌 kubectl -n kubernetes-dashboard describe secret \ $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}')2. IPVS模式:提升Kubernetes网络性能
Kubernetes默认使用iptables实现Service的负载均衡,但在大规模集群中性能会成为瓶颈。IPVS作为Linux内核级的负载均衡方案,能显著提升性能。
2.1 IPVS核心优势解析
| 特性 | iptables模式 | IPVS模式 |
|---|---|---|
| 负载均衡算法 | 仅支持随机均衡 | 支持多种高级算法 |
| 规则存储 | 线性链表 | 哈希表 |
| 性能表现 | O(n)复杂度 | O(1)复杂度 |
| 连接跟踪 | 每个Pod独立跟踪 | 全局连接跟踪 |
| 适用规模 | 小规模集群 | 大规模生产环境 |
IPVS支持丰富的调度算法:
- rr:轮询调度
- wrr:加权轮询调度
- lc:最小连接调度
- wlc:加权最小连接调度
- lblc:基于局部性的最小连接调度
2.2 启用IPVS模式实战
首先确保所有节点已加载IPVS内核模块:
cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF chmod 755 /etc/sysconfig/modules/ipvs.modules bash /etc/sysconfig/modules/ipvs.modules验证模块加载:
lsmod | grep ip_vs修改kube-proxy配置启用IPVS:
kubectl edit configmap kube-proxy -n kube-system找到mode字段并修改为:
mode: "ipvs"重启kube-proxy Pod使配置生效:
kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'验证IPVS规则:
ipvsadm -Ln2.3 IPVS调优参数
在ConfigMap中可添加以下优化参数:
ipvs: excludeCIDRs: null minSyncPeriod: 0s scheduler: "wrr" syncPeriod: 30s tcpFinTimeout: 0s tcpTimeout: 0s udpTimeout: 0s关键参数说明:
- scheduler:指定负载均衡算法,默认为wrr
- syncPeriod:IPVS规则同步间隔
- tcpTimeout:TCP连接超时时间(秒)
3. 监控与问题排查
优化后的集群需要完善的监控来验证效果。
3.1 部署Metrics Server
Metrics Server是集群资源监控的核心组件:
git clone https://github.com/kubernetes-incubator/metrics-server.git cd metrics-server/deploy/1.8+/修改deployment配置添加关键参数:
args: - --cert-dir=/tmp - --secure-port=4443 - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname部署并验证:
kubectl apply -f . # 等待1-2分钟后查看节点资源使用 kubectl top nodes3.2 Dashboard集成监控
安装完成后,Dashboard将自动显示资源使用情况。如果未显示,检查:
- Metrics Server是否正常运行
- Dashboard是否正确配置了metrics-scraper服务
常见问题排查命令:
# 检查Metrics Server日志 kubectl logs -n kube-system $(kubectl get pods -n kube-system | grep metrics-server | awk '{print $1}') # 验证API可用性 kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" # 检查服务端点 kubectl get endpoints -n kube-system metrics-server4. 安全加固与日常维护
4.1 Dashboard安全最佳实践
- 启用HTTPS:始终使用HTTPS访问
- 限制访问IP:通过NetworkPolicy或外部负载均衡器限制访问源IP
- 定期轮换令牌:设置令牌有效期并定期更换
- 审计日志:开启Dashboard的访问日志审计
示例NetworkPolicy:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: dashboard-allow-only-office namespace: kubernetes-dashboard spec: podSelector: matchLabels: k8s-app: kubernetes-dashboard policyTypes: - Ingress ingress: - from: - ipBlock: cidr: 192.168.1.0/24 # 只允许办公室IP段访问4.2 IPVS模式维护要点
- 监控连接数:定期检查
ipvsadm -Ln输出 - 性能基准测试:比较模式切换前后的延迟和吞吐量
- 内核参数调优:
# 增加连接跟踪表大小 echo "net.netfilter.nf_conntrack_max=1048576" >> /etc/sysctl.conf sysctl -p # 查看当前连接数 cat /proc/sys/net/netfilter/nf_conntrack_count- 故障转移测试:模拟节点故障验证IPVS的快速故障转移能力
在集群规模扩大时,考虑以下进阶优化:
- 根据业务特点选择最适合的调度算法
- 调整
syncPeriod平衡实时性和性能 - 对特定Service使用
externalTrafficPolicy: Local保留客户端IP