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

如何通过k3s Ingress将流量路由至宿主机或本地网络非K8s服务?

可行,无需额外反向代理

完全可以通过k3s的Ingress将流量路由到集群外的本地服务——不管是宿主机上的服务还是同局域网内的其他机器服务,不需要在k3s服务器前额外部署反向代理。下面是具体实现方式:

场景1:路由到k3s宿主机上的服务(127.0.0.1:99)

注意:k3s默认的Ingress Controller(Traefik)运行在容器中,直接用127.0.0.1会指向容器自身而非宿主机,所以需要用宿主机的实际局域网IP(比如192.168.1.5)来配置。

步骤1:创建Endpoint资源

Endpoint用来定义集群外的服务地址:

apiVersion: v1
kind: Endpoints
metadata:
  name: local-host-service
subsets:
- addresses:
  - ip: 192.168.1.5  # 替换成k3s宿主机的局域网IP
  ports:
  - port: 99
    name: http

步骤2:创建ClusterIP Service关联Endpoint

这个Service用来给Ingress提供路由目标:

apiVersion: v1
kind: Service
metadata:
  name: local-host-service
spec:
  ports:
  - port: 80
    targetPort: 99
    name: http
  type: ClusterIP

这里Service的port可以选集群内不冲突的任意值,targetPort要和Endpoint里的端口一致。

步骤3:创建Ingress规则

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: local-service-ingress
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"  # 不需要HTTPS可添加此注解
spec:
  rules:
  - host: foo.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: local-host-service
            port:
              number: 80

场景2:路由到本地网络其他机器的服务(192.168.1.7:99)

配置逻辑和上述一致,仅需把Endpoint里的ip替换成目标机器的局域网IP即可:

修改后的Endpoint示例

apiVersion: v1
kind: Endpoints
metadata:
  name: local-network-service
subsets:
- addresses:
  - ip: 192.168.1.7  # 替换成目标机器的局域网IP
  ports:
  - port: 99
    name: http

对应的Service和Ingress只需将服务名改为local-network-service即可。

注意事项

  • 确保k3s节点(单节点场景即宿主机)能正常访问目标服务的IP和端口,比如防火墙需开放对应端口、网络连通性正常。
  • 若宿主机IP为动态分配,需定期更新Endpoint的IP,或用脚本自动同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:15:04