首页 > 解决方案 > React App 无法在 OpenShift 中调用 Spring Boot Web 服务

问题描述

给定一个在 OpenShift 中部署在其自己的 pod 中的 React 应用程序,以及在另一个 pod 中部署的 Spring Boot Web 服务,但在相同的命名空间中,React 应用程序无法调用该 Web 服务。

Spring Boot webservice 有一个服务:

    NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
    backend-api    ClusterIP   <Redacted>       <none>        8080/TCP,8443/TCP,8778/TCP   6m

React 开发者工具显示了这个问题:

backend-api:8080/api/widgets:1 Failed to load resource: net::ERR_CONNECTION_TIMED_OUT

在 React pod 上,curl -v http://backend-api:8080/api/widgets正确运行会使用数据和 200 响应代码进行响应。

我们尝试将 Spring Boot 应用程序配置为允许 CORS:

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**").allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
        }
    };
}

但这并没有改变任何东西。

我们希望将 Web 服务保存在一个单独的 pod 中,并且不希望它在此命名空间之外可用。

更新

XHR 从@HMR 获取每个评论的结果

fetch("http://backend-api:8080/api/widgets", {
  "headers": {
    "accept": "application/json, text/plain, */*"
  },
  "referrer": "<redacted>",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": null,
  "method": "GET",
  "mode": "cors",
  "credentials": "omit"
});

标签: reactjsspring-bootopenshift

解决方案


推荐阅读