使用 DC/OS 隧道

使用 DC/OS 隧道通过代理和 VPN 访问您的群集

警告:DC/OS 隧道适用于开发、调试和测试。请勿在生产中使用 DC/OS 隧道。

重要信息:Mesosphere 不支持 Ubuntu 作为 DC/OS 的操作系统,即便是使用 Microsoft Azure 时。

在 DC/OS 上开发服务时,您可能会发现通过 SOCKS 代理、HTTP 代理或 VPN,有助于在本地机器访问群集。例如,您可以在自己的开发环境中工作,并立即针对您的 DC/OS 群集进行测试。

SOCKS

DC/OS 隧道可以通过 SSH 运行 SOCKS 代理到群集。SOCKS 代理适合任何协议,但客户端必须配置为使用默认在端口 1080 上运行的代理。

HTTP

HTTP 代理可采用两种模式运行:透明和标准。

透明模式

在透明模式下,HTTP 代理在端口 80 上作为超级用户运行,不需要对应用程序进行修改。通过附加 mydcos.directory 域访问 URL。也可 将 DNS SRV 记录作为 URL 使用。HTTP 代理当前无法采用透明模式访问 HTTPS。

标准模式

虽然必须配置客户端才能在标准模式下使用 HTTP 代理,但是它没有透明模式受到的任何限制。与透明模式一样,您可以将 DNS SRV 记录作为 URL 使用。

SRV 记录

SRV DNS 记录是从名称到 IP/端口对的映射。DC/OS 创建 SRV 记录,采用的形式为 <port-name>.<service-name>._tcp.marathon.mesos。HTTP 代理将这些记录作为 URL 披露。此功能可用于与 DC/OS 服务进行通信。

VPN

DC/OS 隧道可让您完全访问群集内的 DNS、管理节点和代理。OpenVPN 需要根权限才能配置这些路由。

DC/OS 隧道选项概述

SOCKS
  • 指定端口
  • 所有协议
  • 需要应用程序配置
HTTP(透明)
  • SRV 作为 URL
  • 无应用程序配置
  • 无法指定端口(除非通过 SRV 指定)
  • 仅支持 HTTP
  • 作为超级用户运行
HTTP(标准)
  • SRV 作为 URL
  • 指定端口
  • 需要应用程序配置
  • 仅支持 HTTP/HTTPS
VPN
  • 无应用程序配置
  • 完整和直接访问群集
  • 指定端口
  • 所有协议
  • 更多先决条件
  • 作为超级用户运行
  • 可能需要手动重新配置 DNS
  • 相对权重

使用 DC/OS 隧道

前提条件

  • 目前仅支持 Linux 和 macOS。
  • DC/OS CLI
  • DC/OS 隧道包。运行 dcos package install tunnel-cli —cli
  • SSH 访问 (仅限密钥认证)。
  • OpenVPN 客户端 用于 VPN 功能。

应用示例

所有示例都将参考此样本应用:

  • 服务名称:myapp
  • 组:mygroup
  • 端口:555
  • 端口名称:myport
myapp 是一个 Web 服务器侦听端口 555。我们将使用 curl作为客户端应用程序。所有成功的示例都将得到myapp 提供的作为文本输出的 HTML。 ## 使用 DC/OS 隧道运行 SOCKS 代理
  1. 在 DC/OS CLI 中运行以下命令:
    1. dcos tunnel socks
    2. ## Example
    3. curl proxy socks5h://127.0.0.1:1080 myapp-mygroup.marathon.agentip.dcos.thisdcos.directory:555
  2. 配置应用程序以使用端口 1080 上的代理。
## 使用 DC/OS 隧道运行 HTTP 代理 ### 透明模式
  1. 在 DC/OS CLI 中运行以下命令:
    1. sudo dcos tunnel http
    2. ## Example
    3. curl myport._myapp.mygroup._tcp.marathon.mesos.mydcos.directory
    4. ### Watch out!
    5. ## This won't work because you can't specify a port in transparent mode
    6. curl myapp-mygroup.marathon.agentip.dcos.thisdcos.directory.mydcos.directory:555
  2. 在透明模式下,HTTP 代理通过端口转发开展工作。输入命令时,在域名末尾附加 .mydcos.directory。例如, http://example.com/?query=hello 变成 http://example.com.mydcos.directory/?query=hello
注意:在透明模式下,无法在 URL 中指定端口。 ### 标准模式
  1. 如需不使用根权限,以标准模式运行 HTTP 代理,则请使用 —port 标记将代理配置为使用其他端口:
    1. dcos tunnel http port 8000
    2. ## Example
    3. curl proxy 127.0.0.1:8000 _myport._myapp.mygroup._tcp.marathon.mesos
    4. curl proxy 127.0.0.1:8000 myapp-mygroup.marathon.agentip.dcos.thisdcos.directory:555
  2. 配置应用程序,在上文指定的端口上使用代理。
### SRV 记录 HTTP 代理以
<port-name>.<service-name>._tcp.marathon.mesos.mydcos.directory(透明模式)或 <port-name>._<service-name>._tcp.marathon.mesos(标准模式)形式的 URL 揭示 DC/OS SRV 记录。 #### 查找服务名称 <service-name> 是您从 DC/OS Web 界面创建的服务的 ID 字段中的条目,或 Marathon 应用定义中 id 字段的值。 #### 在 DC/OS Web 界面中添加指定端口 如需在 DC/OS Web 界面指定端口,请转到 服务 > 服务 选项卡,单击服务名称,然后单击 编辑。在 网络 选项卡上输入端口的名称。 #### 在 Marathon 应用定义中添加指定港口 或者,可以添加 name 到Marathon 应用定义的 portMappingsportDefinitions 字段。使用 portMappings 还是 portDefinitions 取决于您使用的是 BRIDGE 还是 HOST 网络。详细了解 Marathon 的网络和端口
  1. "portMappings": [
  2. {
  3. "name": "<my-port-name>",
  4. "containerPort": 3000,
  5. "hostPort": 0,
  6. "servicePort": 10000,
  7. "labels": {
  8. "VIP_0": "1.1.1.1:30000"
  9. }
  10. }
  11. ]
  1. "portDefinitions": [
  2. {
  3. "name": "<my-port-name>",
  4. "protocol": "tcp",
  5. "port": 0,
    }
  6. ]
## 使用 DC/OS 隧道运行 VPN 在 DC/OS CLI 中运行以下命令:
  1. sudo dcos tunnel vpn
  2. ## Example
  3. curl myapp-mygroup.marathon.agentip.dcos.thisdcos.directory:555
VPN 客户端试图自动配置 DNS,但此功能不适用 macOS。如需在 macOS 上使用 VPN 客户端,请按照 DC/OS 隧道的指示,添加 DNS 服务器。 使用 VPN 时,您通过虚拟的方式进入群集。可以直接访问管理节点和代理节点:
  1. ping master.mesos
  2. ping slave.mesos
### macOS OpenVPN 客户端安装
  • 如果使用 homebrew,就要安装:
    1. brew install openvpn
    然后在使用时: 添加 /usr/local/sbin$PATH, 或添加如下标记 —client=/usr/local/sbin/openvpn
    1. sudo dcos tunnel vpn client=/usr/local/sbin/openvpn
  • 另一个选项是安装 TunnelBlick不要运行,安装它只是用于 openvpn 可执行文件)并添加如下标记 —client=/Applications/Tunnelblick.app/Contents/Resources/openvpn/openvpn-/openvpn
    1. sudo dcos tunnel vpn client=/Applications/Tunnelblick.app/Contents/Resources/openvpn/openvpn-/openvpn

Linux OpenVPN 客户端安装

openvpn 应通过您的分发包管理器提供。

例如:

  • Ubuntu:apt-get update && apt-get install openvpn
  • ArchLinux:pacman -S openvpn