首页 > 解决方案 > 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?我可以设置为外部吗?

标签: google-cloud-platformopenstackopenstack4j

解决方案


正如@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();

推荐阅读