我正在尝试使用JClouds在Google Compute Engine中创建实例。我无法正确设置防火墙规则,唯一打开的端口是22(默认端口)。
我在文档和示例中找不到任何内容。以下代码仅打开端口22。
如何打开其他端口,如80,5432等? 有没有办法打开所有端口?
final String POLL_PERIOD_TWENTY_SECONDS = String.valueOf(SECONDS.toMillis(20));
Properties overrides = new Properties();
overrides.setProperty(ComputeServiceProperties.POLL_INITIAL_PERIOD, POLL_PERIOD_TWENTY_SECONDS);
overrides.setProperty(ComputeServiceProperties.POLL_MAX_PERIOD, POLL_PERIOD_TWENTY_SECONDS);
Iterable<Module> modules = ImmutableSet.<Module> of(new SshjSshClientModule(), new SLF4JLoggingModule());
//Iterable<Module> modules = ImmutableSet.<Module> of(new SshjSshClientModule());
ComputeServiceContext context = ContextBuilder.newBuilder("google-compute-engine")
.credentials("valid email", "valid cert")
.modules(modules)
.overrides(overrides)
.buildView(ComputeServiceContext.class);
ComputeService computeService = context.getComputeService();
Template template = computeService.templateBuilder()
.locationId("asia-east1-a")
.imageId("https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1404-trusty-v20150128")
.hardwareId("https://www.googleapis.com/compute/v1/projects/MY-PROJECT/zones/asia-east1-a/machineTypes/f1-micro")
.build();
// Those options are not working as expected
// List<String> networks = new ArrayList<>();
// networks.add("default");
// template.getOptions().as(GoogleComputeEngineTemplateOptions.class).networks(networks);
// template.getOptions().as(GoogleComputeEngineTemplateOptions.class).inboundPorts(5432,1,2,3);
Set<? extends NodeMetadata> nodes = computeService.createNodesInGroup("m456", 1, template);
for (NodeMetadata nodeMetadata : nodes) {
String publicAddress = nodeMetadata.getPublicAddresses().iterator().next();
//String privateAddress = nodeMetadata.getPrivateAddresses().iterator().next();
String username = nodeMetadata.getCredentials().getUser();
String password = nodeMetadata.getCredentials().getPassword();
System.out.println(publicAddress);
System.out.println(username);
System.out.println(password);
}
提前致谢。
答案 0 :(得分:1)
尝试将完整的URI用于“默认”网络。例如:“https://www.googleapis.com/compute/v1/projects/xxx-project/global/networks/default”
答案 1 :(得分:0)
根据JClouds主页中的available providers list,对GCE的支持为here。将它添加到项目后,您将拥有以下类:
虽然我自己不是Java开发人员,但我敢打赌这就是你要求的。使用目标和实例标记,您可以仅将规则限制为某些实例。如果未使用目标targ,则规则中的端口将对应用规则的网络中的所有实例打开。希望这可以帮助。
答案 2 :(得分:-1)
Google Compute Engine项目有两个默认防火墙规则(在默认网络上),允许端口80和/或443上的入站连接(来自互联网)到具有的任何实例http-server 和/或 https-server 标记。可以在VM实例化时或之后定义所述标签。