无法使用 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)
所以,我写了一个 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)