如何打开“谷歌计算引擎”中的特定端口(如9090)

我有2谷歌计算引擎实例,我想在两个实例中打开端口9090。我认为我们需要添加一些防火墙规则。

你能告诉我该怎么做吗?

228881 次浏览

你需要:

  1. 访问cloud.google.com

  2. 进入我的控制台

  3. 选择你的项目

  4. 选择网络>VPC网络

  5. < p >选择“Firewall"

  6. 选择“创建防火墙规则”;

  7. 要应用规则选择虚拟机实例,请选择Targets >“;指定目标标签”,进入“;目标标签”;标记的名称。该标记将用于将新的防火墙规则应用到您想要的任何实例上。然后,确保实例应用了网络标记。

  8. 设置源IP范围允许所有IP流量:0.0.0.0/0

  9. 要允许传入的TCP连接到端口9090,在“协议和端口”中勾选“TCP”并输入9090

  10. 单击创建(或单击“等效命令行”显示gcloud命令来创建相同的规则)

我希望这对你有所帮助。

更新请参考文档自定义规则。

您需要添加一个防火墙规则,以便向您的实例打开对tcp:9090的入站访问。如果您有两个以上的实例,并且您只想向这两个实例打开9090,那么您将希望确保这两个实例共享一个标记。您可以通过控制台或命令行添加或更新标签;如果需要,我建议使用GUI,因为它处理setinstancetags的读取-修改-写入循环。

如果你想对所有实例开放端口9090,你可以创建这样的防火墙规则:

gcutil addfirewall allow-9090 --allowed=tcp:9090

这将适用于您的所有实例。

如果你只想为你的应用程序服务的两个实例打开端口9090,确保它们有my-app这样的标记,然后像这样添加防火墙:

gcutil addfirewall my-app-9090 --allowed=tcp:9090 --target_tags=my-app

你可以阅读更多关于在GCE中创建和管理防火墙

我和你有同样的问题,我可以通过遵循@CarlosRojas的指示来解决它,但有一点不同。我没有创建一个新的防火墙规则,而是编辑了default-allow-internal来接受来自任何地方的流量,因为创建新规则没有任何区别。

下面是回答这个问题的命令行方法:

gcloud compute firewall-rules create <rule-name> --allow tcp:9090 --source-tags=<list-of-your-instances-names> --source-ranges=0.0.0.0/0 --description="<your-description-here>"

这将为你指定的实例打开端口9090。省略--source-tags--source-ranges将把该规则应用于所有实例。更多细节在Gcloud文档firewall-rule create命令手册

前面的答案很好,但是谷歌推荐使用更新的gcloud命令而不是gcutil命令。

< p > PS: 要了解谷歌的防火墙规则,请运行gcloud compute firewall-rules list并查看您的所有防火墙规则

这个问题很老了,卡洛斯·罗哈斯的答案很好,但我认为我应该发布一些在尝试打开端口时应该记住的事情。

首先要记住的是网络节被重命名为VPC网络。因此,如果你试图找出防火墙规则选项可用的地方,请查看VPC网络

第二件事是,如果你试图在Linux虚拟机上打开端口,确保在任何情况下都不应该尝试使用ufw命令打开端口。我尝试使用它,但失去了对虚拟机的ssh访问。所以不要重复我的错误。

第三件事是,如果你试图在Windows虚拟机上打开端口,你需要在虚拟机内部Windows防火墙VPC组网->防火墙规则中创建防火墙规则。端口需要在两个防火墙规则中都打开,不像Linux VM。因此,如果您无法从虚拟机外部访问端口,请检查是否在GCP控制台和Windows防火墙中都打开了端口。

最后一件(显而易见的)事情是,不要不必要地打开端口。关闭端口,一旦你不再需要它。

我希望这个答案对你有用。

创建防火墙规则

如果您不熟悉GCP中的防火墙规则,请查看防火墙规则组件[1]。防火墙规则是在网络级别定义的,并且只应用于创建它们的网络;但是,为每个名称选择的名称对于项目必须是唯一的。

对于云控制台:

  1. 进入谷歌云平台控制台中“防火墙规则”页面。
  2. 单击“创建防火墙规则”。
  3. 输入防火墙规则的名称。
  4. .项目名称必须唯一
  5. 指定将在其中实现防火墙规则的网络。
  6. 指定规则的优先级。 数字越小优先级越高
  7. 交通方向选择入口或出口。
  8. 对于匹配的动作,选择允许或拒绝。
  9. 指定规则的target。

    • 如果希望该规则应用于网络中的所有实例,请选择“网络中的所有实例”。
    • 如果希望将规则应用到按网络(目标)标记选择的实例,请选择“指定目标标记”,然后在“目标标记”字段中键入规则应该应用到的标记。
    • 如果希望规则按关联的服务帐户应用于选择实例,请选择“指定服务帐户”,在“服务帐户范围”下指示该服务帐户是在当前项目中还是在其他项目中,并在“目标服务帐户”字段中选择或键入服务帐户名称。
    • 李< / ul > < / >
    • 对于入口规则,指定Source过滤器:

      • 选择IP范围,在“源IP范围”字段中输入CIDR块,按IP地址范围定义传入流量的源。对来自任何网络的源使用0.0.0.0/0。
      • 选择子网,然后从子网弹出按钮标记所需的子网,以根据子网名称定义传入流量的源。
      • 若要按网络标记限制源,请选择源标记,然后在源标记字段中键入网络标记。源标签的数量限制请参见VPC配额和限制。仅当目标未由服务帐户指定时,才可通过源标记进行过滤。有关更多信息,请参见按服务帐户和网络标记筛选。
      • 若要按服务帐户限制源,请选择“服务帐户”,在“服务帐户范围”下指示该服务帐户是在当前项目中还是在其他项目中,并在“源服务帐户”字段中选择或键入服务帐户名称。仅当目标未由网络标记指定时,才可通过源服务帐户进行过滤。有关更多信息,请参见按服务帐户和网络标记筛选。
      • 如果需要,指定第二个源筛选器。辅助源筛选器不能使用与主源筛选器相同的筛选条件。
      • 李< / ul > < / >
      • 对于出口规则,指定Destination过滤器:

        • 选择“IP地址范围”,在“目的IP范围”中输入CIDR块,按IP地址范围定义出方向流量的目的地址。使用0.0.0.0/0表示所有地方。
        • 选择子网,然后从子网弹出按钮标记所需的子网,以根据子网名称定义传出流量的目的地。
        • 李< / ul > < / >
        • 定义规则将应用到的协议和端口:

          • 根据动作选择“允许全部”或“拒绝全部”,使规则适用于所有协议和端口。

          • 定义具体协议和端口:

            • 选择“tcp”,包括tcp协议和端口。输入全部或以逗号分隔的端口列表,如20- 22,80,8080。
            • 选择“udp”,包括udp协议和端口。输入全部端口或以逗号分隔的端口列表,如67-69、123。
            • 选择“其他协议”,包括icmp、sctp等协议。
            • 李< / ul > < / > 李< / ul > < / >
            • (可选)您可以创建防火墙规则,但不强制防火墙规则,可以将防火墙规则的强制状态设置为禁用。单击“禁用”规则,然后选择“禁用”。

            • (可选)您可以启用防火墙规则日志记录:

              • 单击“日志>打开”。
              • 单击“打开”。
              • 李< / ul > < / >
              • 单击Create。

< p >链接: [1] https://cloud.google.com/vpc/docs/firewalls#firewall_rule_components < / p >

我不得不通过降低优先级(使其更高)来解决这个问题。这立即引起了反应。跟我想的不一样,但成功了。

, console.cloud.google.com祝辞的在选择项目>>网络比;VPC网络>>防火墙在祝辞创建防火墙。

如果要将规则应用于虚拟机实例,请选择“Targets”,选择“指定的目标标签”,然后输入“&;目标标签”;标记的名称。该标记将用于将新的防火墙规则应用到您想要的任何实例上。

在“协议和港口”中;进入tcp: 9090

单击Save。

使用此命令打开端口

gcloud compute --project=<project_name> firewall-rules create firewall-rules --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:<port number> --source-ranges=0.0.0.0/0