3.6. 使用操作器部署 APIcast 网关自助管理解决方案
本指南提供了通过 Openshift Container Platform 控制台使用 APIcast operator 部署 APIcast 网关自助管理解决方案的步骤。
先决条件
- OpenShift 容器平台(OCP)4.x 或更高版本,具有管理员特权。
- 您必须遵循 安装 APIcast Operator 中的步骤。
流程
- 使用具有管理员特权的帐户登录 OCP 控制台。
- 点 Operators > Installed Operators。
- 从 Installed Operators 列表中点 APIcast Operator。
- 点 APIcast > Create APIcast。
3.6.1. APIcast 部署和配置选项
您可以使用两种方法部署和配置 APIcast 网关自我管理解决方案:
3.6.1.1. 提供 3scale 系统端点
流程
创建一个包含 3scale 系统管理门户端点信息的 OpenShift secret:
oc create secret generic ${SOME_SECRET_NAME} --from-literal=AdminPortalURL=${MY_3SCALE_URL}
-
${SOME_SECRET_NAME}
是 secret 的名称,只要它与现有 secret 不冲突,可以是您想要的任何名称。 ${MY_3SCALE_URL}
是包含 3scale 访问令牌和 3scale 系统门户端点的 URI。如需了解更多详细信息,请参阅THREESCALE_PORTAL_ENDPOINT
示例
oc create secret generic 3scaleportal --from-literal=AdminPortalURL=https://access-token@account-admin.3scale.net
有关机密内容的更多信息,请参阅 管理门户配置 secret 参考。
-
为 APIcast 创建 OpenShift 对象
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: adminPortalCredentialsRef: name: SOME_SECRET_NAME
spec.adminPortalCredentialsRef.name
必须是包含 3scale 系统管理门户端点信息的现有 OpenShift secret 的名称。确认与 APIcast 对象关联的 OpenShift Deployment 的
readyReplicas
字段是否为 1,以验证 APIcast 容器集正在运行并已就绪。或者,等待字段设置为:$ echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}') 1
3.6.1.1.1. 验证 APIcast 网关正在运行且可用
流程
确保 OpenShift Service APIcast 已公开给您的本地计算机,并执行测试请求。通过将 APIcast OpenShift Service 端口转发到
localhost:8080
来做到这一点:oc port-forward svc/apicast-example-apicast 8080
向配置的 3scale 服务发出请求,以验证 HTTP 响应是否成功。使用在服务的
Staging Public Base URL
或Production Public Base URL
设置中配置的域名。例如:$ curl 127.0.0.1:8080/test -H "Host: myhost.com"
3.6.1.1.2. 通过 Kubernetes 入口公开 APIcast
要通过 Kubernetes Ingress 向外部公开 APIcast,请设置并配置 exposeHost
部分。当设置 exposeHost
部分中的 host
字段时,这会创建一个 Kubernetes Ingress 对象。然后,以前安装的和现有的 Kubernetes Ingress Controller 可以使用 Kubernetes Ingress 对象,使 APIcast 从外部访问。
要了解 Ingress Controller 可用于使 APIcast 外部访问,以及如何配置它们,请参阅 Kubernetes Ingress Controller 文档。
以下示例使用主机名 myhostname.com
公开 APIcast:
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: ... exposedHost: host: "myhostname.com" ...
这个示例使用 HTTP 在端口 80 上创建一个 Kubernetes Ingress 对象。当 APIcast 部署位于 OpenShift 环境中时,OpenShift 默认 Ingress Controller 将使用 Ingress 对象 APIcast 创建 Route 对象,以允许从外部访问 APIcast 安装。
您也可以为 exposeHost
部分配置 TLS。下表中可用字段的详情:
json/yaml 项 | 类型 | 必填 | 默认值 | 描述 |
---|---|---|---|---|
| 字符串 | 是 | N/A | 路由到网关的域名 |
| []extensions.IngressTLS | 否 | N/A | ingress TLS 对象的数组。请参阅 TLS 的更多信息。 |
3.6.1.2. 提供配置 secret
流程
使用配置文件创建 secret:
$ curl https://raw.githubusercontent.com/3scale/APIcast/master/examples/configuration/echo.json -o $PWD/config.json oc create secret generic apicast-echo-api-conf-secret --from-file=$PWD/config.json
配置文件必须名为
config.json
。这是一个 APIcast CRD 引用 要求。有关机密内容的更多信息,请参阅 管理门户配置 secret 参考。
创建 APIcast 自定义资源 :
$ cat my-echo-apicast.yaml apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: my-echo-apicast spec: exposedHost: host: YOUR DOMAIN embeddedConfigurationSecretRef: name: apicast-echo-api-conf-secret $ oc apply -f my-echo-apicast.yaml
以下是嵌入式配置 secret 的示例:
apiVersion: v1 kind: Secret metadata: name: SOME_SECRET_NAME type: Opaque stringData: config.json: | { "services": [ { "proxy": { "policy_chain": [ { "name": "apicast.policy.upstream", "configuration": { "rules": [{ "regex": "/", "url": "http://echo-api.3scale.net" }] } } ] } } ] }
在创建 APIcast 对象时设置以下内容:
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: embeddedConfigurationSecretRef: name: SOME_SECRET_NAME
spec.embeddedConfigurationSecretRef.name
必须是包含网关配置的现有 OpenShift secret 的名称。确认与 APIcast 对象关联的 OpenShift Deployment 的
readyReplicas
字段是否为 1,以验证 APIcast 容器集正在运行并已就绪。或者,等待字段设置为:$ echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}') 1
3.6.1.2.1. 验证 APIcast 网关正在运行且可用
流程
确保 OpenShift Service APIcast 已公开给您的本地计算机,并执行测试请求。通过将 APIcast OpenShift Service 端口转发到
localhost:8080
来做到这一点:oc port-forward svc/apicast-example-apicast 8080
向配置的 3scale 服务发出请求,以验证 HTTP 响应是否成功。使用在服务的
Staging Public Base URL
或Production Public Base URL
设置中配置的域名。例如:$ curl 127.0.0.1:8080/test -H "Host: localhost" { "method": "GET", "path": "/test", "args": "", "body": "", "headers": { "HTTP_VERSION": "HTTP/1.1", "HTTP_HOST": "echo-api.3scale.net", "HTTP_ACCEPT": "*/*", "HTTP_USER_AGENT": "curl/7.65.3", "HTTP_X_REAL_IP": "127.0.0.1", "HTTP_X_FORWARDED_FOR": ... "HTTP_X_FORWARDED_HOST": "echo-api.3scale.net", "HTTP_X_FORWARDED_PORT": "80", "HTTP_X_FORWARDED_PROTO": "http", "HTTP_FORWARDED": "for=10.0.101.216;host=echo-api.3scale.net;proto=http" }, "uuid": "603ba118-8f2e-4991-98c0-a9edd061f0f0"