Spring-Cloud-Data-Flow-入门手册-2服务器配置
时间:2018-08-26 10:34:46来源:杰瑞文章网点击:作文字数:400字
作文导读:重要说明:本方是翻译自https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#getting-started这个文章,感谢Sabby AnandanMarius BogoeviciEricBottardMark FisherIlayaperumal GopinathanGunnar HillertMark PollackPatrickPeraltaGlenn RenfroThomas RisbergDave SyerDavid TuranskiJanne ValkealahtiOlegZhurakousky这些原文作者的写作成果,让我们能更好地入门学习Spring Cloud Data Flow的相关技术,考虑到国内中文的文档资料比较欠缺,而且基本不太成体系,所以自己希望来翻译该文章,方便学习使用。以下是原文内容的翻译,一些关键性的技术术语,本文考虑不进行翻译,保持原来的英文词汇,加强技术术语印象,而且这些技术术语强行翻译成中文的话,感觉很别扭。另一方面水平有限,文本可能有翻译不太贴切或是错误的地方,还请大家体谅,看到后多多指正。目录服务器配置... 212.功能启用/禁用... 213. 数据库配置... 213.1. 添加自定义JDBC驱动... 414. 安全性... 414.1. 启用HTTPS.. 514.2. 传统认证... 714.3. OAuth 2.0. 1614.4. 配置Spring Boot管理端点的安全性... 1915. 监控和管理... 2015.1. Spring Boot 管理... 2015.2. 监控部署的应用程序... 2115.3. 日志和DataDog 指标器(MetricWriter). 25********************************以下是原文内容的翻译**********************Version 1.3.0.M2© 2012-2017 Pivotal Software, Inc.你可以自己使用这个文章或是分发给其它人,但前提是你不以赚取费用为目标,同时每个转发的文章必须包含此版权通知,无论是印刷品版本还是电子发行版本。服务器配置在本节中,您将学习如何配置SpringCloud Data Flow服务器的功能,如关系型数据库的使用和安全性配置。您还将学习如何配置SpringCloud Data Flow的Shell命令行工具的功能。12.功能启用/禁用数据流服务器提供了一组特定功能,可以在启动时启用/禁用这些功能特性。这些特性包括全生命周期的操作、REST接口风格的端点(服务器、基于shell或UI的客户端 ):1. Streams2. Tasks3. 分析在启动数据流服务器时,可以通过设置以下布尔属性来启用、禁用这些特性:·spring.cloud.dataflow.features.streams-enabled·spring.cloud.dataflow.features.tasks-enabled·spring.cloud.dataflow.features.analytics-enabled默认情况下,所有功能都会启用。注意:由于分析功能是默认启用的,所以数据流服务器需要有一个redis存储作为数据分析库,我们提供一个默认的基于Redis的分析功能实现类。这也意味着数据流服务器的健康状态取决于redis存储的可用性。如果你不想启用HTTP端点来读取Redis库里的那些数据,可以使用上边的属性配置来禁用分析功能。REST风格的端点,提供了的功能启用/禁用的状态信息。13. 数据库配置关系数据库用于存储stream和task的定义以及task的执行状态。Spring Cloud Data Flow为H2,HSQLDB,MySQL,Oracle,DB2,SQL Server,PostgreSQL提供了相应的数据架构,在服务器启动时将会自动创建相应的数据库和表结构。SpringCloud Data Flow本身提供了H2数据库的嵌入式实例,可以直接在开发环境当中使用,但不推荐用于生产环境。MySQL(使用MariaDB的驱动) ,HSQLDB, PostgreSQL 的JDBC驱动程序, 和嵌入式 H2一样,也是开箱即用的,平台本身已经自带相应的驱动。如果你正在使用其他的数据库,那么相应的JDBC驱动程序JAR包需要存放在服务器的对应classpath里。数据库属性可以作为环境变量或命令行参数传递给数据流服务器。· 环境变量:export spring_datasource_url=jdbc:postgresql://localhost:5432/mydbexport spring_datasource_username=myuserexport spring_datasource_password=mypassexport spring_datasource_driver-class-name="org.postgresql.Driver"如果你使用的是MySQL,命令行参数是:java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.0.0.BUILD-SNAPSHOT.jar --spring.datasource.url=jdbc:mysql: --spring.datasource.username= --spring.datasource.password= --spring.datasource.driver-class-name=org.mariadb.jdbc.Driver &如果你使用的是PostgreSQL,命令行参数是:java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.0.0.BUILD-SNAPSHOT.jar --spring.datasource.url=jdbc:postgresql: --spring.datasource.username= --spring.datasource.password= --spring.datasource.driver-class-name=org.postgresql.Driver &如果你使用的是HSQLDB,命令行参数是:java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.0.0.BUILD-SNAPSHOT.jar --spring.datasource.url=jdbc:hsqldb: --spring.datasource.username=SA --spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver &数据存储升级版 1.0.x 到 1.1.X的时候,需要升级新的数据架构到Spring Cloud Data Flow,具体数据库类型的迁移脚本的可以在相应的位置找到。如果你想使用一个外部的H2数据库实例而不是一个嵌入式的,设置Spring Cloud DataFlow的spring.dataflow.embedded.database.enabled 属性为false。如果spring.dataflow.embedded.database.enabled 属性为false或者指定了其他数据库类型作为数据源,那么h2嵌入式数据库是不会启用的。13.1. 添加自定义JDBC驱动为数据库添加自定义驱动程序,如Oracle,建议您重新编译数据流服务器,在Maven的POM.XML文件中添加依赖。每个目标平台都有Spring Cloud Data Flow服务器的对应版本,您需要针对每个平台修改相应版本的 POM.XML文件。在每个GitHub库中有每个服务器版本对应的标签。为本地服务器添加自定义JDBC驱动的依赖JAR包:1. 选择你需要重新编译的对应服务器版本的标签,在 GitHub库里进行克隆。2. 编辑spring-cloud-dataflow-server-local/pom.xml文件,在dependencies部分添加数据库驱动程序所需的的依赖。在下面的示例中,选定了Oracle驱动程序。... com.oracle.jdbc ojdbc8 12.2.0.1 ...3. 重新编译SpringCloud Data Flow,具体内容查看:https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#building在重新编译SpringCloud Data Flow的时候,可以通过设置 dataflow-server.yml文件中的属性,给相应的版本设置属性的默认值。如,像下边这样来设置postgres这个属性的默认值:· dataflow-server.ymlspring: datasource: url: jdbc:postgresql://localhost:5432/mydb username: myuser password: mypass driver-class-name:org.postgresql.Driver14. 安全性默认情况下,数据流服务器是不安全的,运行在一个未加密的HTTP连接上。通过启用HTTPS并要求客户端使用以下两种身份验证,您可以确保REST端点以及数据流仪表板的安全性:· OAuth 2.0认证· 传统认证方式 (如 Basic 认证)认证选项当选择 传统认证,Spring Cloud Data Flow服务器将成为主要的认证点,使用SpringSecurity作为基础。当选择此选项时,用户需要进一步定义他们首选的认证机制,选择所需的后台认证存储:· 单用户认证,https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#configuration-security-single-user-authentication· LPAD认证,https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#configuration-security-ldap-authentication· 基于文件认证,https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#configuration-security-file-based-authentication传统认证 或 oauth2之间进行选择的时候,记住这两个选项是互斥的。请看下面的子章节进行更详细的讨论。默认情况下,REST端点(用于管理和状态查看)以及仪表板UI不需要经过身份验证就可以访问。14.1. 启用HTTPS默认情况下,仪表板,管理,和状态端点使用HTTP作为传输协议。你可以很容易地将他们切换到HTTPS,在 application.yml配置文件中添加证书。server: port: 8443 ssl: key-alias: yourKeyAlias key-store: path/to/keystore key-store-password: yourKeyStorePassword key-password: yourKeyPassword trust-store: path/to/trust-store trust-store-password: yourTrustStorePassword默认端口是 9393,你可以修改端口为更常见的HTTPS典型端口。如果启用了HTTPS,它将完全替代HTTP作为REST端点和数据流仪表板交互的协议。普通HTTP请求将失败。因此,请确保您相应地启用了shell命令行。14.1.1. 使用自签名证书为了测试目的或在开发阶段,创建自签名证书很方便。请执行以下命令来创建证书:$ keytool -genkey -alias dataflow -keyalg RSA -keystore dataflow.keystore -validity 3650 -storetype JKS -dname "CN=localhost, OU=Spring, O=Pivotal, L=Kailua-Kona, ST=HI, C=US" -keypass dataflow -storepass dataflowcn 是这里唯一重要的参数,它是使用的域名,如 localhost。然后添加以下内容到你 的application.yml文件里:server: port: 8443 ssl: enabled: true key-alias: dataflow key-store: "/your/path/to/dataflow.keystore" key-store-type: jks key-store-password: dataflow key-password: dataflow这是数据流服务器所需要的配置。一旦你启动服务器,你应该能够访问https://localhost:8443/。由于这是一个自签名证书,您将在浏览器中看到一个警告,需要忽略它。14.1.2. 自签名证书和Shell默认情况下,自签名证书会影响shell的正常使用,需要额外的配置步骤来使shell可以结合自签名证书工作。有两种方法可以实现:1.添加自签名证书到JVM的信任库中2.跳过证书验证添加自签名证书到JVM的信任库我们需要从密钥库导出以前创建的证书:$ keytool -export -alias dataflow -keystore dataflow.keystore -file dataflow_cert -storepass dataflow接下来,我们需要创建一个shell使用的密钥库:$ keytool -importcert -keystore dataflow.truststore -alias dataflow -storepass dataflow -file dataflow_cert -noprompt现在你可以使用以下的命令行来启动Data Flow的shell:$ java -Djavax.net.ssl.trustStorePassword=dataflow -Djavax.net.ssl.trustStore=/path/to/dataflow.truststore -Djavax.net.ssl.trustStoreType=jks -jar spring-cloud-dataflow-shell-1.3.0.M2.jarIn case you run intotrouble establishing a connection via SSL, you can enable additional loggingby using and setting thejavax.net.debugJVMargument tossl.不要忘记设置目标服务器的正确URL:dataflow:> dataflow config server https://localhost:8443/跳过证书验证或者,你也可以通过提供可选的命令行参数--dataflow.skip-ssl-validation=true来跳过验证 。使用此命令行参数后,shell将接受任何(自签名)SSL证书。如果可能的话,你应该避免使用此选项。禁用信任管理器会就失去了SSL的意义,并容易受到攻击。14.2. 传统认证当使用 传统认证时, Spring Cloud Data Flow将是唯一的身份验证提供程序。在这种情况下,数据流的REST API用户会使用 基本认证来访问端点。使用该选项时,用户可以选择3种后备存储来完成认证:•单用户认证 ,使用Spring Boot的属性•基于YAML文件的多用户认证•LDAP认证14.2.1. 单用户认证这是最简单的选项,模拟了默认的Spring Boot用户体验行为。它可以通过添加以下属性到应用程序的application.yml文件或环境变量来启用:security: basic: enabled: true realm: Spring Cloud Data Flow启用基本身份验证。必须将安全属性设置为true。(可选)基本身份验证领域将默认 为Spring ,如果没有设置的话。在当前案例中,Spring Boot启动时会自动创建一个用户叫 “user”并自动生成密码,这些信息会被打印到控制台上。采用这个配置所产生的用户,将分配所有主要的角色权限:· VIEW· CREATE· MANAGE默认的Spring Boot用户凭证你可以使用以下属性来自定义用户的相关信息:security.user.name=user # Default user name.security.user.password= # Password for the default user name. A random password is logged on startup by default.security.user.role=VIEW, CREATE, MANAGE # Granted roles for the default user name.请注意基本身份验证本身固有的问题,由于凭据被浏览器缓存,浏览网页进行回退到应用程序的页面,你会自动登录进入系统。当然,您也可以使用系统属性、环境变量或命令行参数传递认证信息,这些都是Spring Boot支持的标准方法。例如,在下面的示例中,使用命令行参数来指定用户凭据:$ java -jar spring-cloud-dataflow-server-local-1.3.0.M2.jar --security.basic.enabled=true --security.user.name=test --security.user.password=pass --security.user.role=VIEW如果你需要定义多个基于文件的用户帐号,请看看基于文件的认证。14.2.2. 基于文件的认证默认情况下,Spring Boot只允许设置一个用户。Spring Cloud Data Flow还支持在配置文件中设置多个用户。如下所述,每个用户必须指定一个密码,一个或多个角色:security: basic: enabled: true realm: Spring Cloud Data Flowspring: cloud: dataflow: security: authentication: file: enabled: true users: bob: bobspassword, ROLE_MANAGE alice: alicepwd, ROLE_VIEW, ROLE_CREATE14.2.3. LDAP认证Spring Cloud Data Flow还支持使用LDAP服务器(轻量级目录访问协议)的身份验证,支持以下2种模式:•直接绑定•搜索和绑定当LDAP身份验证选项被激活时,默认的单用户认证模式将被关闭。在采用直接绑定模式时,认证模式是使用用户定义的可分辨名称(DN),它是使用占位符的用户名。身份验证过程通过替换占位符派生出用户的专有名称,并使用它在LDAP服务器上进行用户身份验证,同时提供所需要的密码。您可以设置LDAP直接绑定如下:security: basic: enabled: true realm: Spring Cloud Data Flowspring: cloud: dataflow: security: authentication: ldap: enabled: true url: ldap://ldap.example.com:3309 userDnPattern: uid={0},ou=people,dc=example,dc=com采用搜索绑定 模式时,先以匿名方式或一个固定的账户连接到LDAP服务器,然后基于用户名的标识来寻找认证用户,然后使用查找到的用户名和相应的密码绑定到LDAP服务器。此选项配置如下:security: basic: enabled: true realm: Spring Cloud Data Flowspring: cloud: dataflow: security: authentication: ldap: enabled: true url: ldap://localhost:10389 managerDn: uid=admin,ou=system managerPassword: secret userSearchBase: ou=otherpeople,dc=example,dc=com userSearchFilter: uid={0}LDAP 传输安全当连接到LDAP服务器时,通常(在LDAP的环境中)有2个选项,可以支持建立到LDAP服务器的安全连接:· LDAP over SSL (LDAPs)· Start Transport Layer Security (Start TLS)Spring Cloud Data Flow 1.1.0只默认直接支持LDAPs,其它的需要单独配置。使用官方证书时,不需要特殊的配置,为了通过LDAPS连接到LDAP服务器,只需改变URL的格式,采用 LDAPS格式即可,例如ldaps://localhost:636。在使用自签名证书的情况下,SpringCloud Data Flow服务器的设置变得稍微复杂一些。相应的配置与 SpringCloud Data Flow服务器使用自签名证书配置非常相似,也就是SpringCloud Data Flow需要基于一个trustStore才能正常运行 。这样的配置适合在开发和测试期间使用,但请不要在生产中使用自签名证书,不然信任问题不少。最后,还必须提供一套关于trustStore的配置参数与凭据来启动服务器:$ java -Djavax.net.ssl.trustStorePassword=dataflow -Djavax.net.ssl.trustStore=/path/to/dataflow.truststore -Djavax.net.ssl.trustStoreType=jks -jar spring-cloud-starter-dataflow-server-local-1.3.0.M2.jar正如上面提到的,另一个连接LDAP服务器的安全选项是通过StartTLS。虽然Start TLS受到更多人的青睐,以至于LDAPs技术被认为是重复,没必要的 。然而StartTLS目前并不是Spring Cloud Data Flow能直接支持的。至于如何配置的问题,还需要去查看相关的资料。14.2.4.Shell 认证当使用Shell认证的时候,你可以直接在命令行参数当中直接提供相应的用户名与密码:$ java -jar target/spring-cloud-dataflow-shell-1.3.0.M2.jar --dataflow.username=myuser --dataflow.password=mysecret如果开启了认证,那么用户名是必须要提供的,如果没有提供相应的密码,那么控制台会进行提示,需要你输入相应的密码。你可以在使用shell时直接指定相应的Data Flow服务器:server-unknown:>dataflow config server --uri http://localhost:9393 --username myuser --password mysecret --skip-ssl-validation true 14.2.5. 自定义授权除了上边所讲的关于认证的配置外,也可以配置自定义授权,确定什么角色可以做什么。默认的方案使用三个角色来保护SpringCloud Data Flow暴露的REST风格的端点:·ROLE_VIEW:查看系统各种状态·ROLE_CREATE:创建,删除或是修改系统的状态·ROLE_MANAGE:启动与管理端点所有这些默认值都是在dataflow-server-defaults.yml文件里设置的,这配置也是SpringCloud Data Flow的核心模块。如果有需要的话,你也可以在 application.yml文件里重写这些配置。这些配置采用了YAML 列表的形式 (一些规则可能优先于其他的),所以你需要复制/粘贴整个列表来定制你的需求(没有办法合并列表)。默认的规则是这样的:spring: cloud: dataflow: security: authorization: enabled: true rules: # Metrics - GET /metrics/streams => hasRole('ROLE_VIEW') # About - GET /about => hasRole('ROLE_VIEW') # Metrics - GET /metrics/** => hasRole('ROLE_VIEW') - DELETE /metrics/** => hasRole('ROLE_CREATE') # Boot Endpoints - GET /management/** => hasRole('ROLE_MANAGE') # Apps - GET /apps => hasRole('ROLE_VIEW') - GET /apps/** => hasRole('ROLE_VIEW') - DELETE /apps/** => hasRole('ROLE_CREATE') - POST /apps => hasRole('ROLE_CREATE') - POST /apps/** => hasRole('ROLE_CREATE') # Completions - GET /completions/** => hasRole('ROLE_CREATE') # Job Executions & Batch Job Execution Steps && Job Step Execution Progress - GET /jobs/executions => hasRole('ROLE_VIEW') - PUT /jobs/executions/** => hasRole('ROLE_CREATE') - GET /jobs/executions/** => hasRole('ROLE_VIEW') # Batch Job Instances - GET /jobs/instances => hasRole('ROLE_VIEW') - GET /jobs/instances/* => hasRole('ROLE_VIEW') # Running Applications - GET /runtime/apps => hasRole('ROLE_VIEW') - GET /runtime/apps/** => hasRole('ROLE_VIEW') # Stream Definitions - GET /streams/definitions => hasRole('ROLE_VIEW') - GET /streams/definitions/* => hasRole('ROLE_VIEW') - GET /streams/definitions/*/related => hasRole('ROLE_VIEW') - POST /streams/definitions => hasRole('ROLE_CREATE') - DELETE /streams/definitions/* => hasRole('ROLE_CREATE') - DELETE /streams/definitions => hasRole('ROLE_CREATE') # Stream Deployments - DELETE /streams/deployments/* => hasRole('ROLE_CREATE') - DELETE /streams/deployments => hasRole('ROLE_CREATE') - POST /streams/deployments/* => hasRole('ROLE_CREATE') # Task Definitions - POST /tasks/definitions => hasRole('ROLE_CREATE') - DELETE /tasks/definitions/* => hasRole('ROLE_CREATE') - GET /tasks/definitions => hasRole('ROLE_VIEW') - GET /tasks/definitions/* => hasRole('ROLE_VIEW') # Task Executions - GET /tasks/executions => hasRole('ROLE_VIEW') - GET /tasks/executions/* => hasRole('ROLE_VIEW') - POST /tasks/executions => hasRole('ROLE_CREATE') - DELETE /tasks/executions/* => hasRole('ROLE_CREATE')每一行的格式是这样的:HTTP_METHOD URL_PATTERN '=>' SECURITY_ATTRIBUTE· HTTP_METHOD: http的请求方式, 大写· URL_PATTERN :Ant 风格的URL· SECURITY_ATTRIBUTE: SpEL表达式· 这些元素都需要用空格键, tab键这样的空白符来进行分隔。注意,这是一个YAML列表而不是spring.cloud.dataflow.security.authorization.rules下的键值对映射(因此第一行使用“-”线开始 ) 。如果你仅仅是希望控制认证,而不想管理授权,那么可以设置每个用户就可以访问所有的端点,那么可以这样设置spring.cloud.dataflow.security.authorization.enabled=false。如果安全属性使用的是基本认证,那么为用户设置角色是很必要的。例如,java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.3.0.M2.jar --security.basic.enabled=true --security.user.name=test --security.user.password=pass --security.user.role=VIEW14.2.6. 授权 - Shell 和仪表板的行为特性授权启用后,仪表板 和 shell 将根据用户所分配的角色而给用户看到和使用不同的功用。如果用户没有相应的角色,shell命令将被标记为不可使用。如果用户没有相应的角色授权,那么仪表板的用户界面将不显示对应的页面或者页面元素 。14.2.7. 基于Ldap授权当配置LDAP来进行身份验证时,可以同时配置group-role-attribute,group-search-base和group-search-filter。在没有特别指定的情况下,group role这个属性包含了角色的名字。role_manage是默认角色。如需进一步信息,请查看SpringSecurity 的LDAP服务器 参考指南。14.3. OAuth 2.0OAuth 2 允许可以将SpringCloud Data Flow集成到单一登录(SSO)的环境当中。以下3 种oauth2授权模式可以供使用:•授权码:用于图形用户界面(浏览器)的整合。你将被重定向到OAuth认证服务。•密码 :shell会使用到,你可以使用用户名和密码登录。•客户端凭据: 直接从OAuth提供者获取访问令牌,通过使用AuthorizationHTTPheader 发送到数据流服务器。REST风格的端点可以使用2种方式访问:•基本认证,使用 密码授权类型,基于 OAuth2服务来认证。•访问令牌,使用 客户端证书授权类型在设置身份验证时,强烈建议启用HTTPS,尤其是在生产环境中。你可以通过在application.yml配置文件或是通过环境变量来打开oauth2认证:security: oauth2: client: client-id: myclient client-secret: mysecret access-token-uri: http://127.0.0.1:9999/oauth/token user-authorization-uri: http://127.0.0.1:9999/oauth/authorize resource: user-info-uri: http://127.0.0.1:9999/me在OAuth的配置节中设置了Client Id这个属性,将会使系统启用OAuth2的安全认证。你可以用curl来验证基本认证是否正常启用:$ curl -u myusername:mypassword http://localhost:9393/返回的结果应该是可以使用的REST风格的端点列表。除了基本身份验证外,还可以提供访问令牌以访问REST API。可以从oauth2提供者检索oauth2访问令牌,然后通过访问令牌API使用AuthorizationHttp header发送给服务器:$ curl -H "Authorization: Bearer " http://localhost:9393/14.3.1.OAuth REST 端点的授权oauth2认证选项使用的授权规则与 传统认证 选项的一样。授权规则在dataflow-server-defaults.yml文件当中。由于安全角色的定义是与具体的环境相关联的,SpringCloud Data Flow默认情况下会将所有角色赋与oauth2认证的用户,框架使用的授权对应类是DefaultDataflowAuthoritiesExtractor。系统可以自定义行为特征,这需要提供自己的Spring bean来扩展Spring Security的基于OAuth的AuthoritiesExtractor接口。在这种情况下,自定义bean定义优先于Spring Cloud Data Flow提供的。14.3.2. 使用shell的OAuth认证如果OAuth2提供者提供了密码授权类型,那么可以用下边的方式来启动shell:$ java -jar spring-cloud-dataflow-shell-1.3.0.M2.jar --dataflow.uri=http://localhost:9393 --dataflow.username=my_username --dataflow.password=my_password记住,当Spring Cloud Data Flow的认证启用后,oauth2提供者 必须 支持 密码授权类型,不然就没法使用shell了。在shell当中,还可以使用以下的方式来提供使用证书:dataflow config server --uri http://localhost:9393 --username my_username --password my_password运行成功的话,你会看到下边的输出:dataflow:>dataflow config infodataflow config info╔═══════════╤═══════════════════════════════════════╗║Credentials│[username='my_username, password=****']║╠═══════════╪═══════════════════════════════════════╣║Result │ ║║Target │http://localhost:9393 ║╚═══════════╧═══════════════════════════════════════╝14.3.3. OAuth2认证示例Local OAuth2Server使用SpringSecurity OAuth的两个简单注解属性,可以很容易地建立OAuth2 的服务器:· @EnableResourceServer· @EnableAuthorizationServer下边的URL链接内容是一个相应的示例:https://github.com/ghillert/oauth-test-server/签出这个代码,编译好后运行起来,同时可以把Client Id和ClientSecret配置到Spring Cloud Data Flow里 。使用GitHub进行认证如果你想使用一个现成的oauth2提供商,这里有一个基于GitHub的例子。首先你需要在你的Github帐号下新建一个应用 ,地址如下:https://github.com/settings/developers当你在本地机器运行Spring Cloud Data Flow的时候,GitHub的配置类似下面这样:GitHub上注册应用程序在Authorization callback URL这一项里,你可以输入Spring Cloud Data Flow的登录URL,类似localhost:9393/login配置GitHub 的Client Id 和 Secret到 Spring Cloud Data Flow 当中:security: oauth2: client: client-id: your-github-client-id client-secret: your-github-client-secret access-token-uri: https://github.com/login/oauth/access_token user-authorization-uri: https://github.com/login/oauth/authorize resource: user-info-uri: https://api.github.com/userGitHub并不支持OAuth2的密码授权类型,Spring Cloud Data Flow的 Shell没法使用GitHub来进行认证。14.4. 配置Spring Boot管理端点的安全性当启用安全设置时,请确保 Spring Boot HTTP管理端点的也启用了安全设置 。您可以application.yml里添加配置来启用管理端点的安全性:management: contextPath: /management security: enabled: true如果没有明确地设置管理端点的安全性,那么就算security.basic.enabled被设置为true了,REST风格的端点也还是不安全的 。15. 监控和管理Spring Cloud Data Flow服务器本身是一个包括 了Actuator功能库的Spring Boot应用程序,它准备好了一系列的现成功能帮助你监控和管理你的应用程序 。Actuator功能库在路径/management下添加了HTTP端点,这也是个其它可用端点的发现页面。例如,有一个健康状态的端点可以展现应用程序 的健康状态信息和来自ConfigurableEnvironment的环境变量列表。默认情况下,只有健康状态和应用程序信息的端点是可以访问的。其它的端点是比较 敏感的 需要 明确通过配置来启用。如果你需要启用敏感的端点,那么你应该配置服务器端点的安全性, 使信息不让未经身份验证的用户访问到。本地数据流服务器默认情况下已禁用安全设置,所有可用的actuator功能库的端点是可以访问的。数据流服务器如果启用了分析功能,那么它需要相应的关系数据库和redis服务器做支撑。数据流服务器会自动配置 datasourcehealthindicator 和 redishealthindicator 。这两种服务的健康状态也纳入到服务器的整体健康状况,可以通过健康状态端点查看。15.1. Spring Boot 管理将actuator端点功能可视化并和它进行交互的好方法,是将Spring Boot Admin功能库集成到Spring Cloud Data Flow服务器中。您可以通过以下几个简单的步骤 来创建Spring Boot Admin 应用程序。将Spring Cloud Data Flow服务器作为Spring Boot Admin服务器客户端的方法是, 通过添加一个依赖到数据流服务器的Maven pom.xml文件中,然后添加额外的配置属性。你将需要克隆Spring Cloud Data Flow服务器的GitHub库以便修改Maven POM文件 。在GitHub库中有每个版本的标签。添加这种依赖会导致UI界面增加了对应每个actuator端点的标签页。Spring Boot Admin界面如果需要与JMX beans和日志记录进行交互,就需要进行额外的配置。可以通过Spring Boot admin的文档获取更多信息。因为 应用程序信息 和 健康状态 端点是未经身份验证的用户可以直接访问的,你应该启用数据流服务器的安全性设置,同时配置Spring BootAdmin 服务器的安全性,以便能安全地访问actuator终点。15.2. 监控部署的应用程序Spring Cloud Data Flow部署的应用程序基于Spring Boot的,Spring Boot包含了一些用于监控应用程序的功能特性。每个部署的应用程序中都包含了 监测Stream 和Task应用程序多个Web端点 。值得一提的是,/metrics端点包含一系列的计数器和度量,如HTTP请求的, 系统指标 的(类似JVM的统计), DataSource指标的 和 消息通道指标的 (如信息速率)。Spring Boot可以让你 添加自己的指标到/metrics端点下,一种方法是通过注册publicmetrics 接口的实现类,另一种方法是通过集成 dropwizard。Spring Boot的MetricWriter和Exporter接口用于发送数据给展现、分析这些数据的组件 。Spring Boot有输出指标到Redis, Open TSDB, Statsd和JMX的相应实现类,这些实现类可以直接使用。还有一些额外的Spring项目提供了将指标数据发送到外部系统的功能。·Spring Cloud Stream:提供了ApplicationMetricsExporter,用于通过Emitter发送指标数据到消息中间件。·SpringCloud Data Flow Metrics Collector:订阅指标数据源和聚合Spring Cloud Stream应用程序发布的指标消息 。它有一个HTTP端点用于访问聚合后的指标。·SpringCloud Data Flow Metrics:提供LogMetricWriter将指标数据写入到日志文件当中。·SpringCloud Data Flow Metrics Datadog Metrics:提供DatadogMetricWriter将数据写入到Datadog。Spring Cloud StreamEmitter提供了创建Stream应用时最常用的应用程序,它在SpringCloud Stream App Starters项目得到大量使用。使用Spring CloudStream’sEmitter,Data FlowMetrics Collector,和 Data Flow 服务器时的体系结构如下所示。Spring Cloud Data Flow Metrics 体系结构系统自带一个可用于所有支持binder的Spring Boot的指标收集器 jar包。你可以在项目页面上找到编译和运行指标收集器的更多信息。数据流服务器现在接受 spring.cloud.dataflow.metrics.collector.uri这个可选的属性,这个属性指向部署好的指标收集器应用程序的URI。例如,如果您运行的指标收集器在本机的 8080端口, 然后可以用以下命令来启动服务器(本地的例子):$ java -jar spring-cloud-dataflow-server-local-1.3.0.M2.jar --spring.cloud.dataflow.metrics.collector.uri=http://localhost:8080指标收集器可以通过基于用户名和密码的“基本”身份验证来进行安全保护。设置用户名和密码,使用属性spring.cloud.dataflow.metrics.collector.username和spring.cloud.dataflow.metrics.collector.password。如果需要将每个应用程序的指标公布出来, 那么设置spring.cloud.stream.bindings.applicationMetrics.destination属性即可。applicationmetrics目的 设置。当在数据流中部署应用程序时,可以将其设置为任何其他应用程序的属性。如果希望stream中的所有应用程序都能发布出指标数据,那么可以在数据流服务器级别上设置它。spring.cloud.dataflow.applicationProperties.stream.spring.cloud.stream.bindings.applicationMetrics.destination=metrics用metrics这个名称作为指标发布名称是一个很 不错的选择,因为指标收集器都是默认订阅 这个发布名称的数据。另一个常见的配置指标名称的方法是使用部署属性。以下是ticktock这个流应用程序的例子,它使用了App Starters当中的time和log应用程序 。app register --name time --type source --uri maven://org.springframework.cloud.stream.app:time-source-rabbit:1.2.0.RELEASEapp register --name log --type sink --uri maven://org.springframework.cloud.stream.app:log-sink-rabbit:1.2.0.RELEASEstream create --name foostream --definition "time | log"stream deploy --name foostream --properties "app.*.spring.cloud.stream.bindings.applicationMetrics.destination=metrics,deployer.*.count=2"指标收集器在HTTP端点/collector/metrics下以JSON格式暴露了聚合后的指标 。数据流服务器以两种不同的方式访问这个端点。首先是通过暴露一个/metrics/streamsHTTP端点来代理指标收集器的端点,用户界面在为每个流应用程序显示数据流图中的消息处理速率时,会调用这个暴露的端点。 同时用户界面当中的Runtime 标签页暴露的/runtime/apps端点本身和shell 当中的用于显示消息处理速率的runtimeapps命令也都会调用这个端点 。数据流的消息处理速率默认情况下,数据流会设置下边这个属性的值spring.cloud.stream.metrics.properties=spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*如果这些应用程序的属性值列表是需要进行聚合的,它也会同时设置下边这个属性。spring.metrics.export.triggers.application.includes=integration**`由于数据流只显示瞬时输入和输出通道消息速率。默认情况下,所有在/metric端点下的指标值都是发送相关的,这会降低消息的有效负载统计,但不影响功能。当需要展现这些指标值时(用于跟踪特定应用程序),数据流也暴露出 GUID这个 属性,这个 GUID属性,它的 值是平台相关的。注意,您可以通过设置来重写这些默认值,就像任何应用程序的属性值一样。数据流不会提供它自己实现的功能来存储和可视化历史指标数据。我们将通过提供一个导出器应用程序来集成现有的ALM系统,该应用程序会处理那些与指标收集器同样来源的消息,并将它们写入到现有的ALM系统中。我们支持哪个特定的ALM系统是由用户需求来驱动的。作为例子,我们将开发一个结合了开源的Grafana前端的Elastic Search导出器 。15.3. 日志和DataDog 指标器(MetricWriter)如果你希望部署的应用程序绕过指标收集器提供的集中式指标列表,你可以使用SpringCloud Data Flow Metrics和SpringCloud Data Flow Metrics Datadog Metrics当中的指标写入器 。数据流Metrics项目通过MetricWriters为Spring Boot指标的输出提供了基础。它提供了Spring Boots AutoConfiguration来设置写入过程和常用功能,如定义一个更适合当前环境的有特定名称前缀的指标名称。例如,指标名称除了包含应用程序的名称和它所属的流/任务名称外,你可能还希望名称当中包含应用程序正在运行的区域名称 。同时项目还包括了logmetricwriter功能类,可以将指标存储到日志文件中。日志文件通常被应用监控工具所利用(如Splunk),在那里日志可以被进一步处理,用于创建应用程序的性能仪表板。要利用此功能,您需要在您的流和任务应用程序中添加额外的依赖项。你可以使用Data Flow Initializr来可以定制自己任务流的应用程序,用它来先生成项目,然后添加你需要使用的MetricWriter实现类到生成的maven pom文件中。数据流Metrics项目页面上的文档提供了更多你所需的相关信息。
重要说明:本方是翻译自https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#getting-started这个文章,感谢Sabby AnandanMarius BogoeviciEricBottardMark FisherIlayaperumal GopinathanGunnar HillertMark PollackPatrickPeraltaGlenn RenfroThomas RisbergDave SyerDavid TuranskiJanne ValkealahtiOlegZhurakousky这些原文作者的写作成果,让我们能更好地入门学习Spring Cloud Data Flow的相关技术,考虑到国内中文的文档资料比较欠缺,而且基本不太成体系,所以自己希望来翻译该文章,方便学习使用。以下是原文内容的翻译,一些关键性的技术术语,本文考虑不进行翻译,保持原来的英文词汇,加强技术术语印象,而且这些技术术语强行翻译成中文的话,感觉很别扭。另一方面水平有限,文本可能有翻译不太贴切或是错误的地方,还请大家体谅,看到后多多指正。目录服务器配置... 212.功能启用/禁用... 213. 数据库配置... 213.1. 添加自定义JDBC驱动... 414. 安全性... 414.1. 启用HTTPS.. 514.2. 传统认证... 714.3. OAuth 2.0. 1614.4. 配置Spring Boot管理端点的安全性... 1915. 监控和管理... 2015.1. Spring Boot 管理... 2015.2. 监控部署的应用程序... 2115.3. 日志和DataDog 指标器(MetricWriter). 25********************************以下是原文内容的翻译**********************Version 1.3.0.M2© 2012-2017 Pivotal Software, Inc.你可以自己使用这个文章或是分发给其它人,但前提是你不以赚取费用为目标,同时每个转发的文章必须包含此版权通知,无论是印刷品版本还是电子发行版本。服务器配置在本节中,您将学习如何配置SpringCloud Data Flow服务器的功能,如关系型数据库的使用和安全性配置。您还将学习如何配置SpringCloud Data Flow的Shell命令行工具的功能。12.功能启用/禁用数据流服务器提供了一组特定功能,可以在启动时启用/禁用这些功能特性。这些特性包括全生命周期的操作、REST接口风格的端点(服务器、基于shell或UI的客户端 ):1. Streams2. Tasks3. 分析在启动数据流服务器时,可以通过设置以下布尔属性来启用、禁用这些特性:·spring.cloud.dataflow.features.streams-enabled·spring.cloud.dataflow.features.tasks-enabled·spring.cloud.dataflow.features.analytics-enabled默认情况下,所有功能都会启用。注意:由于分析功能是默认启用的,所以数据流服务器需要有一个redis存储作为数据分析库,我们提供一个默认的基于Redis的分析功能实现类。这也意味着数据流服务器的健康状态取决于redis存储的可用性。如果你不想启用HTTP端点来读取Redis库里的那些数据,可以使用上边的属性配置来禁用分析功能。REST风格的端点,提供了的功能启用/禁用的状态信息。13. 数据库配置关系数据库用于存储stream和task的定义以及task的执行状态。Spring Cloud Data Flow为H2,HSQLDB,MySQL,Oracle,DB2,SQL Server,PostgreSQL提供了相应的数据架构,在服务器启动时将会自动创建相应的数据库和表结构。SpringCloud Data Flow本身提供了H2数据库的嵌入式实例,可以直接在开发环境当中使用,但不推荐用于生产环境。MySQL(使用MariaDB的驱动) ,HSQLDB, PostgreSQL 的JDBC驱动程序, 和嵌入式 H2一样,也是开箱即用的,平台本身已经自带相应的驱动。如果你正在使用其他的数据库,那么相应的JDBC驱动程序JAR包需要存放在服务器的对应classpath里。数据库属性可以作为环境变量或命令行参数传递给数据流服务器。· 环境变量:export spring_datasource_url=jdbc:postgresql://localhost:5432/mydbexport spring_datasource_username=myuserexport spring_datasource_password=mypassexport spring_datasource_driver-class-name="org.postgresql.Driver"如果你使用的是MySQL,命令行参数是:java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.0.0.BUILD-SNAPSHOT.jar --spring.datasource.url=jdbc:mysql: --spring.datasource.username= --spring.datasource.password= --spring.datasource.driver-class-name=org.mariadb.jdbc.Driver &如果你使用的是PostgreSQL,命令行参数是:java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.0.0.BUILD-SNAPSHOT.jar --spring.datasource.url=jdbc:postgresql: --spring.datasource.username= --spring.datasource.password= --spring.datasource.driver-class-name=org.postgresql.Driver &如果你使用的是HSQLDB,命令行参数是:java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.0.0.BUILD-SNAPSHOT.jar --spring.datasource.url=jdbc:hsqldb: --spring.datasource.username=SA --spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver &数据存储升级版 1.0.x 到 1.1.X的时候,需要升级新的数据架构到Spring Cloud Data Flow,具体数据库类型的迁移脚本的可以在相应的位置找到。如果你想使用一个外部的H2数据库实例而不是一个嵌入式的,设置Spring Cloud DataFlow的spring.dataflow.embedded.database.enabled 属性为false。如果spring.dataflow.embedded.database.enabled 属性为false或者指定了其他数据库类型作为数据源,那么h2嵌入式数据库是不会启用的。13.1. 添加自定义JDBC驱动为数据库添加自定义驱动程序,如Oracle,建议您重新编译数据流服务器,在Maven的POM.XML文件中添加依赖。每个目标平台都有Spring Cloud Data Flow服务器的对应版本,您需要针对每个平台修改相应版本的 POM.XML文件。在每个GitHub库中有每个服务器版本对应的标签。为本地服务器添加自定义JDBC驱动的依赖JAR包:1. 选择你需要重新编译的对应服务器版本的标签,在 GitHub库里进行克隆。2. 编辑spring-cloud-dataflow-server-local/pom.xml文件,在dependencies部分添加数据库驱动程序所需的的依赖。在下面的示例中,选定了Oracle驱动程序。... com.oracle.jdbc ojdbc8 12.2.0.1 ...3. 重新编译SpringCloud Data Flow,具体内容查看:https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#building在重新编译SpringCloud Data Flow的时候,可以通过设置 dataflow-server.yml文件中的属性,给相应的版本设置属性的默认值。如,像下边这样来设置postgres这个属性的默认值:· dataflow-server.ymlspring: datasource: url: jdbc:postgresql://localhost:5432/mydb username: myuser password: mypass driver-class-name:org.postgresql.Driver14. 安全性默认情况下,数据流服务器是不安全的,运行在一个未加密的HTTP连接上。通过启用HTTPS并要求客户端使用以下两种身份验证,您可以确保REST端点以及数据流仪表板的安全性:· OAuth 2.0认证· 传统认证方式 (如 Basic 认证)认证选项当选择 传统认证,Spring Cloud Data Flow服务器将成为主要的认证点,使用SpringSecurity作为基础。当选择此选项时,用户需要进一步定义他们首选的认证机制,选择所需的后台认证存储:· 单用户认证,https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#configuration-security-single-user-authentication· LPAD认证,https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#configuration-security-ldap-authentication· 基于文件认证,https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#configuration-security-file-based-authentication传统认证 或 oauth2之间进行选择的时候,记住这两个选项是互斥的。请看下面的子章节进行更详细的讨论。默认情况下,REST端点(用于管理和状态查看)以及仪表板UI不需要经过身份验证就可以访问。14.1. 启用HTTPS默认情况下,仪表板,管理,和状态端点使用HTTP作为传输协议。你可以很容易地将他们切换到HTTPS,在 application.yml配置文件中添加证书。server: port: 8443 ssl: key-alias: yourKeyAlias key-store: path/to/keystore key-store-password: yourKeyStorePassword key-password: yourKeyPassword trust-store: path/to/trust-store trust-store-password: yourTrustStorePassword默认端口是 9393,你可以修改端口为更常见的HTTPS典型端口。如果启用了HTTPS,它将完全替代HTTP作为REST端点和数据流仪表板交互的协议。普通HTTP请求将失败。因此,请确保您相应地启用了shell命令行。14.1.1. 使用自签名证书为了测试目的或在开发阶段,创建自签名证书很方便。请执行以下命令来创建证书:$ keytool -genkey -alias dataflow -keyalg RSA -keystore dataflow.keystore -validity 3650 -storetype JKS -dname "CN=localhost, OU=Spring, O=Pivotal, L=Kailua-Kona, ST=HI, C=US" -keypass dataflow -storepass dataflowcn 是这里唯一重要的参数,它是使用的域名,如 localhost。然后添加以下内容到你 的application.yml文件里:server: port: 8443 ssl: enabled: true key-alias: dataflow key-store: "/your/path/to/dataflow.keystore" key-store-type: jks key-store-password: dataflow key-password: dataflow这是数据流服务器所需要的配置。一旦你启动服务器,你应该能够访问https://localhost:8443/。由于这是一个自签名证书,您将在浏览器中看到一个警告,需要忽略它。14.1.2. 自签名证书和Shell默认情况下,自签名证书会影响shell的正常使用,需要额外的配置步骤来使shell可以结合自签名证书工作。有两种方法可以实现:1.添加自签名证书到JVM的信任库中2.跳过证书验证添加自签名证书到JVM的信任库我们需要从密钥库导出以前创建的证书:$ keytool -export -alias dataflow -keystore dataflow.keystore -file dataflow_cert -storepass dataflow接下来,我们需要创建一个shell使用的密钥库:$ keytool -importcert -keystore dataflow.truststore -alias dataflow -storepass dataflow -file dataflow_cert -noprompt现在你可以使用以下的命令行来启动Data Flow的shell:$ java -Djavax.net.ssl.trustStorePassword=dataflow -Djavax.net.ssl.trustStore=/path/to/dataflow.truststore -Djavax.net.ssl.trustStoreType=jks -jar spring-cloud-dataflow-shell-1.3.0.M2.jarIn case you run intotrouble establishing a connection via SSL, you can enable additional loggingby using and setting thejavax.net.debugJVMargument tossl.不要忘记设置目标服务器的正确URL:dataflow:> dataflow config server https://localhost:8443/跳过证书验证或者,你也可以通过提供可选的命令行参数--dataflow.skip-ssl-validation=true来跳过验证 。使用此命令行参数后,shell将接受任何(自签名)SSL证书。如果可能的话,你应该避免使用此选项。禁用信任管理器会就失去了SSL的意义,并容易受到攻击。14.2. 传统认证当使用 传统认证时, Spring Cloud Data Flow将是唯一的身份验证提供程序。在这种情况下,数据流的REST API用户会使用 基本认证来访问端点。使用该选项时,用户可以选择3种后备存储来完成认证:•单用户认证 ,使用Spring Boot的属性•基于YAML文件的多用户认证•LDAP认证14.2.1. 单用户认证这是最简单的选项,模拟了默认的Spring Boot用户体验行为。它可以通过添加以下属性到应用程序的application.yml文件或环境变量来启用:security: basic: enabled: true realm: Spring Cloud Data Flow启用基本身份验证。必须将安全属性设置为true。(可选)基本身份验证领域将默认 为Spring ,如果没有设置的话。在当前案例中,Spring Boot启动时会自动创建一个用户叫 “user”并自动生成密码,这些信息会被打印到控制台上。采用这个配置所产生的用户,将分配所有主要的角色权限:· VIEW· CREATE· MANAGE默认的Spring Boot用户凭证你可以使用以下属性来自定义用户的相关信息:security.user.name=user # Default user name.security.user.password= # Password for the default user name. A random password is logged on startup by default.security.user.role=VIEW, CREATE, MANAGE # Granted roles for the default user name.请注意基本身份验证本身固有的问题,由于凭据被浏览器缓存,浏览网页进行回退到应用程序的页面,你会自动登录进入系统。当然,您也可以使用系统属性、环境变量或命令行参数传递认证信息,这些都是Spring Boot支持的标准方法。例如,在下面的示例中,使用命令行参数来指定用户凭据:$ java -jar spring-cloud-dataflow-server-local-1.3.0.M2.jar --security.basic.enabled=true --security.user.name=test --security.user.password=pass --security.user.role=VIEW如果你需要定义多个基于文件的用户帐号,请看看基于文件的认证。14.2.2. 基于文件的认证默认情况下,Spring Boot只允许设置一个用户。Spring Cloud Data Flow还支持在配置文件中设置多个用户。如下所述,每个用户必须指定一个密码,一个或多个角色:security: basic: enabled: true realm: Spring Cloud Data Flowspring: cloud: dataflow: security: authentication: file: enabled: true users: bob: bobspassword, ROLE_MANAGE alice: alicepwd, ROLE_VIEW, ROLE_CREATE14.2.3. LDAP认证Spring Cloud Data Flow还支持使用LDAP服务器(轻量级目录访问协议)的身份验证,支持以下2种模式:•直接绑定•搜索和绑定当LDAP身份验证选项被激活时,默认的单用户认证模式将被关闭。在采用直接绑定模式时,认证模式是使用用户定义的可分辨名称(DN),它是使用占位符的用户名。身份验证过程通过替换占位符派生出用户的专有名称,并使用它在LDAP服务器上进行用户身份验证,同时提供所需要的密码。您可以设置LDAP直接绑定如下:security: basic: enabled: true realm: Spring Cloud Data Flowspring: cloud: dataflow: security: authentication: ldap: enabled: true url: ldap://ldap.example.com:3309 userDnPattern: uid={0},ou=people,dc=example,dc=com采用搜索绑定 模式时,先以匿名方式或一个固定的账户连接到LDAP服务器,然后基于用户名的标识来寻找认证用户,然后使用查找到的用户名和相应的密码绑定到LDAP服务器。此选项配置如下:security: basic: enabled: true realm: Spring Cloud Data Flowspring: cloud: dataflow: security: authentication: ldap: enabled: true url: ldap://localhost:10389 managerDn: uid=admin,ou=system managerPassword: secret userSearchBase: ou=otherpeople,dc=example,dc=com userSearchFilter: uid={0}LDAP 传输安全当连接到LDAP服务器时,通常(在LDAP的环境中)有2个选项,可以支持建立到LDAP服务器的安全连接:· LDAP over SSL (LDAPs)· Start Transport Layer Security (Start TLS)Spring Cloud Data Flow 1.1.0只默认直接支持LDAPs,其它的需要单独配置。使用官方证书时,不需要特殊的配置,为了通过LDAPS连接到LDAP服务器,只需改变URL的格式,采用 LDAPS格式即可,例如ldaps://localhost:636。在使用自签名证书的情况下,SpringCloud Data Flow服务器的设置变得稍微复杂一些。相应的配置与 SpringCloud Data Flow服务器使用自签名证书配置非常相似,也就是SpringCloud Data Flow需要基于一个trustStore才能正常运行 。这样的配置适合在开发和测试期间使用,但请不要在生产中使用自签名证书,不然信任问题不少。最后,还必须提供一套关于trustStore的配置参数与凭据来启动服务器:$ java -Djavax.net.ssl.trustStorePassword=dataflow -Djavax.net.ssl.trustStore=/path/to/dataflow.truststore -Djavax.net.ssl.trustStoreType=jks -jar spring-cloud-starter-dataflow-server-local-1.3.0.M2.jar正如上面提到的,另一个连接LDAP服务器的安全选项是通过StartTLS。虽然Start TLS受到更多人的青睐,以至于LDAPs技术被认为是重复,没必要的 。然而StartTLS目前并不是Spring Cloud Data Flow能直接支持的。至于如何配置的问题,还需要去查看相关的资料。14.2.4.Shell 认证当使用Shell认证的时候,你可以直接在命令行参数当中直接提供相应的用户名与密码:$ java -jar target/spring-cloud-dataflow-shell-1.3.0.M2.jar --dataflow.username=myuser --dataflow.password=mysecret如果开启了认证,那么用户名是必须要提供的,如果没有提供相应的密码,那么控制台会进行提示,需要你输入相应的密码。你可以在使用shell时直接指定相应的Data Flow服务器:server-unknown:>dataflow config server --uri http://localhost:9393 --username myuser --password mysecret --skip-ssl-validation true 14.2.5. 自定义授权除了上边所讲的关于认证的配置外,也可以配置自定义授权,确定什么角色可以做什么。默认的方案使用三个角色来保护SpringCloud Data Flow暴露的REST风格的端点:·ROLE_VIEW:查看系统各种状态·ROLE_CREATE:创建,删除或是修改系统的状态·ROLE_MANAGE:启动与管理端点所有这些默认值都是在dataflow-server-defaults.yml文件里设置的,这配置也是SpringCloud Data Flow的核心模块。如果有需要的话,你也可以在 application.yml文件里重写这些配置。这些配置采用了YAML 列表的形式 (一些规则可能优先于其他的),所以你需要复制/粘贴整个列表来定制你的需求(没有办法合并列表)。默认的规则是这样的:spring: cloud: dataflow: security: authorization: enabled: true rules: # Metrics - GET /metrics/streams => hasRole('ROLE_VIEW') # About - GET /about => hasRole('ROLE_VIEW') # Metrics - GET /metrics/** => hasRole('ROLE_VIEW') - DELETE /metrics/** => hasRole('ROLE_CREATE') # Boot Endpoints - GET /management/** => hasRole('ROLE_MANAGE') # Apps - GET /apps => hasRole('ROLE_VIEW') - GET /apps/** => hasRole('ROLE_VIEW') - DELETE /apps/** => hasRole('ROLE_CREATE') - POST /apps => hasRole('ROLE_CREATE') - POST /apps/** => hasRole('ROLE_CREATE') # Completions - GET /completions/** => hasRole('ROLE_CREATE') # Job Executions & Batch Job Execution Steps && Job Step Execution Progress - GET /jobs/executions => hasRole('ROLE_VIEW') - PUT /jobs/executions/** => hasRole('ROLE_CREATE') - GET /jobs/executions/** => hasRole('ROLE_VIEW') # Batch Job Instances - GET /jobs/instances => hasRole('ROLE_VIEW') - GET /jobs/instances/* => hasRole('ROLE_VIEW') # Running Applications - GET /runtime/apps => hasRole('ROLE_VIEW') - GET /runtime/apps/** => hasRole('ROLE_VIEW') # Stream Definitions - GET /streams/definitions => hasRole('ROLE_VIEW') - GET /streams/definitions/* => hasRole('ROLE_VIEW') - GET /streams/definitions/*/related => hasRole('ROLE_VIEW') - POST /streams/definitions => hasRole('ROLE_CREATE') - DELETE /streams/definitions/* => hasRole('ROLE_CREATE') - DELETE /streams/definitions => hasRole('ROLE_CREATE') # Stream Deployments - DELETE /streams/deployments/* => hasRole('ROLE_CREATE') - DELETE /streams/deployments => hasRole('ROLE_CREATE') - POST /streams/deployments/* => hasRole('ROLE_CREATE') # Task Definitions - POST /tasks/definitions => hasRole('ROLE_CREATE') - DELETE /tasks/definitions/* => hasRole('ROLE_CREATE') - GET /tasks/definitions => hasRole('ROLE_VIEW') - GET /tasks/definitions/* => hasRole('ROLE_VIEW') # Task Executions - GET /tasks/executions => hasRole('ROLE_VIEW') - GET /tasks/executions/* => hasRole('ROLE_VIEW') - POST /tasks/executions => hasRole('ROLE_CREATE') - DELETE /tasks/executions/* => hasRole('ROLE_CREATE')每一行的格式是这样的:HTTP_METHOD URL_PATTERN '=>' SECURITY_ATTRIBUTE· HTTP_METHOD: http的请求方式, 大写· URL_PATTERN :Ant 风格的URL· SECURITY_ATTRIBUTE: SpEL表达式· 这些元素都需要用空格键, tab键这样的空白符来进行分隔。注意,这是一个YAML列表而不是spring.cloud.dataflow.security.authorization.rules下的键值对映射(因此第一行使用“-”线开始 ) 。如果你仅仅是希望控制认证,而不想管理授权,那么可以设置每个用户就可以访问所有的端点,那么可以这样设置spring.cloud.dataflow.security.authorization.enabled=false。如果安全属性使用的是基本认证,那么为用户设置角色是很必要的。例如,java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.3.0.M2.jar --security.basic.enabled=true --security.user.name=test --security.user.password=pass --security.user.role=VIEW14.2.6. 授权 - Shell 和仪表板的行为特性授权启用后,仪表板 和 shell 将根据用户所分配的角色而给用户看到和使用不同的功用。如果用户没有相应的角色,shell命令将被标记为不可使用。如果用户没有相应的角色授权,那么仪表板的用户界面将不显示对应的页面或者页面元素 。14.2.7. 基于Ldap授权当配置LDAP来进行身份验证时,可以同时配置group-role-attribute,group-search-base和group-search-filter。在没有特别指定的情况下,group role这个属性包含了角色的名字。role_manage是默认角色。如需进一步信息,请查看SpringSecurity 的LDAP服务器 参考指南。14.3. OAuth 2.0OAuth 2 允许可以将SpringCloud Data Flow集成到单一登录(SSO)的环境当中。以下3 种oauth2授权模式可以供使用:•授权码:用于图形用户界面(浏览器)的整合。你将被重定向到OAuth认证服务。•密码 :shell会使用到,你可以使用用户名和密码登录。•客户端凭据: 直接从OAuth提供者获取访问令牌,通过使用AuthorizationHTTPheader 发送到数据流服务器。REST风格的端点可以使用2种方式访问:•基本认证,使用 密码授权类型,基于 OAuth2服务来认证。•访问令牌,使用 客户端证书授权类型在设置身份验证时,强烈建议启用HTTPS,尤其是在生产环境中。你可以通过在application.yml配置文件或是通过环境变量来打开oauth2认证:security: oauth2: client: client-id: myclient client-secret: mysecret access-token-uri: http://127.0.0.1:9999/oauth/token user-authorization-uri: http://127.0.0.1:9999/oauth/authorize resource: user-info-uri: http://127.0.0.1:9999/me在OAuth的配置节中设置了Client Id这个属性,将会使系统启用OAuth2的安全认证。你可以用curl来验证基本认证是否正常启用:$ curl -u myusername:mypassword http://localhost:9393/返回的结果应该是可以使用的REST风格的端点列表。除了基本身份验证外,还可以提供访问令牌以访问REST API。可以从oauth2提供者检索oauth2访问令牌,然后通过访问令牌API使用AuthorizationHttp header发送给服务器:$ curl -H "Authorization: Bearer " http://localhost:9393/14.3.1.OAuth REST 端点的授权oauth2认证选项使用的授权规则与 传统认证 选项的一样。授权规则在dataflow-server-defaults.yml文件当中。由于安全角色的定义是与具体的环境相关联的,SpringCloud Data Flow默认情况下会将所有角色赋与oauth2认证的用户,框架使用的授权对应类是DefaultDataflowAuthoritiesExtractor。系统可以自定义行为特征,这需要提供自己的Spring bean来扩展Spring Security的基于OAuth的AuthoritiesExtractor接口。在这种情况下,自定义bean定义优先于Spring Cloud Data Flow提供的。14.3.2. 使用shell的OAuth认证如果OAuth2提供者提供了密码授权类型,那么可以用下边的方式来启动shell:$ java -jar spring-cloud-dataflow-shell-1.3.0.M2.jar --dataflow.uri=http://localhost:9393 --dataflow.username=my_username --dataflow.password=my_password记住,当Spring Cloud Data Flow的认证启用后,oauth2提供者 必须 支持 密码授权类型,不然就没法使用shell了。在shell当中,还可以使用以下的方式来提供使用证书:dataflow config server --uri http://localhost:9393 --username my_username --password my_password运行成功的话,你会看到下边的输出:dataflow:>dataflow config infodataflow config info╔═══════════╤═══════════════════════════════════════╗║Credentials│[username='my_username, password=****']║╠═══════════╪═══════════════════════════════════════╣║Result │ ║║Target │http://localhost:9393 ║╚═══════════╧═══════════════════════════════════════╝14.3.3. OAuth2认证示例Local OAuth2Server使用SpringSecurity OAuth的两个简单注解属性,可以很容易地建立OAuth2 的服务器:· @EnableResourceServer· @EnableAuthorizationServer下边的URL链接内容是一个相应的示例:https://github.com/ghillert/oauth-test-server/签出这个代码,编译好后运行起来,同时可以把Client Id和ClientSecret配置到Spring Cloud Data Flow里 。使用GitHub进行认证如果你想使用一个现成的oauth2提供商,这里有一个基于GitHub的例子。首先你需要在你的Github帐号下新建一个应用 ,地址如下:https://github.com/settings/developers当你在本地机器运行Spring Cloud Data Flow的时候,GitHub的配置类似下面这样:GitHub上注册应用程序在Authorization callback URL这一项里,你可以输入Spring Cloud Data Flow的登录URL,类似localhost:9393/login配置GitHub 的Client Id 和 Secret到 Spring Cloud Data Flow 当中:security: oauth2: client: client-id: your-github-client-id client-secret: your-github-client-secret access-token-uri: https://github.com/login/oauth/access_token user-authorization-uri: https://github.com/login/oauth/authorize resource: user-info-uri: https://api.github.com/userGitHub并不支持OAuth2的密码授权类型,Spring Cloud Data Flow的 Shell没法使用GitHub来进行认证。14.4. 配置Spring Boot管理端点的安全性当启用安全设置时,请确保 Spring Boot HTTP管理端点的也启用了安全设置 。您可以application.yml里添加配置来启用管理端点的安全性:management: contextPath: /management security: enabled: true如果没有明确地设置管理端点的安全性,那么就算security.basic.enabled被设置为true了,REST风格的端点也还是不安全的 。15. 监控和管理Spring Cloud Data Flow服务器本身是一个包括 了Actuator功能库的Spring Boot应用程序,它准备好了一系列的现成功能帮助你监控和管理你的应用程序 。Actuator功能库在路径/management下添加了HTTP端点,这也是个其它可用端点的发现页面。例如,有一个健康状态的端点可以展现应用程序 的健康状态信息和来自ConfigurableEnvironment的环境变量列表。默认情况下,只有健康状态和应用程序信息的端点是可以访问的。其它的端点是比较 敏感的 需要 明确通过配置来启用。如果你需要启用敏感的端点,那么你应该配置服务器端点的安全性, 使信息不让未经身份验证的用户访问到。本地数据流服务器默认情况下已禁用安全设置,所有可用的actuator功能库的端点是可以访问的。数据流服务器如果启用了分析功能,那么它需要相应的关系数据库和redis服务器做支撑。数据流服务器会自动配置 datasourcehealthindicator 和 redishealthindicator 。这两种服务的健康状态也纳入到服务器的整体健康状况,可以通过健康状态端点查看。15.1. Spring Boot 管理将actuator端点功能可视化并和它进行交互的好方法,是将Spring Boot Admin功能库集成到Spring Cloud Data Flow服务器中。您可以通过以下几个简单的步骤 来创建Spring Boot Admin 应用程序。将Spring Cloud Data Flow服务器作为Spring Boot Admin服务器客户端的方法是, 通过添加一个依赖到数据流服务器的Maven pom.xml文件中,然后添加额外的配置属性。你将需要克隆Spring Cloud Data Flow服务器的GitHub库以便修改Maven POM文件 。在GitHub库中有每个版本的标签。添加这种依赖会导致UI界面增加了对应每个actuator端点的标签页。Spring Boot Admin界面如果需要与JMX beans和日志记录进行交互,就需要进行额外的配置。可以通过Spring Boot admin的文档获取更多信息。因为 应用程序信息 和 健康状态 端点是未经身份验证的用户可以直接访问的,你应该启用数据流服务器的安全性设置,同时配置Spring BootAdmin 服务器的安全性,以便能安全地访问actuator终点。15.2. 监控部署的应用程序Spring Cloud Data Flow部署的应用程序基于Spring Boot的,Spring Boot包含了一些用于监控应用程序的功能特性。每个部署的应用程序中都包含了 监测Stream 和Task应用程序多个Web端点 。值得一提的是,/metrics端点包含一系列的计数器和度量,如HTTP请求的, 系统指标 的(类似JVM的统计), DataSource指标的 和 消息通道指标的 (如信息速率)。Spring Boot可以让你 添加自己的指标到/metrics端点下,一种方法是通过注册publicmetrics 接口的实现类,另一种方法是通过集成 dropwizard。Spring Boot的MetricWriter和Exporter接口用于发送数据给展现、分析这些数据的组件 。Spring Boot有输出指标到Redis, Open TSDB, Statsd和JMX的相应实现类,这些实现类可以直接使用。还有一些额外的Spring项目提供了将指标数据发送到外部系统的功能。·Spring Cloud Stream:提供了ApplicationMetricsExporter,用于通过Emitter发送指标数据到消息中间件。·SpringCloud Data Flow Metrics Collector:订阅指标数据源和聚合Spring Cloud Stream应用程序发布的指标消息 。它有一个HTTP端点用于访问聚合后的指标。·SpringCloud Data Flow Metrics:提供LogMetricWriter将指标数据写入到日志文件当中。·SpringCloud Data Flow Metrics Datadog Metrics:提供DatadogMetricWriter将数据写入到Datadog。Spring Cloud StreamEmitter提供了创建Stream应用时最常用的应用程序,它在SpringCloud Stream App Starters项目得到大量使用。使用Spring CloudStream’sEmitter,Data FlowMetrics Collector,和 Data Flow 服务器时的体系结构如下所示。Spring Cloud Data Flow Metrics 体系结构系统自带一个可用于所有支持binder的Spring Boot的指标收集器 jar包。你可以在项目页面上找到编译和运行指标收集器的更多信息。数据流服务器现在接受 spring.cloud.dataflow.metrics.collector.uri这个可选的属性,这个属性指向部署好的指标收集器应用程序的URI。例如,如果您运行的指标收集器在本机的 8080端口, 然后可以用以下命令来启动服务器(本地的例子):$ java -jar spring-cloud-dataflow-server-local-1.3.0.M2.jar --spring.cloud.dataflow.metrics.collector.uri=http://localhost:8080指标收集器可以通过基于用户名和密码的“基本”身份验证来进行安全保护。设置用户名和密码,使用属性spring.cloud.dataflow.metrics.collector.username和spring.cloud.dataflow.metrics.collector.password。如果需要将每个应用程序的指标公布出来, 那么设置spring.cloud.stream.bindings.applicationMetrics.destination属性即可。applicationmetrics目的 设置。当在数据流中部署应用程序时,可以将其设置为任何其他应用程序的属性。如果希望stream中的所有应用程序都能发布出指标数据,那么可以在数据流服务器级别上设置它。spring.cloud.dataflow.applicationProperties.stream.spring.cloud.stream.bindings.applicationMetrics.destination=metrics用metrics这个名称作为指标发布名称是一个很 不错的选择,因为指标收集器都是默认订阅 这个发布名称的数据。另一个常见的配置指标名称的方法是使用部署属性。以下是ticktock这个流应用程序的例子,它使用了App Starters当中的time和log应用程序 。app register --name time --type source --uri maven://org.springframework.cloud.stream.app:time-source-rabbit:1.2.0.RELEASEapp register --name log --type sink --uri maven://org.springframework.cloud.stream.app:log-sink-rabbit:1.2.0.RELEASEstream create --name foostream --definition "time | log"stream deploy --name foostream --properties "app.*.spring.cloud.stream.bindings.applicationMetrics.destination=metrics,deployer.*.count=2"指标收集器在HTTP端点/collector/metrics下以JSON格式暴露了聚合后的指标 。数据流服务器以两种不同的方式访问这个端点。首先是通过暴露一个/metrics/streamsHTTP端点来代理指标收集器的端点,用户界面在为每个流应用程序显示数据流图中的消息处理速率时,会调用这个暴露的端点。 同时用户界面当中的Runtime 标签页暴露的/runtime/apps端点本身和shell 当中的用于显示消息处理速率的runtimeapps命令也都会调用这个端点 。数据流的消息处理速率默认情况下,数据流会设置下边这个属性的值spring.cloud.stream.metrics.properties=spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*如果这些应用程序的属性值列表是需要进行聚合的,它也会同时设置下边这个属性。spring.metrics.export.triggers.application.includes=integration**`由于数据流只显示瞬时输入和输出通道消息速率。默认情况下,所有在/metric端点下的指标值都是发送相关的,这会降低消息的有效负载统计,但不影响功能。当需要展现这些指标值时(用于跟踪特定应用程序),数据流也暴露出 GUID这个 属性,这个 GUID属性,它的 值是平台相关的。注意,您可以通过设置来重写这些默认值,就像任何应用程序的属性值一样。数据流不会提供它自己实现的功能来存储和可视化历史指标数据。我们将通过提供一个导出器应用程序来集成现有的ALM系统,该应用程序会处理那些与指标收集器同样来源的消息,并将它们写入到现有的ALM系统中。我们支持哪个特定的ALM系统是由用户需求来驱动的。作为例子,我们将开发一个结合了开源的Grafana前端的Elastic Search导出器 。15.3. 日志和DataDog 指标器(MetricWriter)如果你希望部署的应用程序绕过指标收集器提供的集中式指标列表,你可以使用SpringCloud Data Flow Metrics和SpringCloud Data Flow Metrics Datadog Metrics当中的指标写入器 。数据流Metrics项目通过MetricWriters为Spring Boot指标的输出提供了基础。它提供了Spring Boots AutoConfiguration来设置写入过程和常用功能,如定义一个更适合当前环境的有特定名称前缀的指标名称。例如,指标名称除了包含应用程序的名称和它所属的流/任务名称外,你可能还希望名称当中包含应用程序正在运行的区域名称 。同时项目还包括了logmetricwriter功能类,可以将指标存储到日志文件中。日志文件通常被应用监控工具所利用(如Splunk),在那里日志可以被进一步处理,用于创建应用程序的性能仪表板。要利用此功能,您需要在您的流和任务应用程序中添加额外的依赖项。你可以使用Data Flow Initializr来可以定制自己任务流的应用程序,用它来先生成项目,然后添加你需要使用的MetricWriter实现类到生成的maven pom文件中。数据流Metrics项目页面上的文档提供了更多你所需的相关信息。

Spring-Cloud-Data-Flow-入门手册-2服务器配置一文由杰瑞文章网免费提供,本站为公益性作文网站,此作文为网上收集或网友提供,版权归原作者所有,如果侵犯了您的权益,请及时与我们联系,我们会立即删除!
杰瑞文章网友情提示:请不要直接抄作文用来交作业。你可以学习、借鉴、期待你写出更好的作文。
说说你对这篇作文的看法吧