DCOS中的Marathon可以通过SSL进行API端点的安全访问也恶意通过HTTP基本接入认证进行有限访问。如果计划使用基本认证方式,我们建议使用SSL方式,因为其他方式由于用户名和密码未被加密,信息容易被其他方获取。
5.1 使用SSL
如果已经有了Java keystore,可以将其连通密码一起通过SSL传递至DCOS组件Marathon
$./bin/start –master zk://10.134.29.134:2181 10.134.29.135:2181,10.134.29.136:2181/mesos –zk zk://10.134.29.134:2181,10.134.29.135:2181,10.134.29.136:2181/marathon –ssl_keystore_path marathon.jks
–ssl_keystore_password $MARATHON_JKS_PASSWORD
在默认情况下,Marathon使用8443端口来对外提供SSL服务(可以通过–https_port命令来更改端口),一旦Marathon运行,将会通过HTTPS端口来接入API以及UI:
$curl https://l0134.29.134:8443/v2/apps
5.2 生成带有SSL密钥的keystore
需要注意的是:现在的浏览器以及大部分工具,将会对于DCOS的组件Marathon API以及UI的访问进行告警,除非SSL已被CA授信,当然也可以直接购买。
①、通过OpenSSL生成RSA私有密钥
将密码设置为MARATHON_KEY_PASSWORD变量
$openssl genrsa -des3
-out marathon.key
-passout “env:MARATHON_KEY_PASSWORD”
②、通过下面的方法为密钥获得认证
-推荐从知名的CA购买认证。这个将确保Marathon实例的API以及UI信
任SSL认证,为用户减少额外的步奏
-(不安全方式)为密钥生成一个认证。这个命令会向与keystore交互的信息进行提示。“Common Name”必须是要使用认证的机器的限定主机名。
下面的命令会读取MARATHON_KEY_PASSWORD环境变量
$openssl req -new -x509
-key marathon.key
-passin “env:MARATHON_KEY_PASSWORD”
-out self-signed-marathon.pem
③、将密钥和认证文件合并至PKCS12格式的文件中,PKCS12这种格式也是Java keystore用的格式。如果接受的认证文件不是.pem格式,则需要转换为.pem。
将密码设置为MARATHON_KEY_PASSWORD变量
将PKCS密码设置为MARATHON_PKCS_PASSWORD变量
$openssl pkcs12 -inkey marathon.key
-passin “env:MARATHON_KEY_PASSWORD”
-name marathon
-in trusted.pem
-password “env:MARATHON_PKCS_PASSWORD”
-chain -CAFile “trustedCA.crt”
-export -out marathon.pkcs12
④、导入keystore
将PKCS密码设置为MARATHON_PKCS_PASSWORD变量
将JKS密码设置为MARATHON_JKS_PASSWORD变量
$keytool -importkeystore -srckeystore marathon.pkcs12
-srcalias marathon
-srcstorepass $MARATHON_PKCS_PASSWORD -srcstoretype PKCS12
-destkeystore marathon.jks
-deststorepass $MARATHON_JKS_PASSWORD
⑤、通过创建的keystore以及其密码启动DCOS的组件Marathon
将JKS密码设置为MARATHON_JKS_PASSWORD变量
$./bin/start –master
zk://10.134.29.134:2181 10.134.29.135:2181,10.134.29.136:2181/mesos
–zk zk://10.134.29.134:2181,10.134.29.135:2181,10.134.29.136:2181/marathon
–ssl_keystore_path marathon.jks
–ssl_keystore_password $MARATHON_JKS_PASSWORD
⑥、通过HTTPS端口接入DCOS的组件Marathon API与UI(默认端口8443)
https://10.134.29.134:8443
5.3 启用基础认证
备注:虽然可以使用基本认证,但是我们强烈建议使用SSL。如果SSL不可用,
Marathon获取的用户名和密码将会使用明文形式进行传输,可能会被第三方获取到相关信息。
将用户名和密码使用”:”进行隔离传递至 –http_credentials 命令将会开启基本认证 。备注:用户名不能包含”:”.
$ ./bin/start –master –master
zk://10.134.29.134:2181 10.134.29.135:2181,10.134.29.136:2181/mesos
–zk zk://10.134.29.134:2181,10.134.29.135:2181,10.134.29.136:2181/marathon
–http_credentials “cptPicard:topSecretPa$$word”
–ssl_keystore_path /path/to/marathon.jks
–ssl_keystore_password $MARATHON_JKS_PASSWORD
作者:中移苏研邹能人
欢迎关注中移苏研DCOS公众号
原文链接:http://www.zoues.com/index.php/2016/03/31/dcos-marathonssl/