关注IT
关注系统玩家

Marathon 开启SSL和登录身份认证

Marathon使您能够通过SSL保护其API端点,并通过HTTP基本访问身份验证限制对它们的访问。如果您打算使用基本身份验证,我们建议启用SSL。否则,用户名和密码将被不加密的方式传输,并且容易被非意图的方式读取。

启用S​​SL

如果您已经有一个Java密钥库,请将其传递给Marathon以及密钥存储区的密码:

$ cd /path/to/marathon
$ ./bin/start --master zk://localhost:2181/mesos \
                  --zk zk://localhost:2181/marathon \
       --ssl_keystore_path marathon.jks \
   --ssl_keystore_password $MARATHON_JKS_PASSWORD

默认情况下,Marathon在端口8443上提供SSL请求(可以使用--https_port 命令行标志更改此端口)。一旦Marathon运行,通过其HTTPS端口访问其API和UI:

$ curl https://localhost:8443/v2/apps

请注意,默认情况下,当一个请求被代理到领先的马拉松实例时,将根据证书检查领导者的主机名。如果您不在证书中提供正确的CN值,则代理将失败。在这种情况下,您可以通过传递--leader_proxy_ssl_ignore_hostname给马拉松来跳过主机名检查。

使用SSL密钥和证书生成密钥库

如果您还没有Java密钥库,请按照以下步骤创建一个。

谨慎:现代浏览器和大多数工具将给用户一个警告,使访问Marathon API和UI难以访问,除非您的密钥库中的SSL证书由受信任的证书颁发机构签署。从受信任的机构购买SSL证书或将公司的根证书分发给Marathon API和UI的用户。
  1. 使用OpenSSL生成RSA私钥 。
     # Set key password to env variable `MARATHON_KEY_PASSWORD`
     $ openssl genrsa -des3 -out marathon.key -passout "env:MARATHON_KEY_PASSWORD"
    
  2. 通过以下方法之一获取密钥证书:
    • (推荐)从受信任的证书颁发机构购买证书。这样可以确保您的Marathon实例的API和UI用户已经信任SSL证书,从而阻止了他们的额外步骤。
    • (不受信任)为密钥生成证书。以下命令提示信息以确保密钥库的安全。“通用名称”必须是您打算使用证书的完全限定的主机名。
       # Read key password from env env variable `MARATHON_KEY_PASSWORD`
       $ openssl req -new -x509 -key marathon.key \
                             -passin "env:MARATHON_KEY_PASSWORD" \
                                -out self-signed-marathon.pem
      
  3. 将密钥和证书文件合并为PKCS12格式文件,即Java密钥库使用的格式。如果您收到的证书不是 .pem格式,请参阅 Jetty SSL配置 文档以了解如何转换它。
     # Read key password from env variable `MARATHON_KEY_PASSWORD`
     # Set PKCS password to env variable `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
    
  4. 导入密钥库。
     # Read PKCS password from env variable `MARATHON_PKCS_PASSWORD`
     # Set JKS password to env variable `MARATHON_JKS_PASSWORD`
     $ keytool -importkeystore -srckeystore marathon.pkcs12 \
                                  -srcalias marathon \
                              -srcstorepass $MARATHON_PKCS_PASSWORD \
                              -srcstoretype PKCS12 \
                              -destkeystore marathon.jks \
                             -deststorepass $MARATHON_JKS_PASSWORD
    
  5. 使用密钥库启动马拉松和创建密钥库时选择的密码。
     # Read JKS password from env variable `MARATHON_JKS_PASSWORD`
     $ ./bin/start --master zk://localhost:2181/mesos \
                       --zk zk://localhost:2181/marathon \
            --ssl_keystore_path marathon.jks \
        --ssl_keystore_password $MARATHON_JKS_PASSWORD
    
  6. 通过HTTPS端口访问Marathon API和UI(默认值为8443)。HTTPS:// <MARATHON_HOST>:8443

启用基本访问认证

注意:如果您计划使用基本身份验证,强烈建议您启用SSL。如果未启用SSL,您的Marathon实例的用户名和密码将被不加密地传输,并且可以很容易地被非预期的方式读取。

通过将冒号(:)分隔的用户名和密码传递给--http_credentials命令行标志来启用基本身份验证 。注意:用户名不能包含冒号。

$ cd /path/to/marathon
$ ./bin/start --master zk://localhost:2181/mesos \
                  --zk zk://localhost:2181/marathon \
        --http_credentials 'admin:password' \
       --ssl_keystore_path /path/to/marathon.jks \
   --ssl_keystore_password $MARATHON_JKS_PASSWORD
分享到:更多 ()
喜欢 0
rancher

评论 抢沙发

评论前必须登录!