本部分介绍如何将 Apigee Connect(Beta 版)用于 Hybrid 管理平面和运行时平面中的 MART 服务之间的通信。
简介
Apigee Connect 让 Apigee Hybrid 管理平面可安全地连接到运行时平面中的 MART 服务,而无需在互联网上公开 MART 端点。如果您使用 Apigee Connect,则无需使用主机别名和授权 DNS 证书配置 MART 入站流量网关。
前提条件
在设置 Apigee Connect 之前,必须先安装并配置 Apigee Hybrid 1.2.0 或更高版本。
- 如果您是第一次安装 Apigee Hybrid,请按照 Apigee Hybrid 文档中的安装说明操作。
- 如果您目前使用的是 Apigee Hybrid 1.1.x 版,则必须将安装升级到 1.2.0 版本,然后再继续操作。如需了解升级步骤,请参阅升级 Apigee Hybrid
将 Apigee Connect 添加到 Hybrid 运行时
本部分假定您已安装或升级到并配置 Apigee Hybrid 1.2.0 或更高版本
配置和启用 Apigee Connect 后,MART 入站流量会被忽略:管理平面仅使用 Apigee Connect 连接到 MART。Hybrid 运行时平面之间的所有 MART 流量均通过安全的 Apigee Connect 连接传递。
执行以下步骤来启用 Apigee Connect 并将其与 Apigee Hybrid 搭配使用:
- 在 Google Cloud API 库中启用 Apigee Connect API。您可以在 Google Cloud (GCP) Console 中或使用
gcloud
启用此 API。如需在 Google Cloud 控制台中启用 API 的说明,请参阅第 3 步:启用 API。如需使用gcloud
启用 API,请执行以下操作:$ gcloud config set project YOUR_GCP_PROJECT_ID $ gcloud services enable apigeeconnect.googleapis.com
其中,YOUR_GCP_PROJECT_ID
是已启用 Apigee 且为您预配了 Apigee 组织的 GCP 项目。 - 将 Apigee Connect Agent 角色添加到您在 Apigee Hybrid 安装说明中的创建服务账号步骤中创建的 MART 服务账号:
$ gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent
其中YOUR_GCP_PROJECT_ID
是已启用 Apigee 且为您预配了 Apigee 组织的 GCP 项目;YOUR_MART_SERVICE_ACCOUNT_EMAIL
是 MART 服务账号名称。该名称采用电子邮件地址的格式。例如:apigee-mart@my-project.iam.gserviceaccount.com
。
Apigee Connect Agent 角色是预定义的,分配有以下权限:权限 说明 apigeeconnect.endpoints.connect
这是设置 Apigee Connect Agent 的权限。 如需详细了解如何通过 GCP Console 或 API 分配/授予访问权限,请参阅:
- 确保 MART 服务账号的密钥文件位于
hybrid_files/service_accounts
目录中,如创建服务账号中所述。 - 打开您的替换文件,并添加以下 Stanza。配置要求您提供指向所下载服务账号密钥的路径。密钥必须适用于具有 Apigee Connect Agent 角色的服务账号。
# Apigee Connect Agent connectAgent: enabled: true serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
在 k8sCluster 标题下方添加 Stanza,例如:
k8sCluster: name: your_cluster_name region: your_cluster_region # Apigee Connect Agent connectAgent: enabled: true serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
# Apigee Connect Agent connectAgent: enabled: true replicaCountMin: 3 serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
- 找到您在最初安装 Apigee Hybrid 时下载的 Apigee Organization Admin 角色所对应的服务账号密钥,如启用同步器访问部分中所述。您需要使用此密钥生成进行 API 调用所需的令牌,如下所述。
- 执行以下两个命令来获取令牌:
$ export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file $ export TOKEN=$(gcloud auth application-default print-access-token)
其中 org-admin-service-account-fileorg-admin-service-account-file 是系统上指向使用 Apigee Organization Admin 角色下载的服务账号密钥的路径。 - 调用以下 Apigee API 为您的组织启用 Apigee Connect:
curl -v -X PUT \ https://apigee.googleapis.com/v1/organizations/your_org_name \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{ "name" : "your_org_name", "properties" : { "property" : [ { "name" : "features.hybrid.enabled", "value" : "true" }, { "name" : "features.mart.connect.enabled", "value" : "true" } ] } }'
- 在集群中启动 Apigee Connect Agent:
$ $APIGEECTL_HOME/apigeectl apply -f your_overrides_file.yaml -c connect-agent
- 检查 Apigee Connect Agent 日志。如果没有报告错误,则升级会成功:
$ kubectl logs -n namespace apigee-connect-agent-pod-name
Apigee Connect Agent 报告了以下日志类别:
审核日志类别 运维 DATA_READ ConnectionService.ListConnections
DATA_WRITE Tether.Egress
- 测试安装
mart: hostAlias: "mart.apigee-hybrid-docs.net" serviceAccountPath: ./service-accounts/example-project-apigee-mart.json sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.key
在此升级中,Hybrid 运行时平面通过 Apigee Connect 与管理平面进行通信。
另请参阅:移除 Apigee Connect。
测试安装
- 打开 Apigee Hybrid 界面。
- 验证您之前创建的开发者和开发者应用是否显示在界面中。由于这些实体是通过 MART 服务器查询的,因此只有在正确配置管理和平面平面之间的通信时,这些实体才会显示。
- 为了确保请求经过 Apigee Connect,而未经过 MART Ingress,请检查 MART 服务器的日志。您应该会看到名为
apigee-connect-agent-1.0
的 Apigee Connect Agent 对应的条目:$ kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl -c apigee-mart | grep connect
例如:
"2019-12-11 04:59:52,321 org: env: target: action: context-id: mode: pool-1-thread-1 INFO MART_AUDITLOG - MartAuditListener.eventOccurred() : Type:Audit edge-gaambo-controlplane@system.gserviceaccount.com 1576040392317 /v1/organizations/apigee-connect-hybrid-prod/developers/ count=100&expand=true&startKey=4ee9e8f7-12b2-4cde-bf10-32d991469876 200 GET apigee-connect-hybrid-prod 10.40.11.3 10.40.0.5 apigee-connect-agent-1.0 null"
- 在 Hybrid 界面中,创建 API 产品、开发者和开发者应用。然后,检查 MART 服务日志,确认是否已将日志条目发送到运行时平面。例如,以下日志条目显示收到名为
foo-product
的 API 产品:$ kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl -c apigee-mart
2019-12-16 22:15:29,572 org: env: target: action: context-id: mode: pool-1-thread-1 INFO MART_AUDITLOG - MartAuditListener.eventOccurred() : Type:Audit edge-gaambo-controlplane@system.gserviceaccount.com 1576534529566 /v1/organizations/myorg/apiproducts/foo-product/ -NA- 201 CREATE myorg 10.16.1.61 10.16.1.64 apigee-connect-agent-1.0 null 2019-12-16 22:15:30,412 org: env: target: action: context-id: mode: pool-1-thread-1 INFO MART_AUDITLOG - MartAuditListener.eventOccurred() : Type:Audit edge-gaambo-controlplane@system.gserviceaccount.com 1576534530407 /v1/organizations/myorg/apps/ apiProduct=foo-product&expand=false 200 GET myorg 10.16.1.61 10.16.1.64 apigee-connect-agent-1.0 null
- 按照创建和部署代理中的说明,尝试创建和部署新的代理。
- 按照通过要求 API 密钥保护 API 代理中的步骤,使用 API 密钥验证配置代理。运行时通过 Apigee Connect 从管理平面获取验证 API 密钥所需的数据;因此,如果 API 密钥验证正常工作,您知道 Apigee Connect 运行正常。您还可以检查 Apigee Connect 日志以查看数据传输的报告。
移除 Apigee Connect
如果您删除 Apigee Connect 部署,则 Pod 状态会保持“正在终止”状态长达七分钟。预计需要这么长的时间。Apigee Connect 代理会等待现有连接过期,而不会突然停止连接。此延迟时间可确保进行中的动态请求不会丢失。