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