Kubernetes在Ubuntu上如何实现负载均衡
导读:在 Ubuntu 上实现 Kubernetes 负载均衡 架构与方案选型 在 Ubuntu 上运行 Kubernetes 时,负载均衡可按层级分为: 四层:通过 Service: LoadBalancer 直接对外暴露端口,流量在节点/...
在 Ubuntu 上实现 Kubernetes 负载均衡
架构与方案选型
- 在 Ubuntu 上运行 Kubernetes 时,负载均衡可按层级分为:
- 四层:通过 Service: LoadBalancer 直接对外暴露端口,流量在节点/云负载均衡器与后端 Pod 之间转发,适合简单的对外暴露与端口转发。
- 七层:通过 Ingress(如 Nginx Ingress Controller)统一入口,基于 Host/Path 做路由、TLS 终止、限流等高级能力,适合多服务统一接入与灰度发布。
- 数据面加速:在节点上启用 IPVS 作为 kube-proxy 的负载均衡模式,替代默认的 iptables,在高并发下具备更好的吞吐与调度算法支持(如 rr/wrr/sh)。
快速上手步骤
- 前提:已准备好 Kubernetes 集群(如 kubeadm/Minikube/Kind),并可用 kubectl 操作。
- 四层负载均衡(Service: LoadBalancer)
- 部署示例应用
kubectl create deployment webapp --image=nginx:latest --replicas=3 kubectl expose deployment webapp --port=80 --target-port=80 --type=LoadBalancer- 获取外部地址并访问
kubectl get svc webapp # 输出示例:webapp LoadBalancer 10.96.123.45 203.0.113.10 80:31234/TCP curl http://203.0.113.10 - 七层负载均衡(Ingress)
- 部署 Ingress Controller(以 Nginx 为例)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml- 创建应用 Service(同上)
- 配置 Ingress 路由
应用并检查地址:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: webapp-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /webapp pathType: Prefix backend: service: name: webapp port: number: 80kubectl apply -f ingress.yaml kubectl get ingress # 使用返回的 ADDRESS 访问:curl http://< ADDRESS> /webapp - 说明
- 在本地/裸金属环境,LoadBalancer 类型的 Service 可能需配合 MetalLB 等实现分配外部 IP;在公有云上会自动对接云厂商的负载均衡器。
在 Ubuntu 节点启用 IPVS 提升转发性能
- 安装工具与加载内核模块
sudo apt-get update
sudo apt-get install -y ipvsadm ipset
sudo modprobe -- ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh
- 配置 kube-proxy 使用 IPVS(示例 ConfigMap)
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
# 可选:调度算法
# scheduler: "rr"
- 应用并重启 kube-proxy(按你的部署方式调整,如 DaemonSet 滚动更新或 systemd 重启)
# 如使用 kubeadm,常见路径为 /etc/kubernetes/manifests/kube-proxy.yaml
# 修改后等待 kube-proxy Pod 重启生效
kubectl get pods -n kube-system -l k8s-app=kube-proxy
ipvsadm -Ln # 验证规则是否已生成
- 提示
- 确保节点内核启用 ip_vs 相关模块,且 kube-proxy 配置为 mode: ipvs;集群内 Service 的 ClusterIP/NodePort 流量将由 IPVS 进行分发。
常见问题与排查
- Service 的 External-IP 长时间处于 :本地/裸金属环境未部署 MetalLB 等 LoadBalancer 实现;公有云会自动分配。
- Ingress 无法访问:确认 Ingress Controller 已就绪(Pod Running、Service 有外部地址),以及域名/路径与后端 Service 端口匹配。
- IPVS 未生效:检查节点是否加载 ip_vs 模块、kube-proxy 是否为 ipvs 模式,并用 ipvsadm -Ln 查看是否存在虚拟服务与真实服务器条目。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Kubernetes在Ubuntu上如何实现负载均衡
本文地址: https://pptw.com/jishu/771259.html
