查找公共代理 IP

查找公共代理 IP 地址

使用已声明的公共代理节点安装 DC/OS 后,您可以导航到公共代理节点的公用 IP 地址。您可以将代理的面向公众的 IP 地址公开为网关,以访问在 DC/OS 群集中运行的服务。例如,如果要配置负载平衡以将入站请求分发到群集中的服务,请求通常通过公共 IP 地址前端路由到防火墙后隔离的适当服务实例后端。

开始之前

  • 您必须已安装 DC/OS,有至少一个管理节点和至少一个公共代理 节点。
  • 您必须已安装最新版本的 DC/OS CLI
  • 您必须已安装 secure shell (ssh) 并配置为允许远程会话访问群集节点。
  • 如果您想要格式化来自 API 调用的输出,您应该已安装 jqPython。 如果您使用旧版本的 DC/OS 群集,您也可以使用 jq 或者其他程序,以查找公共代理 IP 地址。

注意:如果 DC/OS 部署在公共云提供程序上,例如 AWS、Google Cloud 或 Azure,您可以使用 DC/OS 基于 Web 的控制台、命令行界面或 DC/OS 群集节点 API 调用来查找公共代理 IP 地址。如果 DC/OS 安装在内部网络(本地)或专用云上,节点通常不具有独立的公共和专用 IP 地址。对于内部网络或专用云上的节点,公共 IP 地址通常与 DNS 命名空间中为服务器定义的 IP 地址相同。

查看 DC/OS 控制台中的公共 IP 地址

您可以从 DC/OS 基于 Web 的管理控制台交互地查看群集中节点的公共代理 IP 地址。

使用 DC/OS 基于 Web 的控制台查看公共 IP 地址:

  1. 打开 Web 浏览器并使用管理用户名和密码登录。

  2. 单击 节点 显示关于代理节点的信息。

  3. 选中 公共 IP 列,确定要公开的代理节点面向公众的 IP 地址。

    例如:

    Viewing the public-facing IP address for cluster nodes

    在大多数情况下,查找代理节点面向公众的 IP 地址就足够了。但是,如果需要,您可以还查找管理节点的公共 IP 地址。如果需要查找管理节点的公共 IP 地址,则使用 dcos node list commandnet/v1/nodes API call

从命令行列出公共 IP 地址

您可以使用 DC/OS 核心命令行界面 (CLI) 以交互式或编程方式列出群集中节点的公共代理 IP 地址。

要使用 DC/OS CLI 列出公共 IP 地址:

  1. 打开 shell 终端。

  2. 运行以下命令:

    dcos node list
    
  3. 查看命令输出以找到指定为公共代理的节点面向公众的 IP 地址。

    例如,命令返回类似于以下内容的节点信息:

    HOSTNAME         IP       PUBLIC IP(S)                     ID                           TYPE           REGION           ZONE       
    10.0.5.46      10.0.5.46   34.223.48.55    ecb5e39c-2d3e-4eea-8c07-af0c4e9e8443-S1  agent (public)    aws/us-west-2  aws/us-west-2d  
    10.0.1.112     10.0.1.112                  ecb5e39c-2d3e-4eea-8c07-af0c4e9e8443-S0  agent             aws/us-west-2  aws/us-west-2d  
    master.mesos.  10.0.6.157  34.222.201.246  ecb5e39c-2d3e-4eea-8c07-af0c4e9e8443     master (leader)   aws/us-west-2  aws/us-west-2d  
    master.mesos.  10.0.7.169  34.223.44.83    N/A                                      master (standby)  aws/us-west-2  N/A             
    master.mesos.  10.0.7.38   34.222.181.165  N/A                                      master (standby)  aws/us-west-2  N/A             
    

    从此输出中,您可以识别用于公共和专用代理节点以及管理节点的面向公众的特定 IP 地址。

    在本示例中,公共代理有一个公共 IP 地址:

    • 34.223.48.55

    管理节点有三个公共 IP 地址:

    • 34.222.201.246(领导者)
    • 34.223.44.83(备用)
    • 34.222.181.165(备用)

    没有可用于专用代理节点的面向公众的 IP 地址。

    在大多数情况下,您可以使用此命令验证每个节点的专用和公共 IP 地址。但是,您应该记住,如果 EDGE-LB 池使用虚拟网络,则返回的公共和专用 IP 地址可能不准确。

使用 API 调用查找公共 IP 地址

DC/OS 应用程序编程接口 (API) 提供了可通过 DC/OS 基于 Web 的管理控制台和命令行界面 (CLI) 访问的基础功能。因此,在大多数情况下,只有在自定义程序或自动化脚本中集成 API 调用时,才能直接使用 API。但是,如果需要,您可以直接通过调用 DC/OS 应用程序编程接口 (API) 进行联网来检索公共代理的公共 IP 地址。

要使用 DC/OS API 查找公共 IP 地址:

  1. 识别在公共云实例上运行的 DC/OS 群集的 URL。

  2. 使用以下 REST API net/v1/nodes 端点查找公共代理的公共 IP:

    <cluster-url>/net/v1/nodes
    

    例如,您可能会使用与以下类似的群集 URL 发出调用,以指定 DC/OS 群集正在运行的位置:

    http://luxi-sf7-elasticl-u70m3un6kcab-1100943753.us-west-2.elb.amazonaws.com/net/v1/nodes
    
  3. 检查命令输出。

    如果您具有被授权访问群集并检索节点信息的用户帐户,则此 API 调用将以未经过滤的格式返回节点和 IP 信息。

从管理节点查找地址

如果您直接调用 API 端点,则可以使用管理节点的客户端 URL (cURL) 命令查找公共 IP 地址。例如,您可以使用以下 cURL 命令查找公共代理面向公众的 IP 地址:

curl -skSL -H "Authorization: token=$(dcos config show core.dcos_acs_token)" -H 'Content-Type: application/json' $(dcos config show core.dcos_url)/net/v1/nodes

此命令设置授权令牌,并使用 dcos config show 命令标识群集 URL,并返回类似于以下内容的原始输出:

[{"updated":"2019-01-07T22:22:22.171Z","public_ips":["34.212.37.79"],"private_ip":"10.0.6.210","hostname":"ip-10-0-6-210"},{"updated":"2019-01-07T22:22:22.119Z","public_ips":["52.25.254.97"],"private_ip":"10.0.6.181","hostname":"ip-10-0-6-181"},{"updated":"2019-01-07T22:21:09.585Z","public_ips":["54.218.23.75"],"private_ip":"10.0.6.148","hostname":"ip-10-0-6-148"},{"updated":"2019-01-07T22:22:28.582Z","public_ips":[],"private_ip":"10.0.1.139","hostname":"ip-10-0-1-139"},{"updated":"2019-01-07T22:22:28.649Z","public_ips":[],"private_ip":"10.0.0.138","hostname":"ip-10-0-0-138"}]

格式化 API 输出

如果您已安装 jqpython,则可以使用更多可读 JSON 格式解析 API 输出以显示节点信息。例如,通过运行以下命令,您可以执行 API 调用并将输出传递到 jq 进行格式化:

curl -skSL -H "Authorization: token=$(dcos config show core.dcos_acs_token)" -H 'Content-Type: application/json' $(dcos config show core.dcos_url)/net/v1/nodes | jq

此命令为检索到的信息返回格式化输出,类似于以下内容:

[
  {
    "updated": "2019-01-07T22:22:22.171Z",
    "public_ips": [
      "34.212.37.79"
    ],
    "private_ip": "10.0.6.210",
    "hostname": "ip-10-0-6-210"
  },
  {
    "updated": "2019-01-07T22:22:22.119Z",
    "public_ips": [
      "52.25.254.97"
    ],
    "private_ip": "10.0.6.181",
    "hostname": "ip-10-0-6-181"
  },
  {
    "updated": "2019-01-07T22:21:09.585Z",
    "public_ips": [
      "54.218.23.75"
    ],
    "private_ip": "10.0.6.148",
    "hostname": "ip-10-0-6-148"
  },
  {
    "updated": "2019-01-07T22:22:28.582Z",
    "public_ips": [],
    "private_ip": "10.0.1.139",
    "hostname": "ip-10-0-1-139"
  },
  {
    "updated": "2019-01-07T22:22:28.649Z",
    "public_ips": [],
    "private_ip": "10.0.0.138",
    "hostname": "ip-10-0-0-138"
  }
]

在这些 API 示例中,公共代理和管理节点有三个公共 IP 地址:

  • 34.212.37.79
  • 52.25.254.97
  • 54.218.23.75

如示例中所示,没有用于专用代理节点的公共 IP 地址。对于专用代理节点,API 调用将返回设置 ("public_ips": []) 的空值。

执行查询以返回公共 IP 地址

如果您正在使用旧版本的 DC/OS 群集,则可以通过在脚本中或在 shell 终端的命令行中执行 jq 查询来查找公共代理 IP 地址。以下示例脚本使用 jq 查询以在 DC/OS 群集上打开安全 shell (SSH) 会话,获取群集信息,然后查询 ifconfig.co 以确定公共 IP 地址。

for id in $(dcos node --json | jq --raw-output '.[] | select(.attributes.public_ip == "true") | .id'); do dcos node ssh --option StrictHostKeyChecking=no --option LogLevel=quiet --master-proxy --mesos-id=$id "curl -s ifconfig.co" ; done 2>/dev/null

以下是返回公共 IP 地址 52.39.29.79 的示例:

for id in $(dcos node --json | jq --raw-output '.[] | select(.attributes.public_ip == "true") | .id'); do dcos node ssh --option StrictHostKeyChecking=no --option LogLevel=quiet --master-proxy --mesos-id=$id "curl -s ifconfig.co" ; done 2>/dev/null
52.39.29.79