发布于 2015-12-05 11:04:03 | 450 次阅读 | 评论: 0 | 来源: 网络整理
在默认配置下,所有流进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进程
的环境变量:
默认设置为关闭。而当开启时,socket通讯将使用SSL,也就是出口和入口的通讯都将使用SSL。 下面的参数都只有在开启SSL时才有效。
设定非SSL连接是否可以建立。默认为不可建立,若设置为可用,则若连入方想使用非SSL进行连接时,系统将自动把socket连接降级为非SSL(比如HTTP),详情可见集群升级。
设置OpenSSL使用的私钥所在路径。
// For example, to generate a key with OpenSSL:
openssl genrsa -des3 -f4 -passout pass:some_password -out key.pem 4096
设置证书所在路径。
// 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_REQUIRE_CERT被设置为true时,SSL_VERIFY_CERT会被覆盖,所有的证书都 必须 被验证,否则无效。
设置连接客户端时,是否强制使用证书。默认不强制使用,若设置为使用,则所有连接都需要出示有效证书。
验证证书的深度,默认是4层。若需要修改,可查阅 OpenSSL文档,或者咨询系统管理员。
可根据授权方式,指定证书授权和认证的路径SSL_CA_DIR
或者文件SSL_CA_FILE
。
可根据授权方式,指定证书授权和认证的路径SSL_CA_DIR
或者文件SSL_CA_FILE
。
指定允许的密钥类型,使用:
分号作为分隔符。若需要修改,可查阅 OpenSSL文档,或者咨询系统管理员。
设置协议版本。默认只有TLS V1.2开启。SSL V2则是永久不可用,此处无设置项可用。由于很多老版本的协议易受破解,因此,请小心开启。
_注:SSLv2 完全不可用,因为现在的OpenSSL通过使用multiple compile time configuration 选项关闭了该选项。
我们需要通过libevent获得对OpenSSL的功能支持。推荐使用版本2.0.22-stable
。当新版本推出的时候,我们会测试其兼容性。
// OSX安装示例:
brew install libevent
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沙盒的链接)将被浏览器视为非安全链接而被终止。