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

时间:2019-08-04 15:51:52

标签: kubernetes kubernetes-service

因此,我编写了一个在路径/api/v1/books上侦听的API,并将其作为部署部署在我的k8s集群上,创建了服务(restapi-service),以便我们可以从另一个Pod中调用它。 。 现在,我创建了另一个部署(restapi-ui-deployment),该部署只有一个.html页面,并将其部署在nginx上,最终调用了我们先前创建的服务来获取响应。 现在,问题是当我执行restapi-ui-deployment的窗格时,我就能成功卷曲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.")
      }
    }

1 个答案:

答案 0 :(得分:1)

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