温馨提示×

Linux环境中K8S如何实现负载均衡

小樊
32
2026-01-01 01:54:49
栏目: 云计算

Linux环境中K8S负载均衡实现路径

在 Linux 上的 Kubernetes 集群中,负载均衡通常分为三层:集群内部的 Service 负载均衡、基于域名的 Ingress 路由与负载均衡,以及面向公网的 外部负载均衡器/高可用 VIP。下面按场景给出可落地的实现方式与关键配置。

一 集群内部 Service 负载均衡

  • 使用 Service: ClusterIP 为一组 Pod 提供稳定虚拟 IP 和端口转发,kube-proxy 在节点上维护转发规则,实现四层负载均衡。适用于集群内部服务间调用。示例:
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9376
      type: ClusterIP
    
    如需从外部访问,可改为 Service: LoadBalancer(云厂商会创建外部负载均衡器)或配合 Ingress 使用。Ingress 本身也是 Kubernetes 资源,需要部署 Ingress Controller(如 Nginx Ingress)后才能生效。

二 提升 Service 转发性能 使用 IPVS 模式

  • 在节点上启用 IPVS(Linux 内核级 L4 负载均衡),相较 iptables 具备更高吞吐与更多调度算法(如 rr、wrr、sh)。启用步骤要点:
    1. 安装管理工具:yum/apt 安装 ipvsadm;2) 加载内核模块:modprobe ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh;3) 配置 kube-proxy 使用 IPVS(如 kubeadm 场景可在 kubelet 启动参数加入 –proxy-mode=ipvs 并重启 kubelet);4) 校验:ipvsadm -L -n 查看规则,kubectl get pods -A 确认 kube-proxy 正常运行。此模式适合大规模服务与高并发场景。

三 外部访问与 Ingress 路由负载均衡

  • 部署 Ingress Controller(如 Nginx Ingress),通过 Ingress 资源定义基于域名/路径的路由、TLS、限流、重写等能力,由 Controller 对后端 Service 做七层负载均衡与反向代理。示例:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
    spec:
      rules:
      - host: app.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80
    
    安装 Controller 后,创建上述 Ingress 即可通过域名访问并自动负载到后端 Pods。若需对外暴露,可结合云厂商的 LoadBalancer Service 或下文的自建外部 LB。

四 自建外部负载均衡器与高可用 VIP

  • 在裸金属或私有云环境,常用 HAProxy + KeepalivedLVS + Keepalived 搭建高可用外部负载均衡器,对外提供 VIP。思路:在两台或多台 LB 节点上运行负载均衡器(如 HAProxy 或 LVS/DR),用 Keepalived 通过 VRRP 提供 VIP 漂移与健康检查;后端指向各 Node 的 NodePort 或集群内 ClusterIP。示例 HAProxy 片段:
    frontend http-in
      bind *:80
      default_backend servers
    backend servers
      balance roundrobin
      server node1 192.168.3.101:80 check
      server node2 192.168.3.102:80 check
    
    配合 Keepalived 配置 virtual_ipaddress(如 192.168.2.254/24)与健康检查脚本,实现主备切换与故障剔除。该方案稳定可控,适合对公网入口做统一暴露与高可用。

0