5.17. 导出产品
您可以使用 .yaml 格式导出 3scale 产品定义,以便您可以将该产品导入到与源 3scale 实例没有连接的 3scale 实例中。您必须先设置 3scale 产品,然后才能导出该产品。请参阅 创建新产品来测试 API 调用。
当两个 3scale 实例具有网络连接时,当您想要在 3scale 实例中使用相同的 3scale 产品时,请使用 toolbox 3scale copy 命令。
描述
当您导出 3scale 产品时,toolbox 会以 .yaml 格式对产品定义序列化,其遵循 Product 和 Backend 自定义资源定义(CRD)。除了产品的基本信息外,输出 .yaml 还包括:
- 链接到产品的后端。
- 链接后端的指标、方法和映射规则.
- 应用计划中定义的限值和定价规则.
- 限值和定价规则引用的指标和方法。
导出产品是一种只读操作。换句话说,重复导出产品是安全的。toolbox 不会更改要导出的产品。如果需要,您可以在将 .yaml 输出导入到另一个 3scale 实例前修改它。
导出 3scale 产品适用于以下情况:
-
源和目标 3scale 实例之间没有连接。例如,当您想要在多个 3scale 实例中使用同一产品时,可能会存在严重网络限制阻止运行 toolbox
3scale copy命令。 -
您需要使用 Git 或其它源控制系统来维护 3scale 产品定义(采用
.yaml格式)。
3scale toolbox export 和 import 命令也可能有助于备份和恢复产品定义。
格式
使用此格式运行 export 命令:
3scale product export [-f output-file] <remote> <product>
export 命令可以将输出发送到 stdout 或文件。默认值为 stdout。要将输出发送到一个文件,请使用 -f 或 --file 选项指定带有 .yaml 的文件名称。
将 <remote> 替换为与您要从中导出产品的 3scale 实例关联的 3scale 供应商帐户别名或 URL。有关指定此功能的更多信息,请参阅管理远程访问凭证。
将 <product> 替换为您要导出的产品的系统名称或 3scale ID。此产品必须与您指定的 3scale 供应商帐户关联。您可以在产品 概述 页面的 3scale GUI 中找到产品的系统名称。要获得产品的 3scale ID,请运行 toolbox 3scale services show 命令。
示例
以下命令从与 my-3scale-1 供应商帐户关联的 3scale 实例导出 petstore 产品,并将其输出到 petstore-product.yaml 文件:
3scale product export -f petstore-product.yaml my-3scale-1 petstore
以下是 Default API 产品的序列化示例:
apiVersion: v1
kind: List
items:
- apiVersion: capabilities.3scale.net/v1beta1
kind: Product
metadata:
annotations:
3scale_toolbox_created_at: '2021-02-17T10:59:23Z'
3scale_toolbox_version: 0.17.1
name: api.xysnalcj
spec:
name: Default API
systemName: api
description: ''
mappingRules:
- httpMethod: GET
pattern: "/v2"
metricMethodRef: hits
increment: 1
last: false
metrics:
hits:
friendlyName: Hits
unit: hit
description: Number of API hits
methods:
servicemethod01:
friendlyName: servicemethod01
description: ''
policies:
- name: apicast
version: builtin
configuration: {}
enabled: true
applicationPlans:
basic:
name: Basic
appsRequireApproval: false
trialPeriod: 0
setupFee: 0.0
custom: false
state: published
costMonth: 0.0
pricingRules:
- from: 1
to: 1000
pricePerUnit: 1.0
metricMethodRef:
systemName: hits
limits:
- period: hour
value: 1222222
metricMethodRef:
systemName: hits
backend: backend_01
backendUsages:
backend_01:
path: "/v1/pets"
backend_02:
path: "/v1/cats"
deployment:
apicastSelfManaged:
authentication:
oidc:
issuerType: rest
issuerEndpoint: https://hello:test@example.com/auth/realms/3scale-api-consumers
jwtClaimWithClientID: azp
jwtClaimWithClientIDType: plain
authenticationFlow:
standardFlowEnabled: false
implicitFlowEnabled: true
serviceAccountsEnabled: false
directAccessGrantsEnabled: true
credentials: query
security:
hostHeader: ''
secretToken: some_secret
gatewayResponse:
errorStatusAuthFailed: 403
errorHeadersAuthFailed: text/plain; charset=us-ascii
errorAuthFailed: Authentication failed
errorStatusAuthMissing: 403
errorHeadersAuthMissing: text/plain; charset=us-ascii
errorAuthMissing: Authentication parameters missing
errorStatusNoMatch: 404
errorHeadersNoMatch: text/plain; charset=us-ascii
errorNoMatch: No Mapping Rule matched
errorStatusLimitsExceeded: 429
errorHeadersLimitsExceeded: text/plain; charset=us-ascii
errorLimitsExceeded: Usage limit exceeded
stagingPublicBaseURL: http://staging.example.com:80
productionPublicBaseURL: http://example.com:80
- apiVersion: capabilities.3scale.net/v1beta1
kind: Backend
metadata:
annotations:
3scale_toolbox_created_at: '2021-02-17T10:59:34Z'
3scale_toolbox_version: 0.17.1
name: backend.01.pcjwxbdu
spec:
name: Backend 01
systemName: backend_01
privateBaseURL: https://b1.example.com:443
description: new desc
mappingRules:
- httpMethod: GET
pattern: "/v1/pets"
metricMethodRef: hits
increment: 1
last: false
metrics:
hits:
friendlyName: Hits
unit: hit
description: Number of API hits
methods:
mybackendmethod01:
friendlyName: mybackendmethod01
description: ''
- apiVersion: capabilities.3scale.net/v1beta1
kind: Backend
metadata:
annotations:
3scale_toolbox_created_at: '2021-02-17T10:59:34Z'
3scale_toolbox_version: 0.17.1
name: backend.02.tiedgjsk
spec:
name: Backend 02
systemName: backend_02
privateBaseURL: https://b2.example.com:443
description: ''
mappingRules:
- httpMethod: GET
pattern: "/v1/cats"
metricMethodRef: hits
increment: 1
last: false
metrics:
hits:
friendlyName: Hits
unit: hit
description: Number of API hits
methods:
backend02_method01:
friendlyName: backend02_method01
description: ''
导出和传送到 Product CR
运行 export 命令时,您可以管道输出来创建 产品自定义资源(CR)。哪个 3scale 实例包含这个 CR 取决于以下条件:
-
如果定义了
threescale-provider-accountsecret,3scale operator 会在由该 secret 标识的 3scale 实例中创建 product CR。 -
如果没有定义
threescale-provider-accountsecret,那么如果命名空间中安装了 3scale 实例,则新产品 CR 将位于该命名空间中,3scale 操作器会在该命名空间中创建产品 CR。 -
如果没有定义
threescale-provider-accountsecret,如果新产品 CR 所在的命名空间不包含 3scale 实例,则 3scale 操作器会将产品 CR 标记为失败状态。
假设您在包含 3scale-provider-account 机密的命名空间中运行以下命令:toolbox 将 petstore CR 传送到 3scale 实例,该实例在 3scale-provider-account secret 中标识:
3scale product export my-3scale-1 petstore | oc apply -f -
详情请参阅 3scale 操作器如何标识自定义资源链接的租户。