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

Spring Cloud Gateway部署Kubernetes后调用服务报UnknownHostException异常

问题根因

API网关报错UnknownHostException的核心原因是:Eureka客户端默认将Pod主机名作为实例地址注册到注册中心,而Kubernetes集群默认仅为Service资源提供稳定的DNS解析能力,普通Pod的主机名无法跨Pod解析。本地、Docker Compose环境默认支持容器主机名互访,因此不会触发该问题。

解决方案

1. 调整Eureka客户端注册配置

在API网关、图书微服务的配置文件中新增如下配置,让服务注册时优先使用Pod IP而非主机名:

eureka:
  instance:
    prefer-ip-address: true

你也可以直接在Kubernetes的两个Deployment(api-gateway、book-service)的env字段中注入对应环境变量,无需重新打包镜像:

env:
  # 保留原有其他环境变量,新增以下配置
  - name: eureka.instance.prefer-ip-address
    value: "true"

2. (可选)修正网关路由路径映射问题

你当前网关配置中uri: lb://BOOK-SERVICE/book会将所有匹配/book/**的请求转发到图书服务的/book/xxx路径,如果你的图书服务接口没有/book前缀,会出现404问题,建议调整为如下格式,按需配置路径重写:

spring:
  cloud:
    gateway:
      routes:
      - id: book
        uri: lb://BOOK-SERVICE
        predicates:
        - Path=/book/**
        filters:
        - RewritePath=/book(?<segment>/?.*), $\{segment}

3. 生效验证

重新应用Kubernetes配置,待服务启动完成后,先访问Eureka控制台确认BOOK-SERVICE的注册地址已经为Pod IP格式,再向网关的/book路径发起请求验证功能正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:06:06