You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为6节点RKE2 Kubernetes集群配置Nginx四层负载均衡器的配置疑问

6节点RKE2 Kubernetes集群配置Nginx四层负载均衡器的配置疑问

兄弟,我太懂你现在的困惑了——刚上手RKE2和Nginx四层负载的时候,很容易搞不清控制节点和worker节点该往配置里的哪个地方塞,我给你把核心场景拆解开,你一看就明白:

首先得明确,Nginx四层负载在你的RKE2集群里主要管两类流量,对应的节点配置完全不一样,咱们分开说:

一、给Kubernetes控制平面做负载(最关键的基础配置)

RKE2的3个控制平面节点上都跑着kube-apiserver(默认端口6443),这是整个集群的“大脑入口”——不管是worker节点加入集群,还是你用kubectl操作集群,都得连这个端口。咱们用LB把流量转发到3个控制节点,这样就算某个控制节点挂了,流量会自动切到其他正常节点,集群不会崩。

你需要在Nginx配置里用stream模块(四层负载必须用这个,不能用http块),核心配置是这样的:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

# 先确保加载stream模块,Ubuntu 22.04装nginx-full的话默认就有,要是用light版得手动装
load_module /usr/lib/nginx/modules/ngx_stream_module.so;

events {
    worker_connections 1024;
}

stream {
    # 定义上游服务器组:把3个控制平面的kube-apiserver地址加进来
    upstream kube-apiserver {
        server 192.168.100.11:6443;
        server 192.168.100.12:6443;
        server 192.168.100.13:6443;
        # 要是想给某个节点加权重,比如让master-1承担更多流量,就加weight=2,比如:
        # server 192.168.100.11:6443 weight=2;
    }

    # 监听LB的6443端口,把所有进来的流量转发到上面的控制节点组
    server {
        listen 6443;
        proxy_pass kube-apiserver;
        # 可选但推荐:加健康检查,避免转发到挂掉的节点
        proxy_connect_timeout 1s;
        proxy_next_upstream on;
    }
}

配置完这个,你后续加worker节点的时候,指定的server地址就是192.168.100.100:6443,kubectl的kubeconfig里也把server改成这个LB地址就行。

二、给业务服务做四层负载(如果需要外部访问业务)

要是你想让外部用户通过LB访问集群里的业务服务,这时候就得把流量转发到worker节点——因为默认情况下,RKE2的控制节点有污点,不会调度业务Pod,业务Pod都跑在worker上。

举个例子:假设你的业务服务用了NodePort类型,端口是30080(对应容器的80端口),那就在刚才的stream块里加这段配置:

stream {
    # 上面的kube-apiserver上游和server配置保留

    # 业务服务的上游组:把3个worker节点的NodePort加进来
    upstream my-business-app {
        server 192.168.100.14:30080;
        server 192.168.100.15:30080;
        server 192.168.100.16:30080;
    }

    # 监听LB的80端口,转发到业务服务的worker节点组
    server {
        listen 80;
        proxy_pass my-business-app;
    }
}

这样外部用户访问192.168.100.100:80,流量就会被转发到某个worker节点的30080端口,进而访问到业务Pod。

几个容易踩的坑

  • 别把控制节点和worker节点混在同一个上游组里!控制平面的流量只到控制节点,业务流量只到worker节点,混在一起只会乱套。
  • 四层负载必须用stream块,别用http块——http是七层负载,会解析HTTP内容,四层只看IP和端口,适合转发TCP/UDP流量(比如kube-apiserver的TCP流量、业务的TCP流量)。
  • 检查Nginx有没有stream模块:Ubuntu上装nginx-full包就自带,要是之前装的是nginx-light,得先卸载再装nginx-full,或者手动加载模块。

备注:内容来源于stack exchange,提问作者user3142695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:09:39