安装

16. 在本地平台上安装

16.1. 本地平台配置

以下示例 YAML 文件配置了两个名为 和 的本地部署程序帐户:localDevlocalDevDebugspring-doc.cn

spring:
  cloud:
    skipper:
      server:
        platform:
          local:
            accounts:
              localDev:
                shutdownTimeout: 60
                javaOpts: "-Dtest=foo"
              localDevDebug:
                javaOpts: "-Xdebug"

帐户名称后面的键值对是 、 、 、 和 。 有关更多信息,请参阅 LocalDeployerProperties 的 JavaDocs。javaCmdworkingDirectoriesRootdeleteFilesOnExitenvVarsToInheritshutdownTimeoutjavaOptsuseSpringApplicationJsonspring-doc.cn

17. 在 Cloud Foundry 上安装

本节包含一个示例 YAML 文件,该文件配置两个名为 和 的 Cloud Foundry 帐户。 如果您使用 Spring Cloud Config Server 来管理 Skipper 的配置属性,这在 Cloud Foundry 上很有用。cf-devcf-qaspring-doc.cn

17.1. Cloud Foundry 配置

您可以修改以下示例 YML 代码段以满足您的需要:spring-doc.cn

spring:
  cloud:
    skipper:
      server:
        platform:
          cloudfoundry:
            accounts:
              cf-dev:
                connection:
                  url: https://api.run.pivotal.io
                  org: myOrg
                  space: mySpace
                  domain: cfapps.io
                  username: [email protected]
                  password: drowssap
                  skipSslValidation: false
                deployment:
                  memory: 2048m
                  disk: 2048m
                  services: rabbit
                  deleteRoutes: false
              cf-qa:
                connection:
                  url: https://api.run.pivotal.io
                  org: myOrgQA
                  space: mySpaceQA
                  domain: cfapps.io
                  username: [email protected]
                  password: drowssap
                  skipSslValidation: true
                deployment:
                  memory: 1024m
                  disk: 1024m
                  services: rabbitQA
                  deleteRoutes: false
部署设置是使应用程序的 “v2” 与 “v1” 具有相同的路由。 否则,取消部署 “v1” 将删除路由。deleteRoutesfalse

您还可以在本地运行 Skipper 服务器并部署到 Cloud Foundry。 在这种情况下,在文件中指定配置并使用 option 启动服务器会更方便。skipper.yml--spring.config.additional-location=skipper.ymlspring-doc.cn

如果您用于部署 Skipper,则更适合使用 Cloud Foundry 清单。 您可以修改以下示例manifest.yml以满足您的需要:cf pushspring-doc.cn

applications:
- name: mlp-skipper
  host: mlp-skipper
  memory: 1G
  disk_quota: 1G
  timeout: 180
  instances: 1
  buildpack: java_buildpack
  path: spring-cloud-skipper-server.jar
env:
    SPRING_APPLICATION_NAME: mlp-skipper
    JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{enabled: false}'
    SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_CONNECTION_URL: https://api.run.pivotal.io
    SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_CONNECTION_ORG: myOrgQA
    SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_CONNECTION_SPACE: mySpaceQA
    SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_CONNECTION_DOMAIN: cfapps.io
    SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_CONNECTION_USERNAME: [email protected]
    SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_CONNECTION_PASSWORD: drowssap
    SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_CONNECTION_SKIPSSLVALIDATION: false
    SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_DEPLOYMENT_DELETEROUTES: false
    SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_DEPLOYMENT_SERVICES: rabbitmq
services:
- mysqlboost
在前面的清单中,我们将应用程序绑定到服务。 如果未指定服务,则服务器将使用嵌入式数据库。mysqlboost
从 Skipper 2.0 开始,您必须禁用 Spring 自动重新配置并将配置文件设置为 。cloud
您必须设置应用程序的 “v2” 与 “v1” 具有相同的路由。 否则,取消部署 “v1” 将删除路由。SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_DEPLOYMENT_DELETEROUTES: false
您必须设置将指定服务绑定到每个已部署应用程序的属性。SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_DEPLOYMENT_SERVICES

您可以在 CloudFoundryDeploymentProperties 中找到有关可配置的部署属性的信息。spring-doc.cn

在本地计算机上启动 Skipper shell 时,它会尝试连接到默认位置 . 使用 shell 的命令行选项指定服务器的位置。 您也可以使用交互式 shell 命令来设置服务器位置,如下所示:localhost:7577/api--spring.cloud.skipper.client.serverUriconfigspring-doc.cn

server-unknown:>skipper config --uri https://mlp-skipper.cfapps.io/api
Successfully targeted https://mlp-skipper.cfapps.io/api
skipper:>

17.2. 数据库连接池

从 Skipper 2.0 开始,Spring Cloud 连接器库不再用于创建 DataSource。 现在使用库 java-cfenv,它允许您设置 Spring Boot 属性以配置连接池。spring-doc.cn

17.3. 最大磁盘配额

默认情况下,Cloud Foundry 中的每个应用程序都以 1G 磁盘配额开始,这可以调整为默认的最大值 2G 的。通过使用 Pivotal Cloud Foundry (PCF) Ops Manager GUI,默认最大值也可以覆盖高达 10G。spring-doc.cn

此配置与 Spring Cloud Skipper 相关,因为每个部署都由应用程序组成 (通常是 Spring Boot uber-jar 的),并且这些应用程序是从远程 maven 存储库解析的。解决后, 应用程序构件将下载到本地 Maven 存储库以进行缓存和重用。在后台发生此事后, 默认磁盘配额 (1G) 可能会迅速填满,尤其是当我们试验 由独特的应用程序组成。为了克服这个磁盘限制并依赖于 根据您的扩展要求,您可能希望将默认最大值从 2G 更改为 10G。让我们回顾一下 更改默认最大磁盘配额分配的步骤。spring-doc.cn

在 PCF 的 Ops Manager 中,选择“Pivotal Elastic Runtime”磁贴,然后导航到“Application Developer Controls”选项卡。 将“每个应用程序的最大磁盘配额 (MB)”设置从 2048 (2G) 更改为 10240 (10G)。保存磁盘配额更新,然后单击 “Apply Changes” 完成配置覆盖。spring-doc.cn

17.4. 管理磁盘使用

即使将 Skipper 配置为使用 10G 空间,也有可能耗尽本地磁盘上的可用空间。 为防止这种情况,无论部署请求是否成功,只要部署应用程序,都会自动删除从外部源(即注册为或资源的应用程序)下载的项目。 此行为最适合容器运行时稳定性比部署期间产生的 I/O 延迟更关键的生产环境。 在开发环境中,部署会更频繁地进行。此外,工件(或更轻的 jar)包含描述应用程序配置属性的元数据 它由与应用程序配置相关的各种操作使用,在预生产活动期间更频繁地执行。 为了在预生产环境中使用更多的磁盘,以牺牲更多的磁盘使用为代价,提供响应速度更快的交互式开发人员体验,您可以将 CloudFoundry deployer 属性设置为。jarhttpmavenjarmetadataautoDeleteMavenArtifactsfalsespring-doc.cn

如果使用默认运行状况检查类型部署 Skipper,则必须显式监控服务器上的磁盘空间,以避免空间不足。 如果使用运行状况检查类型部署服务器(请参阅下一个示例),则当磁盘空间不足时,服务器将重新启动。 这是由于 Spring Boot 的磁盘空间健康指示器。 您可以使用具有前缀的属性来配置 Disk Space Health Indicator 的设置。porthttpmanagement.health.diskspacespring-doc.cn

对于版本 1.7,我们正在研究在将工件推送到 Cloud Foundry 之前为服务器使用 Volume Services 来存储工件。.jarspring-doc.cn

以下示例显示如何将运行状况检查类型部署到名为 :http/management/healthspring-doc.cn

---
  ...
  health-check-type: http
  health-check-http-endpoint: /management/health

18. 在 Kubernetes 上安装

名为 的 docker 镜像可用于 dockerhub 中的 Skipper 服务器。 您可以使用此映像在 Kubernetes 中运行 Skipper 服务器。springcloud/spring-cloud-skipper-serverspring-doc.cn

18.1. Kubernetes 配置

以下示例 YAML 文件在 Kubernetes 集群上配置了两个名为 和 的账户。k8s-devk8sqaspring-doc.cn

spring:
  cloud:
    skipper:
      server:
        platform:
          kubernetes:
            accounts:
              k8s-dev:
                namespace: devNamespace
                cpu: 4
              k8s-qa:
                namespace: qaNamespace
                memory: 1024m

这些账户对应于不同的命名空间。 我们正在研究如何支持连接到不同的 Kubernetes 集群。spring-doc.cn

您可以在 KubernetesDeployerProperties 中找到有关可配置的部署属性的更多信息spring-doc.cn

19. 数据库配置

关系数据库用于存储流定义和部署信息。 Spring Cloud Skipper 提供适用于 MariaDBMySQL、OraclePostgreSQL、Db2SQL ServerH2 的架构。架构是在服务器启动时自动创建的。spring-doc.cn

无需额外配置即可使用适用于 MariaDBMySQL(通过 MariaDB 驱动程序)、PostgreSQL、SQL Server 的 JDBC 驱动程序。要使用任何其他数据库,您需要将相应的 JDBC 驱动程序 jar 放在服务器的 Classpath 上,如此所述。

要配置数据库,必须设置以下属性:spring-doc.cn

无论数据库如何,和 都是相同的。但是,每个数据库的 and 会有所不同,如下所示。usernamepasswordurldriver-class-namespring-doc.cn

数据库 spring.datasource.url spring.datasource.driver-class-name 包括驱动程序

MariaDB 10.4+spring-doc.cn

jdbc:mariadb://${db-hostname}:${db-port}/${db-name}spring-doc.cn

org.mariadb.jdbc.驱动程序spring-doc.cn

是的spring-doc.cn

MySQL 5.7 版本spring-doc.cn

jdbc:mysql://${db-hostname}:${db-port}/${db-name}?permitMysqlSchemespring-doc.cn

org.mariadb.jdbc.驱动程序spring-doc.cn

是的spring-doc.cn

MySQL 8.0+ 版本spring-doc.cn

jdbc:mariadb://${db-hostname}:${db-port}/${db-name}?allowPublicKeyRetrieval=true&useSSL=false&autoReconnect=true&permitMysqlScheme[1]spring-doc.cn

org.mariadb.jdbc.驱动程序spring-doc.cn

是的spring-doc.cn

PostgresSQLspring-doc.cn

jdbc:postgres://${db-hostname}:${db-port}/${db-name}spring-doc.cn

org.postgresql.驱动程序spring-doc.cn

是的spring-doc.cn

SQL 服务器spring-doc.cn

jdbc:sqlserver://${db-hostname}:${db-port};数据库名称=${数据库名称}&encrypt=falsespring-doc.cn

com.microsoft.sqlserver.jdbc.SQLServerDriverspring-doc.cn

是的spring-doc.cn

DB2spring-doc.cn

jdbc:db2://${db-hostname}:${db-port}/{db-name}spring-doc.cn

com.ibm.db2.jcc.DB2Driverspring-doc.cn

spring-doc.cn

神谕spring-doc.cn

jdbc:oracle:thin:@${db-hostname}:${db-port}/{db-name}spring-doc.cn

oracle.jdbc.Oracle驱动程序spring-doc.cn

spring-doc.cn

19.1. H2

如果未配置其他数据库并且 H2 驱动程序已添加到服务器 Classpath 中,则 Spring Cloud Skipper 使用 H2 数据库的嵌入式实例作为默认值。spring-doc.cn

H2 适用于开发目的,但不建议用于生产,也不支持作为外部模式。

要使用 H2,请将 JDBC 驱动程序添加到 Classpath 中,并且不要配置任何其他数据库。com.h2database:h2:2.1.214spring-doc.cn

19.2. 添加自定义 JDBC 驱动程序

要为数据库添加自定义驱动程序(例如 Oracle),您应该重新构建 Skipper Server 并将依赖项添加到 Maven 文件。 您需要修改 module 的 maven。 GitHub 存储库中有 GA 发布标签,因此您可以切换到所需的 GA 标签,以在生产就绪代码库中添加驱动程序。pom.xmlpom.xmlspring-cloud-skipperspring-doc.cn

要为 Spring Cloud Skipper 服务器添加自定义 JDBC 驱动程序依赖项,请执行以下操作:spring-doc.cn

  1. 选择与要重建的服务器版本相对应的标记,并克隆 github 存储库。spring-doc.cn

  2. 编辑spring-cloud-skipper-server/pom.xml并在该部分中添加所需数据库驱动程序的依赖项。在以下示例中,已选择 Oracle 驱动程序:dependenciesspring-doc.cn

<dependencies>
  ...
  <dependency>
    <groupId>com.oracle.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>12.2.0.1</version>
  </dependency>
  ...
</dependencies>
  1. 按照构建 Spring Cloud Skipper = 安全性中所述构建应用程序spring-doc.cn

默认情况下,Spring Cloud Skipper 服务器是不安全的,并在未加密的 HTTP 连接上运行。 您可以通过启用 HTTPS 并要求客户端使用 OAuth 2.0 进行身份验证来保护您的 REST 终端节点spring-doc.cn

默认情况下,REST 终端节点(管理、管理和运行状况)不需要经过身份验证的访问。spring-doc.cn

20. 启用 HTTPS

默认情况下,REST 终端节点使用纯 HTTP 作为传输。 您可以通过向配置添加证书来切换到 HTTPS,如以下示例所示:skipper.ymlspring-doc.cn

server:
  port: 8443                                         (1)
  ssl:
    key-alias: yourKeyAlias                          (2)
    key-store: path/to/keystore                      (3)
    key-store-password: yourKeyStorePassword         (4)
    key-password: yourKeyPassword                    (5)
    trust-store: path/to/trust-store                 (6)
    trust-store-password: yourTrustStorePassword     (7)
1 由于默认端口为 ,您可以选择将端口更改为更常见的 HTTPS 典型端口。7577
2 密钥存储在密钥库中的别名(或名称)。
3 密钥库文件的路径。也可以使用 Classpath 前缀指定 Classpath 资源:classpath:path/to/keystore
4 密钥库的密码。
5 密钥的密码。
6 信任库文件的路径。也可以使用 Classpath 前缀指定 Classpath 资源:classpath:path/to/trust-store
7 信任存储的密码。
您可以使用以下参数引用 YAML 文件:--spring.config.additional-location=skipper.yml
如果启用了 HTTPS,它将完全取代 HTTP 作为 REST 端点交互的协议。 然后,普通 HTTP 请求将失败。因此,您必须确保相应地配置 Skipper shell。

20.1. 使用自签名证书

出于测试目的或在开发过程中,创建自签名证书可能很方便。 要开始使用,请运行以下命令以创建证书:spring-doc.cn

$ keytool -genkey -alias skipper -keyalg RSA -keystore skipper.keystore \
          -validity 3650 -storetype JKS \
          -dname "CN=localhost, OU=Spring, O=Pivotal, L=Holualoa, ST=HI, C=US"  (1)
          -keypass skipper -storepass skipper
1 CN是这里唯一重要的参数。它应与您尝试访问的域匹配,例如 .localhost

然后将以下内容添加到您的文件中:skipper.ymlspring-doc.cn

server:
  port: 8443
  ssl:
    enabled: true
    key-alias: skipper
    key-store: "/your/path/to/skipper.keystore"
    key-store-type: jks
    key-store-password: skipper
    key-password: skipper

这就是 Skipper Server 所需的全部内容。 启动服务器后,您应该能够在 https://localhost:8443/ 访问它。 由于这是自签名证书,因此您应该在浏览器中点击警告。你需要忽略这一点。spring-doc.cn

20.2. 自签名证书和 Shell

默认情况下,自签名证书是 shell 的一个问题。 要使 shell 使用自签名证书,还需要执行其他步骤。 有两个选项可用:spring-doc.cn

20.2.1. 将自签名证书添加到 JVM Truststore 中

为了使用 JVM truststore 选项,我们需要 从密钥库中导出之前创建的证书:spring-doc.cn

$ keytool -export -alias skipper -keystore skipper.keystore -file skipper_cert -storepass skipper

接下来,我们需要创建一个 Shell 使用的信任库:spring-doc.cn

$ keytool -importcert -keystore skipper.truststore -alias skipper -storepass skipper -file skipper_cert -noprompt

现在,您可以使用以下 JVM 参数启动 Skipper shell:spring-doc.cn

$ java -Djavax.net.ssl.trustStorePassword=skipper \
       -Djavax.net.ssl.trustStore=/path/to/skipper.truststore \
       -Djavax.net.ssl.trustStoreType=jks \
       -jar spring-cloud-skipper-shell-2.11.5.jar
如果在通过 SSL 建立连接时遇到问题,可以通过将 JVM 参数设置为 来启用其他日志记录。javax.net.debugssl

请记住使用类似于以下内容的 config 命令来定位 Skipper 服务器:spring-doc.cn

skipper:>skipper config --uri https://localhost:8443/api

20.2.2. 跳过证书验证

或者,您可以通过提供以下可选命令行参数来绕过认证验证:。--spring.cloud.skipper.client.skip-ssl-validation=truespring-doc.cn

设置此命令行参数时,shell 接受任何(自签名)SSL 证书。spring-doc.cn

如果可能,您应该避免使用此选项。 禁用信任管理器会破坏 SSL 的用途,并使您的网站容易受到中间人攻击。

21. OAuth 2.0 安全性

OAuth 2.0 允许您将 Spring Cloud Skipper 集成到单点登录 (SSO) 环境中。 您可以使用以下 OAuth2 授权类型:spring-doc.cn

  • 密码:由 shell(和 REST 集成)使用,因此您可以使用用户名和密码登录spring-doc.cn

  • 客户端凭证:直接从您的 OAuth 提供商检索访问令牌,并将其传递给 HTTP 标头中的 Skipper 服务器。Authorizationspring-doc.cn

可以通过两种方式访问 REST 端点:spring-doc.cn

  • 基本身份验证:使用密码授权类型对 OAuth2 服务进行身份验证。spring-doc.cn

  • Access Token:使用 Client Credentials 授权类型spring-doc.cn

在设置身份验证时,我们强烈建议您同时启用 HTTPS,尤其是在生产环境中。

您可以通过设置环境变量或将以下块添加到来启用 OAuth2 身份验证:skipper.ymlspring-doc.cn

security:
  oauth2:
    client:
      client-id: myclient                                             (1)
      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
spring:
  security:
    oauth2:                                                           (1)
      client:
        registration:
          uaa:                                                        (2)
            client-id: myclient
            client-secret: mysecret
            redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
            authorization-grant-type: authorization_code
            scope:
            - openid                                                  (3)
        provider:
          uaa:
            jwk-set-uri: http://uaa.local:8080/uaa/token_keys
            token-uri: http://uaa.local:8080/uaa/oauth/token
            user-info-uri: http://uaa.local:8080/uaa/userinfo         (4)
            user-name-attribute: user_name                            (5)
            authorization-uri: http://uaa.local:8080/uaa/oauth/authorize
      resourceserver:
        opaquetoken:
          introspection-uri: http://uaa.local:8080/uaa/introspect (6)
          client-id: dataflow
          client-secret: dataflow
  cloud:
    skipper:
      security:
        authorization:
          provider-role-mappings:                                    (7)
            uaa:
              map-oauth-scopes: true
              role-mappings:
                ROLE_VIEW: skipper.view
                ROLE_CREATE: skipper.create
                ROLE_MANAGE: skipper.manage
1 提供此属性会激活 OAuth2 安全性
2 提供程序 ID。可以指定多个提供商
3 由于 UAA 是 OpenID 提供程序,因此您至少必须指定范围。 如果您的提供程序还提供了其他范围来控制角色分配,则 您还必须在此处指定这些范围openid
4 OpenID 终端节点。用于检索用户名等用户信息。命令的。
5 包含用户名的响应的 JSON 属性
6 用于内省和验证直接传入的令牌。命令的。
7 用于授权的角色映射。 您可以使用 验证基本身份验证是否正常工作,如下所示:curl
`curl -u myusername:mypassword http://localhost:7577/`

因此,您应该会看到可用 REST 终端节点的列表。spring-doc.cn

除了基本身份验证之外,您还可以提供访问令牌来访问 REST API。 为此,请从 OAuth2 提供商处检索 OAuth2 访问令牌,然后使用 HTTP 标头将该访问令牌传递给 REST API,如下所示:Authorizationspring-doc.cn

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://localhost:7577/

21.1. OAuth REST 端点授权

Spring Cloud Skipper 支持以下角色:spring-doc.cn

  • VIEW:用于与检索 state 相关的任何内容。spring-doc.cn

  • CREATE:用于涉及创建、删除或更改系统状态的任何内容。spring-doc.cn

  • MANAGE:用于启动管理终端节点。spring-doc.cn

有关哪些 REST 端点需要哪些角色的规则在模块中指定。application.ymlspring-cloud-skipper-server-corespring-doc.cn

尽管如此,如果需要,您可以覆盖这些 ID。 配置采用 YAML 列表的形式(因为某些规则可能优先于其他规则)。 因此,您需要复制/粘贴整个列表并根据您的需要进行定制(因为无法合并列表)。 请始终引用您的 版本,因为下面复制的代码段可能已过时。 默认规则如下:application.ymlspring-doc.cn

            # About

            - GET /api/about                     => hasRole('ROLE_VIEW')

            # AppDeployerDatas

            - GET /api/appDeployerDatas          => hasRole('ROLE_VIEW')

            # Deployers

            - GET /api/deployers                 => hasRole('ROLE_VIEW')

            ## Releases

            - GET /api/releases                  => hasRole('ROLE_VIEW')

            # Status

            - GET /api/release/status/**         => hasRole('ROLE_VIEW')

            # Manifest

            - GET /api/release/manifest/**       => hasRole('ROLE_VIEW')

            # Upgrade

            - POST /api/release/upgrade          => hasRole('ROLE_CREATE')

            # Rollback

            - POST /api/release/rollback/**      => hasRole('ROLE_CREATE')

            # Delete

            - DELETE /api/release/**             => hasRole('ROLE_CREATE')

            # History

            - GET /api/release/history/**        => hasRole('ROLE_VIEW')

            # List

            - GET /api/release/list              => hasRole('ROLE_VIEW')
            - GET /api/release/list/**           => hasRole('ROLE_VIEW')

            # Packages

            - GET /api/packages                  => hasRole('ROLE_VIEW')

            # Upload

            - POST /api/package/upload           => hasRole('ROLE_CREATE')

            # Install

            - POST /api/package/install          => hasRole('ROLE_CREATE')
            - POST /api/package/install/**       => hasRole('ROLE_CREATE')

            # Delete

            - DELETE /api/package/**             => hasRole('ROLE_CREATE')

            # PackageMetaData

            - GET /api/packageMetadata           => hasRole('ROLE_VIEW')
            - GET /api/packageMetadata/**        => hasRole('ROLE_VIEW')

            # Repositories

            - GET /api/repositories              => hasRole('ROLE_VIEW')
            - GET /api/repositories/**           => hasRole('ROLE_VIEW')

            # Boot Endpoints

            - GET  /actuator/**                  => hasRole('ROLE_MANAGE')

每行的格式如下:spring-doc.cn

HTTP_METHOD URL_PATTERN '⇒' SECURITY_ATTRIBUTEspring-doc.cn

请注意,上面确实是一个 YAML 列表,而不是位于键下的映射(因此在每行的开头使用 '-' 破折号)。spring.cloud.skipper.security.authorization.rulesspring-doc.cn

21.1.1. 用户和角色

Spring Cloud Skipper 不对如何将角色分配给用户做出任何假设。 由于安全角色的确定非常特定于环境,因此默认情况下,Spring Cloud Data Skipper 使用该类将所有角色分配给经过身份验证的 OAuth2 用户。DefaultAuthoritiesExtractorspring-doc.cn

您可以通过提供自己的 Spring bean 定义来自定义该行为,该定义扩展了 Spring Security OAuth 的接口。 在这种情况下,自定义 bean 定义优先于 Spring Cloud Skipper 提供的默认 bean 定义。AuthoritiesExtractorspring-doc.cn

21.2. 使用 Spring Cloud Skipper shell 进行 OAuth 身份验证

如果您的 OAuth2 提供商支持密码授予类型,则可以启动 使用以下命令的 Skipper shell:spring-doc.cn

$ java -jar spring-cloud-skipper-shell-2.11.5.jar \
  --spring.cloud.skipper.client.serverUrl=http://localhost:7577 \
  --spring.cloud.skipper.client.username=my_username \
  --spring.cloud.skipper.client.password=my_password
启用 Spring Cloud Skipper 的身份验证后,如果您想使用地狱,底层 OAuth2 提供程序必须支持密码 OAuth2 授权类型。

在 Skipper shell 中,您还可以使用以下命令提供凭据:spring-doc.cn

skipper:> skipper config --uri https://localhost:7577/api --username my_username --password my_password

成功定位后,您应该会看到以下输出:spring-doc.cn

Successfully targeted http://localhost:7577/api
skipper:>

21.3. OAuth2 身份验证示例

本节提供了 Skipper 的一些常见安全安排示例:spring-doc.cn

21.3.1. 本地 OAuth2 服务器

借助 Spring Security OAuth,您可以 可以使用以下注释创建自己的 OAuth2 服务器:spring-doc.cn

您可以在 https://github.com/ghillert/oauth-test-server/ 中找到一个工作示例应用程序。spring-doc.cn

为此,请克隆项目、构建项目并启动项目。 然后使用相应的 Client ID 和 Client Secret 配置 Spring Cloud Skipper。spring-doc.cn

此选项仅用于开发或演示目的。

21.3.2. 使用 UAA 进行身份验证

如果您需要设置生产就绪的 OAuth 提供程序,则可能需要考虑 使用 CloudFoundry 用户帐户和身份验证 (UAA) 服务器。虽然它被 Cloud Foundry 中,它也可以单独使用。有关更多信息,请参阅 github.com/cloudfoundry/uaaspring-doc.cn