首页主机资讯k8s在centos上的负载均衡

k8s在centos上的负载均衡

时间2026-01-21 08:51:04发布访客分类主机资讯浏览379
导读:在 CentOS 上落地 Kubernetes 负载均衡 一、方案总览 面向应用的南北向流量:优先使用 Service: LoadBalancer(云上自动对接云LB)或 Ingress Controller(如 Nginx Ingres...

在 CentOS 上落地 Kubernetes 负载均衡

一、方案总览

  • 面向应用的南北向流量:优先使用 Service: LoadBalancer(云上自动对接云LB)或 Ingress Controller(如 Nginx Ingress)承载 HTTP/HTTPS 与域名路由。
  • 裸金属/私有环境:部署 MetalLB 提供 LoadBalancer 类型的外部 IP;或采用 Nginx/HAProxy + Keepalived 自建四层/七层负载均衡器。
  • 面向集群控制面的高可用:用 Keepalived + HAProxy/Nginxkube-apiserver 提供 VIP,保证 API 入口稳定与负载分担。
  • 数据面转发优化:在 kube-proxy 启用 IPVS 模式以获得更高的吞吐与更低的连接开销。
    以上路径覆盖从应用到控制面的主要负载均衡场景,可按环境组合使用。

二、面向应用的负载均衡

  • Service 类型选型与示例
    • ClusterIP:仅集群内部访问(默认)。
    • NodePort:在每个节点开放静态端口,便于外部访问或对接外部 LB。
    • LoadBalancer:请求云厂商创建外部负载均衡器(裸金属可配合 MetalLB)。
    • 示例(NodePort,便于外部访问与测试):
      apiVersion: v1
      kind: Service
      metadata:
        name: my-service
      spec:
        selector:
          app: my-app
        ports:
          - protocol: TCP
            port: 80
            targetPort: 8080
            nodePort: 30080   # 可选:指定 30000-32767 范围
        type: NodePort
      
    • 示例(LoadBalancer,云上或 MetalLB 环境):
      apiVersion: v1
      kind: Service
      metadata:
        name: my-service
      spec:
        selector:
          app: my-app
        ports:
          - protocol: TCP
            port: 80
            targetPort: 8080
        type: LoadBalancer
      
  • Ingress 承载 HTTP/HTTPS 路由
    • 部署 Ingress Controller(如 Nginx Ingress),再创建 Ingress 资源:
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: my-ingress
        annotations:
          kubernetes.io/ingress.class: "nginx"
      spec:
        rules:
        - host: app.example.com
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: frontend-service
                  port:
                    number: 80
      
    • 建议启用 HTTPS/TLS,对外暴露 443 端口并配置证书。

三、裸金属环境的 LoadBalancer 与高可用

  • 自建四层/七层 LB(Nginx/HAProxy + Keepalived)
    • 在两台或多台 CentOS 机器上安装 Keepalived + Nginx/HAProxy,为后端 NodePort 或后端服务端口提供 VIP 与故障切换。
    • Keepalived 健康检查脚本示例(检查 kube-apiserver 或业务端口):
      #!/usr/bin/env bash
      err=0
      for k in $(seq 1 5);
           do
        check_code=$(pgrep kube-apiserver || ss -lntp | grep ':6443\|:80' | grep -q . &
          &
           echo ok)
        if [[ $check_code == "" ]];
           then
          err=$((err+1))
          sleep 5
          continue
        else
          err=0
          break
        fi
      done
      if [[ $err -ne 0 ]];
           then
        systemctl stop keepalived
        exit 1
      else
        exit 0
      fi
      
    • 典型架构:两台 LB(VIP: 192.168.121.100)3 台 Master6443/80 做四层转发与健康检查,实现 API Server 与业务入口的高可用。
  • 使用 MetalLB 提供 LoadBalancer IP
    • 在裸金属集群部署 MetalLB,为 Service type: LoadBalancer 分配可路由的 External IP,与 Ingress 配合即可对外提供稳定的 L4/L7 入口。

四、控制面入口的高可用

  • 使用 Keepalived + HAProxy/Nginxkube-apiserver 提供 VIP,所有 kubelet 与控制面组件均通过该 VIP 访问 API。
  • 关键配置要点:
    • state MASTER/BACKUPpriority 区分主备;virtual_router_id 一致;authentication 统一;virtual_ipaddress 配置 VIP。
    • 健康检查脚本监控 kube-apiserver 进程或 6443 端口,异常时主动 stop keepalived 触发切换。
  • 部署完成后,kubeadm 初始化/加入时把 controlPlaneEndpoint 指向 VIP,即可获得稳定的 API 入口与负载分担。

五、数据面转发与性能优化

  • kube-proxy 启用 IPVS 模式(推荐):
    • 加载内核模块:
      cat >
          /etc/sysconfig/modules/ipvs.modules <
          <
          'EOF'
      #!/bin/bash
      ipvs_modules_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
      for i in $(ls $ipvs_modules_dir | sed -r 's#(.*)\.ko.*#\1#');
           do
        /sbin/modinfo -F filename $i &
          >
          /dev/null &
          &
           /sbin/modprobe $i
      done
      EOF
      chmod +x /etc/sysconfig/modules/ipvs.modules
      bash /etc/sysconfig/modules/ipvs.modules
      
    • 在 kube-proxy 配置中设置 mode: ipvs,可获得更好的连接调度性能与可观测性(配合 ipvsadm 查看)。
  • 操作系统与网络建议:
    • 关闭 swap、按需调整 SELinux/firewalld、开启桥接流量转发:
      swapoff -a
      setenforce 0
      sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
      cat >
          /etc/sysctl.d/k8s.conf <
          <
          EOF
      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables  = 1
      vm.swappiness = 0
      EOF
      sysctl --system
      
    • 按需安装 ipvsadm/ebtables/ethtool 等工具以便排障与调优。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: k8s在centos上的负载均衡
本文地址: https://pptw.com/jishu/788361.html
CentOS下JMeter插件如何安装与管理 怎样配置Debian Nginx提高服务器性能

游客 回复需填写必要信息