十二、eureka部署成功之后:浏览器访问的报错 ingress解析到后端的服务报错

image

 

image

 可以看到srv后端对应的endpoints的端口为空,ingerss是转发到了后端的srv,但是后端的endpoints为空,导致整个访问失败

image

 portal访问商品失败

步骤2:进入 portal pod 执行 curl 命令

执行以下命令进入 portal pod 并测试接口:

# 进入 portal pod 的 shell

kubectl exec -it portal-service-74656fbf49-zjx6j -n gongsi-dev -- /bin/sh

# 在 pod 内部执行 curl 测试

curl -v "http://order-service-svc.gongsi-dev.svc.cluster.local/order/queryAllOrder?page=1&limit=10"

image

 path不对,改成下面的形式

image

 

image

 

image

 

检查之后才发现数据库的地址和密码配置错误了

image

 

配置正确之后,再次在集群内部的pod进行访问

image

 接下来可以在网关进行测试

curl -v "http://gateway.test.com:9080/order/queryAllOrder?page=1&limit=10" \
-H "Accept: application/json" \
-H "Referer: http://portal.test.com:9080/"

这个通过网关(gateway.test.com)访问订单列表接口(/order/queryAllOrder)的请求已经失败。截图显示请求已发出但未展示关键的HTTP状态码和响应体,这是定位问题的关键。

核心问题在于:请求未成功到达后端服务或网关未能正确处理响应。

这里有几个关键点:第一就是网关是通过ingerss保留出来的,对应的网关的域名是http://gateway.test.com,其中9080是ingerss control修改的对外的端口,默认是80,因为和自己电脑上面安装的nginx默认的80端口存在冲突,就将地址修改为了9080,其中/order/queryAllOrder,这里就是网关的配置

spring:
  cloud:
    gateway:
      discovery:
        locator:
          #开启以服务id去注册中心上获取转发地址
          enabled: true
          ##小写serviceId
          lower-case-service-id: true
      routes:
        - id: product-service
          uri: lb://product-service
          filters:
            - StripPrefix=1
          predicates:
            - Path=/product/**

        - id: order-service
          uri: lb://order-service
          filters:
            - StripPrefix=1
          predicates:
            - Path=/order/**

        - id: stock-service
          uri: lb://stock-service
          filters:
            - StripPrefix=1
          predicates:
            - Path=/stock/**

eureka:
  instance:
    prefer-ip-address: true
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka.test.com:9080/eureka

路由2:order-service

  • 类似地,匹配 /order/**路径,去掉前缀后转发到 order-service

 

image

 最终会转发到 order-service/的这个接口queryAllOrder?page=1&limit=10" \

直接访问curl -k http://gateway.test.com:9080/product/queryAllProduct?page=1&limit=10可以返回数据,但是浏览器饭访问去报错

image

 

image

 经过判断应该是跨域的问题

image

 

 

在浏览器开发者工具的控制台中,运行以下 JavaScript 测试:

// 测试跨域请求
fetch('http://gateway.test.com:9080/product/queryAllProduct?page=1&limit=10', {
  method: 'GET',
  mode: 'cors',
  credentials: 'include'
})
.then(response => console.log(response))
.catch(error => console.error('CORS Error:', error));

保持发现的问题是

image

 在本地的window的hosts文件上面配置域名映射

  • 假设查到的IP是 192.168.1.100。

  • 修改本地hosts文件:

    • Windows系统:文件位于 C:\Windows\System32\drivers\etc\hosts,用管理员权限的记事本编辑。

    • Mac/Linux系统:文件位于 /etc/hosts,使用 sudo vim /etc/hosts编辑。

image

 再次尝试浏览器就成功访问了

image

 

posted on 2026-03-18 20:51  luzhouxiaoshuai  阅读(21)  评论(0)    收藏  举报

导航