使用 Apigee Connect(Beta 版)

本部分介绍如何将 Apigee Connect(Beta 版)用于 Hybrid 管理平面和运行时平面中的 MART 服务之间的通信。

简介

Apigee Connect 让 Apigee Hybrid 管理平面可安全地连接到运行时平面中的 MART 服务,而无需在互联网上公开 MART 端点。如果您使用 Apigee Connect,则无需使用主机别名和授权 DNS 证书配置 MART 入站流量网关。

在 Hybrid 运行时平面执行的主要服务,其中显示了 Apigee Connect

前提条件

在设置 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 搭配使用:

  1. 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 项目。
  2. 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 分配/授予访问权限,请参阅:

  3. 确保 MART 服务账号的密钥文件位于 hybrid_files/service_accounts 目录中,如创建服务账号中所述。
  4. 打开您的替换文件,并添加以下 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
  5. 找到您在最初安装 Apigee Hybrid 时下载的 Apigee Organization Admin 角色所对应的服务账号密钥,如启用同步器访问部分中所述。您需要使用此密钥生成进行 API 调用所需的令牌,如下所述。
  6. 执行以下两个命令来获取令牌:
    $ export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file
    $ export TOKEN=$(gcloud auth application-default print-access-token)

    其中 org-admin-service-account-file 是系统上指向指向使用 Apigee Organization Admin 角色下载的服务账号密钥的路径。
  7. 调用以下 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"
        } ]
      }
    }'

  8. 在集群中启动 Apigee Connect Agent:

    $ $APIGEECTL_HOME/apigeectl apply -f your_overrides_file.yaml -c connect-agent

  9. mart:
      hostAlias: "mart.apigee-hybrid-docs.net"
      serviceAccountPath: ./service-accounts/example-project-apigee-mart.json
      sslCertPath: ./certs/fullchain.pem
      sslKeyPath: ./certs/privkey.key
    
  10. 检查 Apigee Connect Agent 日志。如果没有报告错误,则升级会成功:
    $ kubectl logs -n namespace apigee-connect-agent-pod-name

    Apigee Connect Agent 报告了以下日志类别:
    审核日志类别 操作
    DATA_READ ConnectionService.ListConnections
    DATA_WRITE Tether.Egress
    如需获得在 Apigee Hybrid 中查看审核日志的帮助,请参阅审核日志记录信息
  11. 在此升级中,Hybrid 运行时平面通过 Apigee Connect 与管理平面进行通信。

  12. 测试安装

另请参阅:移除 Apigee Connect

测试安装

  1. 打开 Apigee Hybrid 界面
  2. 验证您之前创建的开发者和开发者应用是否显示在界面中。由于这些实体是通过 MART 服务器查询的,因此只有在正确配置管理和平面平面之间的通信时,这些实体才会显示。
  3. 为了确保请求经过 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"
  4. 在 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
  5. 按照创建和部署代理中的说明,尝试创建和部署新的代理。
  6. 按照通过要求 API 密钥保护 API 代理中的步骤,使用 API 密钥验证配置代理。运行时通过 Apigee Connect 从管理平面获取验证 API 密钥所需的数据;因此,如果 API 密钥验证正常工作,您知道 Apigee Connect 运行正常。您还可以检查 Apigee Connect 日志以查看数据传输的报告。

移除 Apigee Connect

如果您删除 Apigee Connect 部署,则 Pod 状态会保持“正在终止”状态长达七分钟。预计需要这么长的时间。Apigee Connect 代理会等待现有连接过期,而不会突然停止连接。此延迟时间可确保进行中的动态请求不会丢失。