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