Marathon可以通过SSL进行API端点的安全访问也恶意通过HTTP基本接入认证进行有限访问。如果计划使用基本认证方式,我们建议使用SSL方式,因为其他方式由于用户名和密码未被加密,信息容易被其他方获取。
5.1 使用SSL
如果已经有了Javakeystore,可以将其连通密码一起通过SSL传递至Marathon
$./bin/start--masterzk://10.134.29.134:2181 10.134.29.135:2181,10.134.29.136:2181/mesos --zkzk://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
需要注意的是:现在的浏览器以及大部分工具,将会对于Marathon API以及UI的访问进行告警,除非SSL已被CA授信,当然也可以直接购买。
①、通过OpenSSL生成RSA私有密钥
将密码设置为MARATHON_KEY_PASSWORD变量
$opensslgenrsa-des3
-outmarathon.key
-passout"env:MARATHON_KEY_PASSWORD"
②、通过下面的方法为密钥获得认证
-推荐从知名的CA购买认证。这个将确保Marathon实例的API以及UI信任SSL认证,为用户减少额外的步奏,(不安全方式)为密钥生成一个认证。这个命令会向与keystore交互的信息进行提示。“Common Name”必须是要使用认证的机器的限定主机名。
下面的命令会读取MARATHON_KEY_PASSWORD环境变量
$opensslreq-new-x509
-keymarathon.key
-passin"env:MARATHON_KEY_PASSWORD"
-out self-signed-marathon.pem
③、将密钥和认证文件合并至PKCS12格式的文件中,PKCS12这种格式也是Javakeystore用的格式。如果接受的认证文件不是.pem格式,则需要转换为.pem。
将密码设置为MARATHON_KEY_PASSWORD变量
将PKCS密码设置为MARATHON_PKCS_PASSWORD变量
$opensslpkcs12 -inkeymarathon.key
-passin"env:MARATHON_KEY_PASSWORD"
-namemarathon
-intrusted.pem
-password"env:MARATHON_PKCS_PASSWORD"
-chain-CAFile"trustedCA.crt"
-export-outmarathon.pkcs12
④、导入keystore
将PKCS密码设置为MARATHON_PKCS_PASSWORD变量
将JKS密码设置为MARATHON_JKS_PASSWORD变量
$keytool-importkeystore -srckeystore marathon.pkcs12
-srcaliasmarathon
-srcstorepass$MARATHON_PKCS_PASSWORD-srcstoretypePKCS12
-destkeystoremarathon.jks
-deststorepass$MARATHON_JKS_PASSWORD
⑤、通过创建的keystore以及其密码启动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_pathmarathon.jks
--ssl_keystore_password$MARATHON_JKS_PASSWORD
⑥、通过HTTPS端口接入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