[+]文章目录

在默认配置下,所有流进Mesos的消息流都为非加密形式。这样带来现在的漏洞,会让别有居心的人劫持或任意操纵已有任务。 在Mesos 0.23.0之后,引入了对SSL/TLS地支持,使得消息在Mesos的组件网络传输时可以被加密。并且在Mesos WebUI上,可以使用HTTPS的支持。

目前只有libprocess socket interface通过使用 libevent支持SSL。另外,这个实现需要封包的openssl的libevent-openssl函数库。

当从源码编译Mesos 0.23.0时,在安装了所需依赖Dependencies后,可在 编译配置里,开启SSL,如下:

../configure --enable-libevent --enable-ssl

编译完并安装后,下面是可通用于Master、Slave、应用框架调派器/执行器或者任何libprocess进程的环境变量:

SSL_ENABLED=(false|0,true|1) [默认=false|0]

默认设置为关闭。而当开启时,socket通讯将使用SSL,也就是出口和入口的通讯都将使用SSL。 下面的参数都只有在开启SSL时才有效。

SSL_SUPPORT_DOWNGRADE=(false|0,true|1) [默认=false|0]

设定非SSL连接是否可以建立。默认为不可建立,若设置为可用,则若连入方想使用非SSL进行连接时,系统将自动把socket连接降级为非SSL(比如HTTP),详情可见集群升级

SSL_KEY_FILE=(path to key)

设置OpenSSL使用的私钥所在路径。

// For example, to generate a key with OpenSSL:
openssl genrsa -des3 -f4 -passout pass:some_password -out key.pem 4096

SSL_CERT_FILE=(证书路径)

设置证书所在路径。

// For example, to generate a certificate with OpenSSL:
openssl req -new -x509 -passin pass:some_password -days 365 -key key.pem -out cert.pem

SSL_VERIFY_CERT=(false|0,true|1) [默认=false|0]

设置是否对证书进行有效性验证。默认设置为不验证,当SSL_REQUIRE_CERT被设置为true时,SSL_VERIFY_CERT会被覆盖,所有的证书都 必须 被验证,否则无效。

SSL_REQUIRE_CERT=(false|0,true|1) [默认=false|0]

设置连接客户端时,是否强制使用证书。默认不强制使用,若设置为使用,则所有连接都需要出示有效证书。

SSL_VERIFY_DEPTH=(N) [默认=4]

验证证书的深度,默认是4层。若需要修改,可查阅 OpenSSL文档,或者咨询系统管理员。

SSL_CA_DIR=(授权证书所在文件夹路径)

可根据授权方式,指定证书授权和认证的路径SSL_CA_DIR或者文件SSL_CA_FILE。

SSL_CA_FILE=(授权证书文件所在路径)

可根据授权方式,指定证书授权和认证的路径SSL_CA_DIR或者文件SSL_CA_FILE。

SSL_CIPHERS=(accepted ciphers separated by ':') [默认=AES128-SHA:AES256-SHA:RC4-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA]

指定允许的密钥类型,使用:分号作为分隔符。若需要修改,可查阅 OpenSSL文档,或者咨询系统管理员。

SSL_ENABLE_SSL_V3=(false|0,true|1) [默认=false|0]

SSL_ENABLE_TLS_V1_0=(false|0,true|1) [默认=false|0]

SSL_ENABLE_TLS_V1_1=(false|0,true|1) [默认=false|0]

SSL_ENABLE_TLS_V1_2=(false|0,true|1) [默认=true|1]

设置协议版本。默认只有TLS V1.2开启。SSL V2则是永久不可用,此处无设置项可用。由于很多老版本的协议易受破解,因此,请小心开启。

_注:SSLv2 完全不可用,因为现在的OpenSSL通过使用multiple compile time configuration 选项关闭了该选项。

libevent

我们需要通过libevent获得对OpenSSL的功能支持。推荐使用版本2.0.22-stable。当新版本推出的时候,我们会测试其兼容性。

// OSX安装示例:
brew install libevent

OpenSSL

SSL使用 OpenSSL实现,可根据其版本信息和你的需要,确定使用具体版本。 Mesos对具体OpenSSL的版本并没有强依赖,用户可根据从自身组织的需求出发,选择可用版本。

在编译mesos时,请确认 event2 和 openssl 有出现在头文件里。

// OSX安装示例:
brew install openssl

在集群升级的过程中,SSL对各个部件的操作并没有特定的顺序要求。

建议重启所有组件,以启用 可降级使用的SSL,当所有部件都启用SSL时,进行第二次重启,并关闭所有的SSL降级使用功能。 当然,升级的策略也允许在任意时间点,独立的将组件的重启。也可以先在集群的子集群中先行测试下SSL。

NOTE: 当集群中的不同部件使用SSL伺服,又使用非SSL信道,则web界面下的所有相对链接都将失效。详情见Web界面 章节。 下面是升级集群的命令示例:

// 先重启每个部件(包括master、slave、应用框架),以支持降级使用(包括master、slave、应用框架):
SSL_ENABLED=true SSL_SUPPORT_DOWNGRADE=true SSL_KEY_FILE=<path-to-your-private-key> SSL_CERT_FILE=<path-to-your-certificate> <Any other SSL_* environment variables you may choose> <your-component (e.g. bin/master.sh)> <your-flags>

// 再重启每个部件(包括master、slave、应用框架),不带降级使用功能。
SSL_ENABLED=true SSL_SUPPORT_DOWNGRADE=false SSL_KEY_FILE=<path-to-your-private-key> SSL_CERT_FILE=<path-to-your-certificate> <Any other SSL_* environment variables you may choose> <your-component (e.g. bin/master.sh)> <your-flags>

最终状态可以使得集群将只使用SSL进行消息传递。

NOTE: 此时,所有用于组件沟通的工具,都必须能支持SSL,否则将被禁止。当你需要升级工具的时候,也可以设置为SSL_SUPPORT_DOWNGRADE=true,以方便调试。

默认的Mesos Web界面用的链接是相对链接,这些链接在master和slave节点间跳转,但web界面目前还无法通过修改 http 或 https来确定endpoint是否是使用 SSL。所以,当混用SSL和非SSL时,或系统正在两者间切换时,Web界面的相对链接就会失效。不过当使用正确的协议访问endpoint或者启用降级连接支持的时候,所使用的工具仍然是有效作用的。

注:应用框架和他们自己的web UI界面需要另外单独添加对HTTPS的支持。

证书

大部分浏览器在构建的时候,就已经禁止 使用不同证书 的页面间进行相互跳转。因此,需要在Master节点和Slave节点都使用同样的证书。若非如此,同域链接跳转(如指向Slave沙盒的链接)将被浏览器视为非安全链接而被终止。


« 前一篇