google-cloud-platform - openstack4j 向错误的主机发送请求
问题描述
我有一个在 Google Cloud Platform VM 上运行的 OpenStack。当我调用我得到的任何方法时,我甚至很难创建一个带有外部 IP 的 openstack4j 操作系统connect timed out
,因为 openstack4j 使用的是内部 IP。我可以在调用方法时手动设置我的主机os.compute().flavors().list()
吗?
OSClient.OSClientV3 os = OSFactory.builderV3()
.endpoint("http://external_ip:5000/v3")
.credentials("admin", "pass", domain)
.scopeToProject(project)
.authenticate();
os.compute().flavors().list();
使用OSFactory.enableHttpLoggingFilter(true);
,我发现 flavor.list 正在调用http://internal_ip:8774/v2.1/.../flavors/detail
。
其他奇怪的事情是,如果我删除.scopeToProject(project)
并调用相同的 flavor.list 方法,调用外部 ip,但没有返回任何风格(可能是因为它应该坚持一个项目)。
为什么 flavor.list 调用我的 GCP VM 的内部 IP?我可以设置为外部吗?
解决方案
正如@larsks 建议的那样,我必须告诉openstak4j 需要使用外部IP。为了解决这个问题,我用我的公共 IP 添加了一条指令:.withConfig(Config.newConfig().withEndpointNATResolution("x.x.x.x"))
. 新的授权码:
OSClient.OSClientV3 os = OSFactory.builderV3()
.endpoint("http://external_ip:5000/v3")
.credentials("admin", "pass", domain)
.scopeToProject(project)
.authenticate();
推荐阅读
- mysql - 如何在表上形成 mysql 查询以按名为“类型”的列和另一列的计数进行分组
- c - 如果 execv 失败,为什么进程会创建僵尸,但如果 execv 成功并终止则不会?
- c# - 发布.net核心项目后mscordaccore_amd64_amd64_*.dll和sos_amd64_amd64_*.dll是什么
- node.js - 在 NodeJS 中将 WEBM 编码为 MP4 失败,为输出流缓冲的数据包过多
- javascript - OWL 轮播堆叠图像
- node.js - 如何检查文档的某个字段是否存在于 Firebase 中?
- doctrine - 如何设置学说结果的生命周期和全局查询缓存?
- java - 在 Firestore 中找不到文档数据,返回 null
- wordpress - 如何计算一个月前的作者帖子
- ruby-on-rails - 如何在我的 Rails 项目中公开原始 ruby 文件(带插值)?