SpringCloudDataFlow入门手册2服务器配置.docx
《SpringCloudDataFlow入门手册2服务器配置.docx》由会员分享,可在线阅读,更多相关《SpringCloudDataFlow入门手册2服务器配置.docx(29页珍藏版)》请在冰豆网上搜索。
SpringCloudDataFlow入门手册2服务器配置
重要说明:
本方是翻译自https:
//docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#getting-started这个文章,感谢SabbyAnandanMariusBogoeviciEricBottardMarkFisherIlayaperumalGopinathanGunnarHillertMarkPollackPatrickPeraltaGlennRenfroThomasRisbergDaveSyerDavidTuranskiJanneValkealahtiOlegZhurakousky这些原文作者的写作成果,让我们能更好地入门学习SpringCloudDataFlow的相关技术,考虑到国内中文的文档资料比较欠缺,而且基本不太成体系,所以自己希望来翻译该文章,方便学习使用。
以下是原文内容的翻译,一些关键性的技术术语,本文考虑不进行翻译,保持原来的英文词汇,加强技术术语印象,而且这些技术术语强行翻译成中文的话,感觉很别扭。
另一方面水平有限,文本可能有翻译不太贴切或是错误的地方,还请大家体谅,看到后多多指正。
********************************以下是原文内容的翻译**********************
Version1.3.0.M2
©2012-2017PivotalSoftware,Inc.
你可以自己使用这个文章或是分发给其它人,但前提是你不以赚取费用为目标,同时每个转发的文章必须包含此版权通知,无论是印刷品版本还是电子发行版本。
服务器配置
在本节中,您将学习如何配置SpringCloudDataFlow服务器的功能,如关系型数据库的使用和安全性配置。
您还将学习如何配置SpringCloudDataFlow的Shell命令行工具的功能。
12.功能启用/禁用
数据流服务器提供了一组特定功能,可以在启动时启用/禁用这些功能特性。
这些特性包括全生命周期的操作、REST接口风格的端点(服务器、基于shell或UI的客户端):
1.Streams
2.Tasks
3.分析
在启动数据流服务器时,可以通过设置以下布尔属性来启用、禁用这些特性:
∙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的执行状态。
SpringCloudDataFlow为H2,HSQLDB,MySQL,Oracle,DB2,SQLServer,PostgreSQL提供了相应的数据架构,在服务器启动时将会自动创建相应的数据库和表结构。
SpringCloudDataFlow本身提供了H2数据库的嵌入式实例,可以直接在开发环境当中使用,但不推荐用于生产环境。
MySQL(使用MariaDB的驱动),HSQLDB, PostgreSQL 的JDBC驱动程序, 和嵌入式 H2一样,也是开箱即用的,平台本身已经自带相应的驱动。
如果你正在使用其他的数据库,那么相应的JDBC驱动程序JAR包需要存放在服务器的对应classpath里。
数据库属性可以作为环境变量或命令行参数传递给数据流服务器。
∙环境变量:
exportspring_datasource_url=jdbc:
postgresql:
//localhost:
5432/mydb
exportspring_datasource_username=myuser
exportspring_datasource_password=mypass
exportspring_datasource_driver-class-name="org.postgresql.Driver"
如果你使用的是MySQL,命令行参数是:
java-jarspring-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-jarspring-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-jarspring-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的时候,需要升级新的数据架构到SpringCloudDataFlow,具体数据库类型的迁移脚本的可以在相应的位置找到。
如果你想使用一个外部的H2数据库实例而不是一个嵌入式的,设置SpringCloudDataFlow的spring.dataflow.embedded.database.enabled 属性为false。
如果spring.dataflow.embedded.database.enabled 属性为false或者指定了其他数据库类型作为数据源,那么h2嵌入式数据库是不会启用的。
13.1.添加自定义JDBC驱动
为数据库添加自定义驱动程序,如Oracle,建议您重新编译数据流服务器,在Maven的POM.XML文件中添加依赖。
每个目标平台都有SpringCloudDataFlow服务器的对应版本,您需要针对每个平台修改相应版本的 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.重新编译SpringCloudDataFlow,具体内容查看:
https:
//docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#building
在重新编译SpringCloudDataFlow的时候,可以通过设置dataflow-server.yml文件中的属性,给相应的版本设置属性的默认值。
如,像下边这样来设置postgres这个属性的默认值:
∙dataflow-server.yml
spring:
datasource:
url:
jdbc:
postgresql:
//localhost:
5432/mydb
username:
myuser
password:
mypass
driver-class-name:
org.postgresql.Driver
14.安全性
默认情况下,数据流服务器是不安全的,运行在一个未加密的HTTP连接上。
通过启用HTTPS并要求客户端使用以下两种身份验证,您可以确保REST端点以及数据流仪表板的安全性:
∙OAuth2.0认证
∙传统认证方式(如Basic认证)
认证选项
当选择 传统认证,SpringCloudDataFlow服务器将成为主要的认证点,使用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-aliasdataflow-keyalgRSA-keystoredataflow.keystore\
-validity3650-storetypeJKS\
-dname"CN=localhost,OU=Spring,O=Pivotal,L=Kailua-Kona,ST=HI,C=US"
-keypassdataflow-storepassdataflow
cn 是这里唯一重要的参数,它是使用的域名,如 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-aliasdataflow-keystoredataflow.keystore-filedataflow_cert-storepassdataflow
接下来,我们需要创建一个shell使用的密钥库:
$keytool-importcert-keystoredataflow.truststore-aliasdataflow-storepassdataflow-filedataflow_cert-noprompt
现在你可以使用以下的命令行来启动DataFlow的shell:
$java-D.ssl.trustStorePassword=dataflow\
-D.ssl.trustStore=/path/to/dataflow.truststore\
-D.ssl.trustStoreType=jks\
-jarspring-cloud-dataflow-shell-1.3.0.M2.jar
IncaseyourunintotroubleestablishingaconnectionviaSSL,youcanenableadditionalloggingbyusingandsettingthe .debug JVMargumentto ssl.
不要忘记设置目标服务器的正确URL:
dataflow:
>dataflowconfigserverhttps:
//localhost:
8443/
跳过证书验证
或者,你也可以通过提供可选的命令行参数 --dataflow.skip-ssl-validation=true来跳过验证。
使用此命令行参数后,shell将接受任何(自签名)SSL证书。
如果可能的话,你应该避免使用此选项。
禁用信任管理器会就失去了SSL的意义,并容易受到攻击。
14.2.传统认证
当使用 传统认证时, SpringCloudDataFlow将是唯一的身份验证提供程序。
在这种情况下,数据流的RESTAPI用户会使用 基本认证来访问端点。
使用该选项时,用户可以选择3种后备存储来完成认证:
•单用户认证 ,使用SpringBoot的属性
•基于YAML文件的多用户认证
•LDAP认证
14.2.1.单用户认证
这是最简单的选项,模拟了默认的SpringBoot用户体验行为。
它可以通过添加以下属性到应用程序的application.yml 文件或环境变量来启用:
security:
basic:
enabled:
true
realm:
SpringCloudDataFlow
启用基本身份验证。
必须将安全属性设置为true。
(可选)基本身份验证领域将默认 为Spring ,如果没有设置的话。
在当前案例中,SpringBoot启动时会自动创建一个用户叫 “user ”并自动生成密码,这些信息会被打印到控制台上。
采用这个配置所产生的用户,将分配所有主要的角色权限:
∙VIEW
∙CREATE
∙MANAGE
默认的SpringBoot用户凭证
你可以使用以下属性来自定义用户的相关信息:
security.user.name=user#Defaultusername.
security.user.password=#Passwordforthedefaultusername.Arandompasswordisloggedonstartupbydefault.
security.user.role=VIEW,CREATE,MANAGE#Grantedrolesforthedefaultusername.
请注意基本身份验证本身固有的问题,由于凭据被浏览器缓存,浏览网页进行回退到应用程序的页面,你会自动登录进入系统。
当然,您也可以使用系统属性、环境变量或命令行参数传递认证信息,这些都是SpringBoot支持的标准方法。
例如,在下面的示例中,使用命令行参数来指定用户凭据:
$java-jarspring-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.基于文件的认证
默认情况下,SpringBoot只允许设置一个用户。
SpringCloudDataFlow还支持在配置文件中设置多个用户。
如下所述,每个用户必须指定一个密码,一个或多个角色:
security:
basic:
enabled:
true
realm:
SpringCloudDataFlow
spring:
cloud:
dataflow:
security:
authentication:
file:
enabled:
true
users:
bob:
bobspassword,ROLE_MANAGE
alice:
alicepwd,ROLE_VIEW,ROLE_CREATE
14.2.3.LDAP认证
SpringCloudDataFlow还支持使用LDAP服务器(轻量级目录访问协议)的身份验证,支持以下2种模式:
•直接绑定
•搜索和绑定
当LDAP身份验证选项被激活时,默认的单用户认证模式将被关闭。
在采用直接绑定模式时,认证模式是使用用户定义的可分辨名称(DN),它是使用占位符的用户名。
身份验证过程通过替换占位符派生出用户的专有名称,并使用它在LDAP服务器上进行用户身份验证,同时提供所需要的密码。
您可以设置LDAP直接绑定如下:
security:
basic:
enabled:
true
realm:
SpringCloudDataFlow
spring:
cloud:
dataflow:
security:
authentication:
ldap:
enabled:
true
url:
ldap:
//:
3309
userDnPattern:
uid={0},ou=people,dc=example,dc=com
采用搜索绑定 模式时,先以匿名方式或一个固定的账户连接到LDAP服务器,然后基于用户名的标识来寻找认证用户,然后使用查找到的用户名和相应的密码绑定到LDAP服务器。
此选项配置如下:
security:
basic:
enabled:
true
realm:
SpringCloudDataFlow
spring:
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服务器的安全连接:
∙LDAPoverSSL(LDAPs)
∙StartTransportLayerSecurity(StartTLS)
SpringCloudDataFlow1.1.0 只默认直接支持LDAPs,其它的需要单独配置。
使用官方证书时,不需要特殊的配置,为了通过LDAPS连接到LDAP服务器,只需改变URL的格式,采用 LDAPS格式即可,例如ldaps:
//localhost:
636。
在使用自签名证书的情况下,SpringCloudDataFlow服务器的设置变得稍微复杂一些。
相应的配置与SpringCloudDataFlow服务器使用自签名证书配置非常相似,也就是SpringCloudDataFlow需要基于一个 trustStore 才能正常运行。
这样的配置适合在开发和测试期间使用,但请不要在生产中使用自签名证书,不然信任问题不少。
最后,还必须提供一套关于trustStore的配置参数与凭据来启动服务器:
$java-D.s