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

Rancher 2.6+:如何指定NodePort服务的目标FQDN?

关于Rancher 2.6及以上版本配置NodePort服务目标FQDN的问题

Kubernetes原生的NodePort服务本身不支持直接指定目标FQDN,它的核心作用是把集群内Service的端口映射到节点端口,流量默认转发到集群内的Pod或后端Service的IP,而非外部FQDN。但针对你需要对接外部LB的场景,可以通过以下两种方式实现需求:

方式一:ExternalName Service + NodePort组合使用

先创建一个ExternalName类型的Service,指向你的目标外部FQDN:

apiVersion: v1
kind: Service
metadata:
  name: external-target-service
spec:
  type: ExternalName
  externalName: your-target-fqdn.example.com

再创建NodePort类型的Service,将流量转发到这个ExternalName Service:

apiVersion: v1
kind: Service
metadata:
  name: nodeport-proxy-service
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080 # 可自定义固定NodePort,不指定则由集群自动分配
  externalTrafficPolicy: Cluster

这种方式下,NodePort的流量会先经过集群内的kube-proxy,再转发到指定的外部FQDN。

方式二:通过Ingress对接外部LB

如果你的外部LB是通过Ingress暴露服务,直接在Ingress规则中配置后端为外部FQDN即可,无需依赖NodePort:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: external-lb-ingress
  annotations:
    nginx.ingress.kubernetes.io/upstream-vhost: "your-target-fqdn.example.com"
    nginx.ingress.kubernetes.io/server-snippet: |
      resolver 8.8.8.8; # 指定DNS解析器,确保能解析外部FQDN
spec:
  rules:
  - host: your-ingress-host.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: external-target-service
            port:
              number: 80

这里的external-target-service就是前面创建的ExternalName Service,Ingress控制器会负责将流量转发到指定的外部FQDN。

需要注意的是,Rancher本身没有额外的专属注解来让NodePort服务直接指向FQDN,这是由Kubernetes的Service模型设计决定的,NodePort的定位就是面向集群内后端服务的转发。

外部LB配置界面

内容的提问来源于stack exchange,提问作者Guillaume Barré

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:00:50