我在AWS Kubernates上部署了一个用node.js开发的API服务。 API 服务还公开包含图像的文件夹的静态路径。 但该服务无法从本地主机获取图像。
获取图像的服务,使用request库,我无法更改它,并执行以下函数:
function(img, url, callback) {
var requestOpts = {
url: url,
method: 'GET',
encoding: null,
gzip:true
};
request(requestOpts, function (err, response, body) {
if (!err && response.statusCode === 200) {
img.onload = function() {
callback(null);
};
img.onerror = function() {
callback(new Error('Could not load marker-file image: ' + url));
};
img.src = body;
} else {
callback(new Error('Could not load marker-file image: ' + url));
}
});
}
服务始终如一
Couldn't get marker-file http://127.0.0.1:4000/images/myimage.png
在 POD 的 shell 中,我们尝试获取 CURL
curl http://127.0.0.1:4000/images/myimage.png
并且有效,
还尝试测试节点是否可以解析 localhost url
dns.resolve4("127.0.0.1",console.log)
又有效了可以从外部访问该服务,如果我尝试从外部 DNS 获取图像
https://my-website.com/images/myimage.png我可以看到我的图像,但 API 服务看不到
我还尝试更改服务可以从中获取图像的 URL,但没有成功
我想了解如何让该服务在 K8s 内将图像本地化。
感谢您的帮助
node 命令启动了 node.js
fs = require('fs')
fs.readFile('/var/www/mysite/images/myimage.png', 'utf8', function (err,data) {
if (err) { return console.log(err); }
console.log(data);
});
var request = require('request')
var img = null;
var requestOpts = {
url: "http://127.0.0.1:4000/images/myimage.png",
method: 'GET',
encoding: null, // if you expect binary data, you should set encoding: null
gzip: true
};
request(requestOpts, function (err, response, body) {
if (!err && response.statusCode === 200) {
img = body;
} else {
console.log(new Error('Could not load marker-file image: ' + JSON.stringify(url)));
}
});
此时,库返回错误“无法加载标记文件图像”,并在控制台中滚动错误,我们发现了带有“http_proxy”的 Url 部分。
这有助于我们了解 Docker 配置中存在一些错误:
FROM node:10-slim
...
ENV HTTP_PROXY="http://proxy-aws:8080"
...
ENTRYPOINT ["node", "index.js"]