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

能否使用ingress-nginx将流量路由至非Kubernetes基础设施节点?

可行!用ingress-nginx路由流量到K8s外部机器的实现方案

当然可行!我自己在生产环境中就用过ingress-nginx把流量转发到集群外的虚拟机和物理机,核心思路是通过Kubernetes的Service和Endpoints资源把外部机器“接入”到集群的服务发现体系中,再让Ingress规则指向这些Service即可。下面给你详细拆解两种常用的实现方法:

方法一:使用ExternalName Service(适合有域名的外部服务)

如果你的外部机器可以通过域名访问,这种方法最简单,直接创建ExternalName类型的Service来映射外部域名:

  1. 创建ExternalName Service
apiVersion: v1
kind: Service
metadata:
  name: external-machine-service
spec:
  type: ExternalName
  externalName: vm-01.your-domain.com  # 替换成外部机器的域名
  ports:
    - port: 80  # Service暴露的端口
      targetPort: 8080  # 外部机器上服务实际监听的端口
  1. 创建指向该Service的Ingress规则
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: external-ingress
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"  # 外部服务是HTTPS的话改成HTTPS
spec:
  ingressClassName: nginx  # 确保和你的ingress-nginx控制器的className一致
  rules:
    - host: external.your-domain.com  # 用来访问外部服务的域名
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: external-machine-service
                port:
                  number: 80

方法二:使用ClusterIP Service + Endpoints(适合直接指定IP的外部机器)

如果外部机器只有IP没有域名,或者你不想依赖DNS解析,这种方法更灵活,直接通过Endpoints绑定外部IP,再用ClusterIP Service关联:

  1. 创建Endpoints资源(注意name要和后续的Service名称完全一致)
apiVersion: v1
kind: Endpoints
metadata:
  name: external-machine-ip-service
subsets:
  - addresses:
      - ip: 192.168.1.100  # 替换成外部机器的实际IP
      # 可以添加多个ip实现简单负载均衡:
      # - ip: 192.168.1.101
    ports:
      - port: 8080  # 外部机器上服务的监听端口
  1. 创建ClusterIP Service(不指定selector,自动关联上面的Endpoints)
apiVersion: v1
kind: Service
metadata:
  name: external-machine-ip-service
spec:
  type: ClusterIP
  ports:
    - port: 80  # Service暴露的端口
      targetPort: 8080  # 和Endpoints里的端口一致
  1. 创建Ingress规则(和方法一类似,只需把service.name改成external-machine-ip-service即可)

关键注意事项

  • 网络连通性检查:确保ingress-nginx控制器所在的Node节点能ping通外部机器,并且外部机器的服务端口(比如8080)没有被防火墙、安全组拦截。
  • HTTPS服务适配:如果外部服务是HTTPS,需要调整Ingress的annotation:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    
    如果外部机器用的是自签名证书,还可以添加nginx.ingress.kubernetes.io/ssl-verify-client: "off"来跳过证书验证(生产环境不建议,最好导入可信证书)。
  • 负载均衡扩展:如果有多个外部机器,只需在Endpoints里添加多个IP,ingress-nginx会自动以轮询的方式转发流量。
  • 测试验证:可以在集群内部的Pod里执行curl http://external.your-domain.com,或者从外部访问该域名,确认流量是否成功转发到外部机器。

内容的提问来源于stack exchange,提问作者yee379

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:56:33