k8s在centos上的负载均衡
导读:在 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/Nginx 为 kube-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 端口并配置证书。
- 部署 Ingress Controller(如 Nginx Ingress),再创建 Ingress 资源:
三、裸金属环境的 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 台 Master 的 6443/80 做四层转发与健康检查,实现 API Server 与业务入口的高可用。
- 使用 MetalLB 提供 LoadBalancer IP
- 在裸金属集群部署 MetalLB,为 Service type: LoadBalancer 分配可路由的 External IP,与 Ingress 配合即可对外提供稳定的 L4/L7 入口。
四、控制面入口的高可用
- 使用 Keepalived + HAProxy/Nginx 为 kube-apiserver 提供 VIP,所有 kubelet 与控制面组件均通过该 VIP 访问 API。
- 关键配置要点:
- state MASTER/BACKUP、priority 区分主备;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 等工具以便排障与调优。
- 关闭 swap、按需调整 SELinux/firewalld、开启桥接流量转发:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: k8s在centos上的负载均衡
本文地址: https://pptw.com/jishu/788361.html
