Kubernetes:如何让Rancher Ingress负载均衡器监听不同IP地址(非端口)
解决方案:在Rancher管理的单节点集群中通过eth1(办公VLAN)暴露服务
针对你的双网卡RancherOS主机场景——eth0绑定管理VLAN仅用于Rancher Server,eth1绑定办公VLAN需要对外暴露服务,我整理了一套实操步骤来实现需求:
1. 调整Ingress Controller的网络绑定
默认Kubernetes Ingress Controller(比如常用的NGINX Ingress)会监听主机所有网卡的流量,我们需要把它绑定到eth1的IP(10.10.0.231)上,确保办公VLAN的流量只走这块网卡:
方式一:通过Rancher UI可视化修改
- 登录你的Rancher Server后台(10.30.0.231:8080),进入目标集群
- 导航到Service & Ingress > Services,找到Ingress Controller对应的Service(通常命名为
nginx-ingress-controller,位于kube-system命名空间) - 编辑该Service,在External IPs字段填入
10.10.0.231,保存修改即可完成绑定
方式二:通过YAML配置命令行修改
如果习惯用命令行操作,创建或修改Ingress Controller的Service配置文件:
apiVersion: v1 kind: Service metadata: name: nginx-ingress-controller namespace: kube-system spec: type: NodePort externalIPs: - 10.10.0.231 # 指定eth1的IP地址 ports: - name: http port: 80 targetPort: 80 protocol: TCP - name: https port: 443 targetPort: 443 protocol: TCP selector: app: nginx-ingress # 匹配Ingress Controller Pod的标签,根据实际情况调整
执行命令应用配置:kubectl apply -f ingress-controller-service.yaml -n kube-system
2. 创建Ingress资源暴露目标服务
假设你要暴露的内部服务名为office-app,运行在80端口,创建如下Ingress配置文件:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: office-vlan-expose annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" # 不需要HTTPS的话添加这条 spec: rules: # 可以用自定义域名,也可以直接用eth1的IP访问 - host: office-app.yourcompany.com http: paths: - path: / pathType: Prefix backend: service: name: office-app port: number: 80 # 如果直接用IP访问,可替换成下面的规则 # - http: # paths: # - path: / # pathType: Prefix # backend: # service: # name: office-app # port: # number: 80
执行命令应用配置:kubectl apply -f office-ingress.yaml
3. 验证配置有效性
- 从办公VLAN内的任意机器访问
http://10.10.0.231(或你设置的自定义域名),确认能正常访问目标服务 - 查看Ingress Controller的日志,确认流量是通过eth1进入的:
kubectl logs -n kube-system <nginx-ingress-pod-name>
额外注意事项
- 确保RancherOS主机的防火墙规则允许eth1网卡的80/443端口流量(如果开启了防火墙)
- 如果是Rancher自动部署的集群,默认已经安装了Ingress Controller,只需要调整Service的
externalIPs即可 - 若需要暴露多个服务,可以在同一个Ingress资源中添加多组
rules,或者创建多个独立的Ingress资源
内容的提问来源于stack exchange,提问作者FlexArts
相关产品推荐
相关产品推荐

