附录
遇到 Spring Cloud Data Flow 问题,我们愿意提供帮助!
-
提出问题。我们监控 stackoverflow.com 的问题 标记为
spring-cloud-dataflow
。 -
在 github.com/spring-cloud/spring-cloud-dataflow/issues 报告 Spring Cloud Data Flow 的 bug。
附录 A:数据流模板
如 API 指南一章中所述,Spring Cloud Data Flow 的功能完全通过 REST 端点公开。 虽然您可以直接使用这些终端节点,但 Spring Cloud Data Flow 还提供了一个基于 Java 的 API,这使得使用这些 REST 终端节点变得更加容易。
中心入口点是包中的类。DataFlowTemplate
org.springframework.cloud.dataflow.rest.client
此类实现接口并委托给以下子模板,这些子模板为每个功能集提供特定功能:DataFlowOperations
接口 | 描述 |
---|---|
|
用于流操作的 REST 客户端 |
|
用于计数器操作的 REST 客户端 |
|
用于字段值计数器操作的 REST 客户端 |
|
用于聚合计数器操作的 REST 客户端 |
|
用于任务操作的 REST 客户端 |
|
用于作业操作的 REST 客户端 |
|
用于应用程序注册表操作的 REST 客户端 |
|
用于完成操作的 REST 客户端 |
|
用于运行时操作的 REST 客户端 |
初始化时,可以通过 REST 关系发现子模板,这些关系由 HATEOAS(超媒体作为应用程序状态的引擎)提供。DataFlowTemplate
如果无法解析资源,则会产生相应的子模板 在 NULL 中。一个常见的原因是 Spring Cloud Data Flow 允许特定的 启动时要启用或禁用的功能集。有关更多信息,请参阅本地、Cloud Foundry 或 Kubernetes 配置章节之一,具体取决于您部署应用程序的位置。 |
A.1. 使用数据流模板
当您使用数据流模板时,唯一需要的数据流依赖项是 Spring Cloud Data Flow Rest 客户端,如以下 Maven 代码片段所示:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dataflow-rest-client</artifactId>
<version>2.11.5</version>
</dependency>
通过该依赖项,您可以获得类以及调用 Spring Cloud Data Flow 服务器所需的所有依赖项。DataFlowTemplate
实例化 时,您还会传入一个 .
请注意,所需的需要一些额外的配置才能在 .
当将 a 声明为 bean 时,以下配置就足够了:DataFlowTemplate
RestTemplate
RestTemplate
DataFlowTemplate
RestTemplate
@Bean
public static RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new VndErrorResponseErrorHandler(restTemplate.getMessageConverters()));
for(HttpMessageConverter<?> converter : restTemplate.getMessageConverters()) {
if (converter instanceof MappingJackson2HttpMessageConverter) {
final MappingJackson2HttpMessageConverter jacksonConverter =
(MappingJackson2HttpMessageConverter) converter;
jacksonConverter.getObjectMapper()
.registerModule(new Jackson2HalModule())
.addMixIn(JobExecution.class, JobExecutionJacksonMixIn.class)
.addMixIn(JobParameters.class, JobParametersJacksonMixIn.class)
.addMixIn(JobParameter.class, JobParameterJacksonMixIn.class)
.addMixIn(JobInstance.class, JobInstanceJacksonMixIn.class)
.addMixIn(ExitStatus.class, ExitStatusJacksonMixIn.class)
.addMixIn(StepExecution.class, StepExecutionJacksonMixIn.class)
.addMixIn(ExecutionContext.class, ExecutionContextJacksonMixIn.class)
.addMixIn(StepExecutionHistory.class, StepExecutionHistoryJacksonMixIn.class);
}
}
return restTemplate;
}
您还可以使用RestTemplate DataFlowTemplate.getDefaultDataflowRestTemplate();
|
现在,您可以使用以下代码实例化 :DataFlowTemplate
DataFlowTemplate dataFlowTemplate = new DataFlowTemplate(
new URI("http://localhost:9393/"), restTemplate); (1)
1 | 指向 Spring Cloud Data Flow Server 的 ROOT。URI |
根据您的要求,您现在可以调用服务器。例如 如果要获取当前可用应用程序的列表,可以运行以下代码:
PagedResources<AppRegistrationResource> apps = dataFlowTemplate.appRegistryOperations().list();
System.out.println(String.format("Retrieved %s application(s)",
apps.getContent().size()));
for (AppRegistrationResource app : apps.getContent()) {
System.out.println(String.format("App Name: %s, App Type: %s, App URI: %s",
app.getName(),
app.getType(),
app.getUri()));
}
A.2. 数据流模板和安全性
使用 时,您还可以提供所有与安全性相关的
选项,就像您使用的是数据流 Shell 一样。事实上,数据流 Shell 使用 for 其所有操作。DataFlowTemplate
DataFlowTemplate
为了让您开始使用,我们提供了一个使用 builder
pattern 设置各种与安全性相关的选项:HttpClientConfigurer
HttpClientConfigurer
.create(targetUri) (1)
.basicAuthCredentials(username, password) (2)
.skipTlsCertificateVerification() (3)
.withProxyCredentials(proxyUri, proxyUsername, proxyPassword) (4)
.addInterceptor(interceptor) (5)
.buildClientHttpRequestFactory() (6)
1 | 使用提供的目标 URI 创建 HttpClientConfigurer。 |
2 | 设置基本身份验证的凭据(使用 OAuth2 密码授予) |
3 | 跳过 SSL 证书验证(仅用于开发!) |
4 | 配置任何代理设置 |
5 | 添加自定义拦截器,例如设置 OAuth2 Authorization 标头。这允许 u 传递 OAuth2 访问令牌,而不是用户名/密码凭证。 |
6 | 构建可在 上设置的 。ClientHttpRequestFactory RestTemplate |
配置完成后,您可以使用它来构建 ,然后设置相应的
属性。然后,你可以使用该 .HttpClientConfigurer
buildClientHttpRequestFactory
ClientHttpRequestFactory
RestTemplate
DataFlowTemplate
RestTemplate
要配置基本身份验证,需要进行以下设置:
RestTemplate restTemplate = DataFlowTemplate.getDefaultDataflowRestTemplate();
HttpClientConfigurer httpClientConfigurer = HttpClientConfigurer.create("http://localhost:9393");
httpClientConfigurer.basicAuthCredentials("my_username", "my_password");
restTemplate.setRequestFactory(httpClientConfigurer.buildClientHttpRequestFactory());
DataFlowTemplate dataFlowTemplate = new DataFlowTemplate("http://localhost:9393", restTemplate);
附录 B:“操作方法”指南
本节提供了一些常见的“我该怎么做......“的问题。
如果您有我们在此处未涵盖的特定问题,您可能需要查看 stackoverflow.com 以查看是否有人已经提供了答案。
这也是提出新问题的好地方(使用标签)。spring-cloud-dataflow
我们也非常乐意扩展此部分。如果您想添加 “how-to”,可以向我们发送拉取请求。
B.1. 配置 Maven 属性
如果使用 Maven 存储库解析应用程序,则可能需要配置底层解析程序。
在启动数据流服务器时,可以通过命令行属性设置 Maven 属性,例如本地 Maven 存储库位置、远程 Maven 存储库、身份验证凭据和代理服务器属性。
或者,可以通过设置数据流服务器的 environment 属性来设置属性。SPRING_APPLICATION_JSON
对于所有数据流服务器安装,默认情况下会配置以下远程 Maven 存储库列表:
-
Maven Central (
repo.maven.apache.org/maven2
) -
Spring 快照 (
repo.spring.io/snapshot
) -
春季里程碑 (
repo.spring.io/milestone
)
如果已明确配置默认值(与 repo url 完全匹配),则不会包含它。
如果应用程序存在于另一个远程存储库中,则除了预配置的应用程序之外,还必须显式配置该远程存储库,并将其添加到预配置的默认列表中。
要完全跳过自动默认存储库行为,请将该属性设置为 。maven.include-default-remote-repos false |
要将属性作为命令行选项传递,请使用类似于以下内容的命令运行服务器:
java -jar <dataflow-server>.jar --maven.localRepoitory=mylocal \
--maven.remote-repositories.repo1.url=https://repo1 \
--maven.remote-repositories.repo1.auth.username=repo1user \
--maven.remote-repositories.repo1.auth.password=repo1pass \
--maven.remote-repositories.repo2.url=https://repo2 \
--maven.proxy.host=proxyhost \
--maven.proxy.port=9018 \
--maven.proxy.auth.username=proxyuser \
--maven.proxy.auth.password=proxypass
您还可以使用 environment 属性:SPRING_APPLICATION_JSON
export SPRING_APPLICATION_JSON='{ "maven": { "local-repository": "local","remote-repositories": { "repo1": { "url": "https://repo1", "auth": { "username": "repo1user", "password": "repo1pass" } },
"repo2": { "url": "https://repo2" } }, "proxy": { "host": "proxyhost", "port": 9018, "auth": { "username": "proxyuser", "password": "proxypass" } } } }'
以下是格式良好的 JSON 中的相同内容:
SPRING_APPLICATION_JSON='{
"maven": {
"local-repository": "local",
"remote-repositories": {
"repo1": {
"url": "https://repo1",
"auth": {
"username": "repo1user",
"password": "repo1pass"
}
},
"repo2": {
"url": "https://repo2"
}
},
"proxy": {
"host": "proxyhost",
"port": 9018,
"auth": {
"username": "proxyuser",
"password": "proxypass"
}
}
}
}'
您还可以将属性设置为单独的环境变量:
export MAVEN_REMOTEREPOSITORIES_REPO1_URL=https://repo1
export MAVEN_REMOTEREPOSITORIES_REPO1_AUTH_USERNAME=repo1user
export MAVEN_REMOTEREPOSITORIES_REPO1_AUTH_PASSWORD=repo1pass
export MAVEN_REMOTEREPOSITORIES_REPO2_URL=https://repo2
export MAVEN_PROXY_HOST=proxyhost
export MAVEN_PROXY_PORT=9018
export MAVEN_PROXY_AUTH_USERNAME=proxyuser
export MAVEN_PROXY_AUTH_PASSWORD=proxypass
B.2. 故障排除
本节介绍如何在您选择的平台上对 Spring Cloud Data Flow 进行故障排除。请参阅微型网站的 Stream 和 Batch processing 的疑难解答部分。
B.3. 扩展应用程序 Classpath
用户可能需要将依赖项添加到现有 Stream 应用程序或特定数据库驱动程序到 Dataflow 和 Skipper 或项目的任何其他容器提供程序。
Spring Cloud Dataflow 存储库包含可帮助完成此任务的脚本。以下示例假定您已克隆存储库并正在执行 中的脚本。spring-cloud-dataflow src/add-deps |
B.3.1. JAR 文件
我们建议您将更新的 jar 发布到私有 Maven 存储库,然后使用私有注册表的 Maven 坐标向 SCDF 注册应用程序。
例
此示例:
* 假设 jar 已下载到 * 添加依赖项,然后将 jar 发布到 Maven 本地。${appFolder}/${appName}-${appVersion}.jar
./gradlew -i publishToMavenLocal \
-P appFolder="." \
-P appGroup="org.springframework.cloud" \
-P appName="spring-cloud-dataflow-server" \
-P appVersion="2.11.3" \
-P depFolder="./extra-libs"
使用任务发布到远程存储库。使用远程存储库详细信息更新 。或者,将 和 移动到 ~/.gradle/gradle.propertiespublishMavenPublicationToMavenRepository gradle.properties repoUser repoPassword |
B.3.2. 容器
为了创建容器,我们建议使用 paketo pack cli 从上一步中创建的 jar 创建容器。
REPO=springcloud/spring-cloud-dataflow-server
TAG=2.11.3
JAR=build/spring-cloud-dataflow-server-${TAG}.jar
JAVA_VERSION=8
pack build --builder gcr.io/paketo-buildpacks/builder:base \
--path "$JAR" \
--trust-builder --verbose \
--env BP_JVM_VERSION=${JAVA_VERSION} "$REPO:$TAG-jdk${JAVA_VERSION}-extra"
将容器发布到私有容器注册表,并向 SCDF 注册应用程序 docker uri。 |
B.4. 为尚不支持的架构创建容器。
对于 M1 上的 macOS,amd64/x86_64 的性能是不可接受的。
我们提供了一组脚本,可用于下载已发布构件的特定版本。
我们还提供了一个脚本,该脚本将使用下载的构件为主机平台创建容器。
在各种项目中,您将找到 then in 或 folders.src/local
local
项目 | 脚本 | 笔记 |
---|---|---|
数据流 |
|
下载或创建容器: |
船长 |
|
下载或创建容器: |
Stream 应用程序 |
|
|
B.4.1. 脚本spring-cloud-dataflow
src/local/download-apps.sh
从 Maven 存储库下载所需的所有应用程序。create-containers.sh
如果快照的时间戳匹配,将跳过下载。
用法:download-apps.sh [version]
-
version
是数据流服务器版本,如 。默认值为2.11.3
2.11.3-SNAPSHOT
src/local/create-containers.sh
创建所有容器并推送到本地 docker 注册表。
此脚本需要 jib-cli
用法:create-containers.sh [version] [jre-version]
-
version
是数据流服务器版本,如 。默认值为2.11.3
2.11.3-SNAPSHOT
-
jre-version
应该是 11、17 之一。默认值为 11
B.4.2. 脚本spring-cloud-skipper
local/download-app.sh
从 Maven 存储库下载所需的所有应用程序。create-containers.sh
如果快照的时间戳匹配,将跳过下载。
用法:download-app.sh [version]
-
version
是 skipper 版本喜欢还是默认是2.11.3
2.11.3-SNAPSHOT
local/create-container.sh
创建所有容器并推送到本地 docker 注册表。 此脚本需要 jib-cli
用法:create-containers.sh [version] [jre-version]
-
version
是 skipper 版本喜欢还是默认是2.11.3
2.11.3-SNAPSHOT
-
jre-version
应为 11、17 之一
B.4.3. 脚本stream-applications
local/download-apps.sh
从 Maven 存储库下载所需的所有应用程序。create-containers.sh
如果快照的时间戳匹配,将跳过下载。
用法:download-apps.sh [version] [broker] [filter]
-
version
是 Stream Applications 版本,或者默认是3.2.1
3.2.2-SNAPSHOT
-
broker
是 RabbitMQ、Rabbit 或 Kafka 之一 -
filter
是应用程序的名称或将匹配的部分名称。
local/create-containers.sh
创建所有容器并推送到本地 docker 注册表。
此脚本需要 jib-cli
用法:create-containers.sh [version] [broker] [jre-version] [filter]
-
version
是 stream-applications 版本,或者默认是3.2.1
3.2.2-SNAPSHOT
-
broker
是 RabbitMQ、Rabbit 或 Kafka 之一 -
jre-version
应为 11、17 之一 -
filter
是应用程序的名称或将匹配的部分名称。
如果创建容器所需的文件不存在,则脚本将跳过该文件。
local/pack-containers.sh
创建所有容器并推送到本地 docker 注册表。
此脚本需要 packeto pack
用法:pack-containers.sh [version] [broker] [jre-version] [filter]
-
version
是 stream-applications 版本,或者默认是3.2.1
3.2.2-SNAPSHOT
-
broker
是 RabbitMQ、Rabbit 或 Kafka 之一 -
jre-version
应为 11、17 之一 -
filter
是应用程序的名称或将匹配的部分名称。
如果不存在创建容器所需的文件,则脚本将跳过该文件。
如果提供了任何参数,则其左侧的所有用户都应被视为必需参数。 |
B.5. 配置 Kubernetes 以进行本地开发或测试
B.5.1. 先决条件
您需要安装 kubectl,然后为本地集群安装 kind 或 minikube。
所有示例都假定您已克隆存储库并执行 中的脚本。spring-cloud-dataflow
deploy/k8s
在 macOS 上,您可能需要从 Macports 或realpath
brew install realpath
这些脚本需要类似于 or 的 shell,并且应该可以在 Linux、WSL 2 或 macOS 上运行。bash zsh |
B.5.2. 步骤
-
选择 Kubernetes provider (Kubernetes 提供商)。Kind、Minikube 或远程 GKE 或 TMC。
-
确定用于部署的命名空间,如果不是 。
default
-
配置 Kubernetes 和 loadbalancer。
-
选择 Broker with (代理方式)
export BROKER=kafka|rabbitmq
-
为 Skipper 和 Data Flow Server 构建或拉取容器映像。
-
部署并启动 Spring Cloud Data Flow。
-
将 Data Flow Server 地址导出到 env。
Kubernetes 提供商
我如何在 minikube 和 kind 之间进行选择?kind 通常会提供比 Minikube 更快的设置和拆卸时间。除了在部署 minikube 时能够配置 CPU 和内存的限制外,两者之间的性能几乎没有什么可选择的。因此,如果你有内存限制或需要强制执行内存限制,Minikube 将是一个更好的选择。
kubectl
您需要安装 kubectl 才能配置 Kubernetes 集群
类
Kind 是 Docker 中的 Kubernetes,非常适合本地开发。
LoadBalancer 将由脚本安装,需要更新 yaml 文件以提供 LoadBalancer 可用的地址范围。configure-k8s.sh
B.5.3. 构建和加载容器。
对于本地开发,您需要控制本地环境中使用的容器。
为了确保管理特定版本的数据流和skipper容器,您可以设置SKIPPER_VERSION和DATAFLOW_VERSION环境变量,然后调用和/或者,如果要使用本地构建的应用程序,则可以调用和./images/pull-dataflow.sh
./images/pull-skipper.sh
./images/build-skipper-image.sh
./images/build-dataflow.sh
B.5.4. 配置 k8s 环境
您可以调用以下脚本之一来选择要目标的安装类型:
./k8s/use-kind.sh [<namespace>] [<database>] [<broker>]
./k8s/use-mk-docker.sh [<namespace>] [<database>] [<broker>]
./k8s/use-mk-kvm2.sh [<namespace>] [<database>] [<broker>]
./k8s/use-mk.sh <driver> [<namespace>] [<database>] [<broker>] (1)
./k8s/use-tmc.sh <cluster-name> [<namespace>] [<database>] [<broker>]
./k8s/use-gke.sh <cluster-name> [<namespace>] [<database>] [<broker>]
1 | <driver> 必须是 、 或 之一。 是本地开发的推荐选项。kvm2 docker vmware virtualbox vmwarefusion hyperkit docker |
<namespace> 如果未提供,将会是。默认值为 ,默认值为 。default <database> postgresql <broker> kafka |
由于这些脚本导出环境变量,因此需要执行,如以下示例所示:
source ./k8s/use-mk-docker.sh postgresql rabbitmq --namespace test-ns
Create Local Cluster(创建本地集群)。
以下脚本将创建本地集群。
# Optionally add to control cpu and memory allocation.
export MK_ARGS="--cpus=8 --memory=12g"
./k8s/configure-k8s.sh
-
对于 kind,请按照说明进行更新,然后使用
./k8s/yaml/metallb-configmap.yaml
kubectl apply -f ./k8s/yaml/metallb-configmap.yaml
-
对于 minikube,启动一个新的 shell 并执行
minikube tunnel
部署 Spring Cloud Data Flow。
这些脚本将配置 BROKER 和 DATABASE 的值。use-*
配置数据库
export DATABASE=<database> (1)
1 | <database> 或mariadb postgresql |
需要配置 Docker 凭证,以便 Kubernetes 拉取各种容器镜像。
对于 Docker Hub,您可以创建个人免费帐户并使用 personal access token 作为密码。
使用 Docker 登录测试./k8s/docker-login.sh
export DOCKER_SERVER=https://docker.io
export DOCKER_USER=<docker-userid>
export DOCKER_PASSWORD=<docker-password>
export DOCKER_EMAIL=<email-of-docker-use>
设置 Spring Cloud Data Flow 和 Skipper 的版本。
此示例显示了当前开发快照的版本。
export DATAFLOW_VERSION=2.11.5-SNAPSHOT
export SKIPPER_VERSION=2.11.5-SNAPSHOT
在安装 SCDF 之前,您需要提取以下映像,以确保它们存在,以便上传到 k8s 集群。
您可以配置 before 和 :pull-app-images
install-scdf
-
STREAM_APPS_RT_VERSION
Stream Apps 发布 Train 版本。默认值为 2022.0.0。 -
STREAM_APPS_VERSION
流应用程序版本。默认值为 4.0.0。
用:
./images/pull-app-images.sh
./images/pull-dataflow.sh
./images/pull-skipper.sh
./images/pull-composed-task-runner.sh
./k8s/install-scdf.sh
source ./k8s/export-dataflow-ip.sh
现在,您可以从中执行脚本来部署一些简单的流和任务。您还可以运行以运行 Spring Cloud Data Flow Shell。./shell ./shell/shell.sh |
如果要重新开始,请使用以下命令删除 SCDF 部署,然后运行以再次安装它。./k8s/install-scdf.sh
B.5.5. 实用程序
以下实用程序列表可能很有用。
名字 | 描述 |
---|---|
k9s 是一个基于文本的监视器,用于探索 Kubernetes 集群。 |
|
根据各种命名标准对各种 Pod 的日志进行 Extra 和 tail 处理。 |
B.5.6. 脚本
一些脚本也适用于本地容器,可以在 中找到 ,Kubernetes 特定的脚本位于src/local
deploy/k8s
脚本 | 描述 |
---|---|
|
构建 Restaurant Sample Stream Apps 的所有镜像 |
|
从 Docker Hub 中提取 Restaurant Sample Stream Apps 的所有映像 |
|
基于 从 DockerHub 拉取数据流。 |
|
基于 从 Tanzu Network 中提取 Dataflow Pro。 |
|
根据 . |
|
从 Dataflow 的本地存储库构建 Docker 镜像 |
|
从 Dataflow Pro 的本地存储库构建 docker 镜像。在环境中设置为使用 Dataflow Pro |
|
从 Skipper 的本地存储库构建 docker 镜像。 |
|
根据您的 Kubernetes 配置配置 Kubernetes 环境K8S_DRIVER。 |
|
删除部署创建的所有 Kubernetes 资源。 |
|
删除 cluster、kind 或 minikube。 |
|
将数据流服务器的 URL 导出到 |
|
按名称将特定流的 http 源的 url 导出到 |
|
为 Spring Cloud Dataflow 配置和部署所有容器 |
|
将测试所需的所有容器镜像加载到 kind 或 minikube 中,以确保您可以控制使用的内容。 |
|
将特定容器镜像加载到 local kind 或 minikube 中。 |
|
对 is 指向的集群执行验收测试。 |
|
注册单元测试使用的 Task 和 Stream 应用程序。 |
请报告脚本中的任何错误以及有关相关环境的详细信息。 |
B.6. 常见问题
在本节中,我们将回顾 Spring Cloud Data Flow 的常见问题。 有关更多信息,请参阅微型网站的“常见问题”部分。
附录 C:身份提供商
本附录包含如何设置特定提供商以正常工作的信息 具有 Data Flow 安全性。
在撰写本文时,Azure 是唯一的标识提供者。
C.1. Azure
Azure AD (Active Directory) 是一个功能齐全的身份提供商,可提供广泛的功能 围绕身份验证和授权。与任何其他提供商一样,它有其 自己的细微差别,这意味着必须小心设置它。
在本节中,我们将介绍如何为 AD 和 Spring Cloud 数据流。
您需要完整的组织访问权限才能正确设置所有内容。 |
C.1.1. 创建新的 AD 环境
要开始使用,请创建一个新的 Active Directory 环境。选择一个 键入 Azure Active Directory(不是 b2c 类型),然后选择您的组织名称 初始域。下图显示了设置:
C.1.2. 创建新的应用程序注册
应用程序注册是创建 OAuth 客户端以供 OAuth 使用的地方 应用。您至少需要创建两个客户端,一个用于 数据流和 Skipper 服务器以及一个用于数据流 shell 的服务器,因为这两个服务器具有 配置略有不同。服务器应用程序可以被认为是 受信任的应用程序,而 shell 不受信任(因为用户可以查看其完整的 配置)。
注意: 我们建议对 Data Flow 和 Skipper 服务器使用相同的 OAuth 客户端。而 您可以使用不同的客户端,它目前不会提供任何值,因为 配置需要相同。
下图显示了用于创建新应用程序注册的设置:
如果需要,将在 IN AD 下创建客户端密钥。Certificates & secrets |
C.1.3. 公开 Dataflow API
要准备 OAuth 范围,请为每个 Data Flow 安全角色创建一个。在此示例中,这些将是
-
api://dataflow-server/dataflow.create
-
api://dataflow-server/dataflow.deploy
-
api://dataflow-server/dataflow.destroy
-
api://dataflow-server/dataflow.manage
-
api://dataflow-server/dataflow.schedule
-
api://dataflow-server/dataflow.modify
-
api://dataflow-server/dataflow.view
下图显示了要公开的 API:
以前创建的范围需要添加为 API 权限,如下图所示:
C.1.4. 创建特权客户端
对于即将使用密码授予的 OAuth 客户端,需要相同的 API 权限 为 OAuth 客户端创建,就像用于服务器一样(如上一节所述)。
所有这些权限都需要授予管理员权限。 |
下图显示了特权设置:
特权客户端需要一个客户端密钥,该密钥需要向客户端公开 配置。如果您不想公开该密钥,请使用 Creating a Public Client 公共客户端。 |
C.1.6. 配置示例
本节包含 Data Flow 和 Skipper 服务器以及 shell 的配置示例。
若要启动数据流服务器,请执行以下操作:
$ java -jar spring-cloud-dataflow-server.jar \
--spring.config.additional-location=dataflow-azure.yml
spring:
cloud:
dataflow:
security:
authorization:
provider-role-mappings:
dataflow-server:
map-oauth-scopes: true
role-mappings:
ROLE_VIEW: dataflow.view
ROLE_CREATE: dataflow.create
ROLE_MANAGE: dataflow.manage
ROLE_DEPLOY: dataflow.deploy
ROLE_DESTROY: dataflow.destroy
ROLE_MODIFY: dataflow.modify
ROLE_SCHEDULE: dataflow.schedule
security:
oauth2:
client:
registration:
dataflow-server:
provider: azure
redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
client-id: <client id>
client-secret: <client secret>
scope:
- openid
- profile
- email
- offline_access
- api://dataflow-server/dataflow.view
- api://dataflow-server/dataflow.deploy
- api://dataflow-server/dataflow.destroy
- api://dataflow-server/dataflow.manage
- api://dataflow-server/dataflow.modify
- api://dataflow-server/dataflow.schedule
- api://dataflow-server/dataflow.create
provider:
azure:
issuer-uri: https://login.microsoftonline.com/799dcfde-b9e3-4dfc-ac25-659b326e0bcd/v2.0
user-name-attribute: name
resourceserver:
jwt:
jwk-set-uri: https://login.microsoftonline.com/799dcfde-b9e3-4dfc-ac25-659b326e0bcd/discovery/v2.0/keys
要启动 Skipper 服务器:
$ java -jar spring-cloud-skipper-server.jar \
--spring.config.additional-location=skipper-azure.yml
spring:
cloud:
skipper:
security:
authorization:
provider-role-mappings:
skipper-server:
map-oauth-scopes: true
role-mappings:
ROLE_VIEW: dataflow.view
ROLE_CREATE: dataflow.create
ROLE_MANAGE: dataflow.manage
ROLE_DEPLOY: dataflow.deploy
ROLE_DESTROY: dataflow.destroy
ROLE_MODIFY: dataflow.modify
ROLE_SCHEDULE: dataflow.schedule
security:
oauth2:
client:
registration:
skipper-server:
provider: azure
redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
client-id: <client id>
client-secret: <client secret>
scope:
- openid
- profile
- email
- offline_access
- api://dataflow-server/dataflow.view
- api://dataflow-server/dataflow.deploy
- api://dataflow-server/dataflow.destroy
- api://dataflow-server/dataflow.manage
- api://dataflow-server/dataflow.modify
- api://dataflow-server/dataflow.schedule
- api://dataflow-server/dataflow.create
provider:
azure:
issuer-uri: https://login.microsoftonline.com/799dcfde-b9e3-4dfc-ac25-659b326e0bcd/v2.0
user-name-attribute: name
resourceserver:
jwt:
jwk-set-uri: https://login.microsoftonline.com/799dcfde-b9e3-4dfc-ac25-659b326e0bcd/discovery/v2.0/keys
要启动 shell 并(可选)将凭证作为选项传递,请执行以下操作:
$ java -jar spring-cloud-dataflow-shell.jar \
--spring.config.additional-location=dataflow-azure-shell.yml \
--dataflow.username=<USERNAME> \
--dataflow.password=<PASSWORD>
security:
oauth2:
client:
registration:
dataflow-shell:
provider: azure
client-id: <client id>
client-secret: <client secret>
authorization-grant-type: password
scope:
- offline_access
- api://dataflow-server/dataflow.create
- api://dataflow-server/dataflow.deploy
- api://dataflow-server/dataflow.destroy
- api://dataflow-server/dataflow.manage
- api://dataflow-server/dataflow.modify
- api://dataflow-server/dataflow.schedule
- api://dataflow-server/dataflow.view
provider:
azure:
issuer-uri: https://login.microsoftonline.com/799dcfde-b9e3-4dfc-ac25-659b326e0bcd/v2.0
公共客户端需要 App Roles 的 value set 与内部权限相同,以确保将其添加到访问令牌中。[dataflow.create, dataflow.deploy, dataflow.destroy, dataflow.manage, dataflow.modify, dataflow.schedule, dataflow.view] |
启动公共 shell 并(可选)将凭证作为选项传递:
$ java -jar spring-cloud-dataflow-shell.jar \
--spring.config.additional-location=dataflow-azure-shell-public.yml \
--dataflow.username=<USERNAME> \
--dataflow.password=<PASSWORD>
spring:
security:
oauth2:
client:
registration:
dataflow-shell:
provider: azure
client-id: <client id>
authorization-grant-type: password
client-authentication-method: post
scope:
- offline_access
- api://dataflow-server/dataflow.create
- api://dataflow-server/dataflow.deploy
- api://dataflow-server/dataflow.destroy
- api://dataflow-server/dataflow.manage
- api://dataflow-server/dataflow.modify
- api://dataflow-server/dataflow.schedule
- api://dataflow-server/dataflow.view
provider:
azure:
issuer-uri: https://login.microsoftonline.com/799dcfde-b9e3-4dfc-ac25-659b326e0bcd/v2.0