安装

16. 在本地平台安装

16.1. 本地平台配置

以下示例 YAML 文件配置了两个本地部署程序帐户,分别命名为 localDevlocalDevDebugspring-doc.cadn.net.cn

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

账户名后的键值对为javaCmdworkingDirectoriesRootdeleteFilesOnExitenvVarsToInheritshutdownTimeoutjavaOptsuseSpringApplicationJson
更多详细信息请参阅LocalDeployerProperties的Java文档。spring-doc.cadn.net.cn

17. 在 Cloud Foundry 上安装

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

17.1. Cloud Foundry配置

您可以修改以下YML代码片段以适应您的需要:spring-doc.cadn.net.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
部署设置deleteRoutesfalse,以便应用程序的“v2”版本与“v1”版本具有相同的路由。否则,取消部署“v1”会删除该路由。

你也可以在本地运行Skipper服务器并部署到Cloud Foundry。在这种情况下,更方便的是指定skipper.yml文件中的配置,并使用--spring.config.additional-location=skipper.yml选项启动服务器。spring-doc.cadn.net.cn

如果您使用 cf push 来部署 Skipper,那么更适合使用 Cloud Foundry 清单。
您可以根据自己的需求修改以下示例清单文件 manifest.yml:spring-doc.cadn.net.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
您必须设置SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_DEPLOYMENT_DELETEROUTES: false,以便应用程序的“v2”版本与“v1”具有相同的路由。 否则,在取消部署“v1”时会删除该路由。
您必须设置SPRING_CLOUD_SKIPPER_SERVER_PLATFORM_CLOUDFOUNDRY_ACCOUNTS[pws]_DEPLOYMENT_SERVICES属性,将指定的服务绑定到每个已部署的应用程序。

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

在本地机器上启动 Skipper shell 时,它会尝试连接到默认位置为 localhost:7577/api 的服务器。
使用 shell 的 --spring.cloud.skipper.client.serverUri 命令行选项来指定服务器的位置。
您也可以使用 config 交互式 shell 命令设置服务器位置,如下所示:spring-doc.cadn.net.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 Connector 库来创建 DataSource。现在使用 java-cfenv 库,该库允许您设置 Spring Boot 属性 来配置连接池。spring-doc.cadn.net.cn

17.3. 最大磁盘配额

默认情况下,Cloud Foundry 中的每个应用程序启动时都带有 1GB 的磁盘配额,此配额最多可调整至默认最大值 2GB。通过使用 Pivotal Cloud Foundry(PCF)的 Ops Manager 图形用户界面,还可将该默认最大值进一步覆盖提升至 10GB。spring-doc.cadn.net.cn

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

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

17.4. 管理磁盘使用

即使将 Skipper 配置为使用 10G 的空间,仍然有可能耗尽本地磁盘上的可用空间。为防止这种情况,从外部来源下载的 jar 构件,即e.注册为httpmaven资源的应用程序,在应用程序部署时会自动删除,无论部署请求是否成功。这种行为在生产环境中是最优的,因为在这些环境中,容器运行时的稳定性比部署期间产生的 I/O 延迟更为关键。在开发环境中,部署发生的频率更高。此外,jar 构件(或较轻的 metadata 声明文件)包含描述应用程序配置属性的元数据,这些属性被用于与应用程序配置相关的各种操作,在预生产活动期间更频繁地进行。要在预生产环境中以更大的磁盘使用为代价提供更响应式的交互式开发体验,您可以将 CloudFoundry 部署器属性autoDeleteMavenArtifacts设置为falsespring-doc.cadn.net.cn

如果您使用默认的port健康检查类型部署Skipper,则必须显式监视服务器上的磁盘空间,以免耗尽空间。如果使用http健康检查类型(参见下一个示例)部署服务器,当磁盘空间不足时,服务器会自动重启。这是因为Spring Boot的磁盘空间健康指标。您可以使用具有management.health.diskspace前缀的属性来配置磁盘空间健康指标的设置。spring-doc.cadn.net.cn

对于版本 1.7,我们正在研究使用 卷服务 来存储服务器上的 .jar 个工件,然后再将其推送到 Cloud Foundry。spring-doc.cadn.net.cn

以下示例展示了如何将 http 健康检查类型部署到名为 /management/health 的端点:spring-doc.cadn.net.cn

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

18. 在 Kubernetes 上安装

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

18.1. Kubernetes配置

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

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

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

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

19. 数据库配置

关系型数据库用于存储流定义和部署信息。 Spring Cloud Skipper 提供了 MariaDBMySQLOraclePostgreSQLDb2SQL ServerH2 的模式。当服务器启动时,会自动创建该模式。spring-doc.cadn.net.cn

MariaDBMySQL(通过 MariaDB 驱动)、PostgreSQLSQL Server 的 JDBC 驱动无需额外配置即可使用。若要使用其他数据库,您需要按照此处所述,将相应的 JDBC 驱动 JAR 文件放入服务器的类路径中。

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

usernamepassword 在不同数据库中是相同的。然而,urldriver-class-name 则因数据库而异,如下所示。spring-doc.cadn.net.cn

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

MariaDB 10.4+spring-doc.cadn.net.cn

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

org.mariadb.jdbc.Driverspring-doc.cadn.net.cn

是的spring-doc.cadn.net.cn

MySQL 5.7spring-doc.cadn.net.cn

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

org.mariadb.jdbc.Driverspring-doc.cadn.net.cn

是的spring-doc.cadn.net.cn

MySQL 8.0+spring-doc.cadn.net.cn

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

org.mariadb.jdbc.Driverspring-doc.cadn.net.cn

是的spring-doc.cadn.net.cn

PostgreSQLspring-doc.cadn.net.cn

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

org.postgresql.Driverspring-doc.cadn.net.cn

是的spring-doc.cadn.net.cn

SQL Serverspring-doc.cadn.net.cn

jdbc:sqlserver://${db-hostname}:${db-port};databasename=${db-name}&encrypt=falsespring-doc.cadn.net.cn

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

是的spring-doc.cadn.net.cn

DB2spring-doc.cadn.net.cn

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

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

Nospring-doc.cadn.net.cn

Oraclespring-doc.cadn.net.cn

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

oracle.jdbc.OracleDriverspring-doc.cadn.net.cn

Nospring-doc.cadn.net.cn

19.1. H2

当未配置其他数据库且H2驱动程序已添加到服务器类路径时,Spring Cloud Skipper使用H2数据库的嵌入实例作为默认设置。spring-doc.cadn.net.cn

H2 适用于开发用途,但不建议在生产环境中使用,也不支持以外部模式运行。

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

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

要为数据库(例如Oracle)添加自定义驱动程序,您应该重新构建Skipper Server,并将依赖项添加到Maven pom.xml文件中。需要修改spring-cloud-skipper模块的maven pom.xml。GitHub代码仓库中有GA版本标记,因此您可以切换到所需的GA标记,在生产就绪的代码库上添加驱动程序。spring-doc.cadn.net.cn

要为 Spring Cloud Skipper 服务器添加自定义 JDBC 驱动程序依赖项:spring-doc.cadn.net.cn

  1. 选择与您要重建的服务器版本对应的标签,并克隆 GitHub 仓库。spring-doc.cadn.net.cn

  2. 编辑 spring-cloud-skipper-server/pom.xml,并在dependencies部分添加所需的数据库驱动程序依赖。 在下面的示例中,选择了Oracle驱动程序:spring-doc.cadn.net.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.cadn.net.cn

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

默认情况下,REST 端点(管理、维护和健康)不需要经过身份验证即可访问。spring-doc.cadn.net.cn

20. 启用HTTPS

默认情况下,REST 端点使用纯 HTTP 作为传输。
您可以通过在配置中添加证书切换到 HTTPS,如以下 skipper.yml 示例所示:spring-doc.cadn.net.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 由于默认端口是 7577,您可以选择将其更改为更常见的 HTTPS 典型端口。
2 密钥在密钥库中存储时所使用的别名(或名称)。
3 密钥库文件的路径。也可以使用classpath前缀指定类路径资源:classpath:path/to/keystore
4 密钥库的密码。
5 密钥的密码。
6 信任库文件的路径。类路径资源也可以通过使用classpath前缀来指定:classpath:path/to/trust-store
7 信任库的密码。
您可以使用以下参数引用YAML文件:--spring.config.additional-location=skipper.yml
如果启用了HTTPS,则它将完全取代HTTP,成为REST端点交互的协议。因此,未加密的HTTP请求会失败。所以,您必须确保相应地配置Skipper外壳。

20.1. 使用自签名证书

出于测试目的或在开发期间,创建自签名证书可能会很方便。要开始操作,请运行以下命令以创建证书:spring-doc.cadn.net.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.yml 文件中:spring-doc.cadn.net.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

启动跳过器服务器所需的全部内容。 一旦你启动了服务器,你应该能够通过https://localhost:8443/访问它。 由于这是一个自签名证书,你的浏览器应该会显示一个警告。你需要忽略这个警告。spring-doc.cadn.net.cn

20.2. 自签名证书与Shell

默认情况下,自签名证书是Shell的一个问题。使用自签名证书时需要进行额外的步骤才能使Shell正常工作。有两种可用选项:spring-doc.cadn.net.cn

20.2.1. 将自签名证书添加到JVM信任库

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

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

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

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

现在,您可以使用以下JVM参数启动Skipper外壳:spring-doc.cadn.net.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建立连接时遇到问题,可以通过将javax.net.debug JVM参数设置为ssl来启用额外的日志记录。

请记得使用类似于下面的配置命令来针对Skipper服务器:spring-doc.cadn.net.cn

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

20.2.2. 跳过证书验证

另外,您可以通过提供以下可选命令行参数来绕过证书验证:--spring.cloud.skipper.client.skip-ssl-validation=truespring-doc.cadn.net.cn

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

如果可能的话,您应该避免使用此选项。</p><p>禁用信任管理器会违背SSL的初衷,并使您的网站容易受到中间人攻击。

21. OAuth 2.0 安全性

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

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

  • 客户端凭证:从OAuth提供者直接获取访问Tokens,并将其通过Authorization HTTP标头传递给Skipper服务器。spring-doc.cadn.net.cn

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

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

可以通过设置环境变量或向skipper.yml添加以下块来打开OAuth2身份验证:spring-doc.cadn.net.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 用于内省和验证直接传入的Tokens。必填项。
7 授权的角色映射。
您可以使用curl来验证基本身份验证是否正常工作,如下所示:
`curl -u myusername:mypassword http://localhost:7577/`

因此,你应该会看到一份可用的 REST 端点列表。spring-doc.cadn.net.cn

除了基本认证外,您还可以提供访问Tokens来访问REST API。为了实现这一点,请从您的OAuth2提供商获取OAuth2访问Tokens,然后通过使用AuthorizationHTTP标头将该访问Tokens传递给REST API,如下所示:spring-doc.cadn.net.cn

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

21.1. OAuth REST 端点授权

Spring Cloud Skipper 支持以下角色:<br>spring-doc.cadn.net.cn

关于哪些REST端点需要哪些角色的规则在application.yml模块的spring-cloud-skipper-server-core中指定。spring-doc.cadn.net.cn

尽管如此,如果需要的话,您也可以覆盖这些规则。
配置采用YAML 列表的形式(因为某些规则可能具有优先级)。
因此,您需要复制/粘贴整个列表并根据您的需求进行定制(因为无法合并列表)。
始终参考您的版本的 application.yml,因为下面复制的代码片段可能是过时的。
默认规则如下:spring-doc.cadn.net.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.cadn.net.cn

HTTP_METHOD URL_PATTERN '⇒' SECURITY_ATTRIBUTEspring-doc.cadn.net.cn

请注意,上面确实是一个YAML列表,而不是一个映射(因此每行开头使用“-”连字符),它位于spring.cloud.skipper.security.authorization.rules键下。spring-doc.cadn.net.cn

21.1.1 用户和角色

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

通过提供自己的扩展 Spring Security OAuth 的 AuthoritiesExtractor 接口的 Spring Bean 定义,可以自定义该行为。在这种情况下,与 Spring Cloud Skipper 提供的默认定义相比,自定义 Bean 定义具有优先权。spring-doc.cadn.net.cn

21.2 使用 Spring Cloud Skipper Shell 的 OAuth 认证

如果您的OAuth2提供程序支持密码授予类型,您可以使用以下命令启动跳过器外壳:<br>spring-doc.cadn.net.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 启用身份验证时,如果要使用hell,则基础 OAuth2 提供商必须支持密码 OAuth2 授信类型。

从 Skipper shell 内,您也可以使用以下命令提供凭据:spring-doc.cadn.net.cn

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

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

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

21.3. OAuth2 认证示例

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

21.3.1. 本地 OAuth2 服务器

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

您可以在 https://github.com/ghillert/oauth-test-server/ 找到一个可运行的示例应用程序。spring-doc.cadn.net.cn

为此,克隆项目,构建并启动它。然后使用相应的客户端ID和客户端密钥配置Spring Cloud Skipper。spring-doc.cadn.net.cn

仅在开发或演示时使用此选项。

21.3.2. 使用UAA进行身份验证

如果您需要设置一个生产就绪的OAuth提供者,您可能希望考虑使用CloudFoundry用户帐户和认证(UAA)服务器。虽然它被Cloud Foundry所使用,但也可以独立运行。有关更多信息,请参阅github.com/cloudfoundry/uaaspring-doc.cadn.net.cn