无法使用 xmlhttprequest 对象从另一个 pod 访问服务

unable to access a service from another pod, using xmlhttprequest object

所以,我写了一个 API 监听路径 /api/v1/books 并部署为我的 k8s 集群上的部署,创建服务 (restapi-service) 以便我们可以从另一个 pods 调用它。 现在我创建了另一个部署 (restapi-ui-deployment),它只有一个 .html 页面并且部署在 nginx 上,它最终调用我们之前创建的服务来获取响应。 现在,问题是当我执行 restapi-ui-deployment 的 pods 时,我能够成功卷曲 http://restapi-service:8081/api/v1/books。但是如果我们试图从部署的 .html 页面做同样的事情,我会得到

GET http://restapi-service:8081/api/v1/books net::ERR_NAME_NOT_RESOLVED

下面是部署为 restapi-ui-deployment

的代码
if (xmlObj != null){
      xmlObj.open("GET", "http://restapi-service:8081/api/v1/books", true)
      xmlObj.onreadystatechange = processResponse;
      xmlObj.send(null)
    }
    else{
      console.log("There was an error getting the object.")
    }
    function processResponse(){
      if (xmlObj.status == 200 && xmlObj.readyState == 4){
        console.log("Got the response successfully")
        response = xmlObj.responseText
      }
      else{
        console.log("There was an issue getting the response.")
      }
    }

恐怕您对应用程序的工作方式感到困惑。 XmlHttpRequest 源自网络浏览器,因此在 kubernetes 集群之外,而不是来自集群内的 nginx。 (nginx 服务于 html 页面) kubernetes dns 在 kubernetes 之外不可用,也无法从外部连接到 ClusterIP。 解决方案:创建一个适当的 Ingress 并从您的前端调用它,或者在您交付前端的 nginx 上提供一个代理。 (这将导致真正将请求来源作为您的 nginx)