Apigee Connect

En esta sección se describe cómo usar Apigee Connect para la comunicación entre el plano de gestión híbrido y el servicio MART en el plano de tiempo de ejecución.

Introducción

Apigee Connect permite que el plano de gestión de Apigee hybrid se conecte de forma segura al servicio MART del plano de entorno de ejecución sin que tengas que exponer el endpoint de MART en Internet. Si usas Apigee Connect, no tienes que configurar la pasarela de entrada de MART con un alias de host y un certificado DNS autorizado.

Servicios principales que se ejecutan en el plano del entorno de ejecución híbrido que muestra Apigee Connect

Requisitos previos

Apigee hybrid 1.2.0 o versiones posteriores.

Añadir Apigee Connect al entorno de ejecución híbrido

Apigee Connect está habilitado de forma predeterminada en las nuevas instalaciones de Apigee Hybrid 1.3.0 y versiones posteriores. Por lo tanto, es muy probable que necesites seguir estos pasos si vas a actualizar desde una versión anterior.

Cuando Apigee Connect está configurado y habilitado, se ignora el ingreso de MART: el plano de gestión solo se conecta a MART mediante Apigee Connect. Todo el tráfico de MART entre el plano del entorno de ejecución híbrido pasa por la conexión segura de Apigee Connect.

Sigue estos pasos para habilitar y usar Apigee Connect con Apigee hybrid:

  1. Habilita la API Apigee Connect en la biblioteca de APIs de Google Cloud. Puedes habilitar la API en la consola de Google Cloud (GCP) o con gcloud. Para obtener instrucciones sobre cómo habilitar APIs en la consola de Google Cloud, consulta el paso 3: Habilita las APIs. Para usar gcloud y habilitar la API, sigue estos pasos:
    1. En gcloud, define el proyecto actual como el mismo proyecto de GCP en el que se habilitó Apigee y se aprovisionó tu organización de Apigee.
      $ gcloud config set project YOUR_GCP_PROJECT_ID

      Donde YOUR_GCP_PROJECT_ID es el ID del proyecto.

    2. Comprueba si la API Apigee Connect ya está habilitada:
      gcloud services list
      NAME                                 TITLE
      apigee.googleapis.com                Apigee API
      apigeeconnect.googleapis.com         Apigee Connect API
      bigquery.googleapis.com              BigQuery API
      
      ...
    3. Si los resultados no incluyen apigeeconnect.googleapis.com, habilita la API:
      $ gcloud services enable apigeeconnect.googleapis.com
  2. Añade el rol Agente de conexión de Apigee a la cuenta de servicio de MART que has creado en el paso Crear cuentas de servicio de las instrucciones de instalación de Apigee hybrid:
    1. Si lo necesitas, obtén la dirección de correo de tu cuenta de servicio de MART:
      gcloud iam service-accounts list
      NAME                          EMAIL                                                 DISABLED
      apigee-mart                   apigee-mart@hybrid-example.iam.gserviceaccount.com       False
      
      ...
    2. Comprueba si la cuenta de servicio de MART ya tiene asignado el rol:
      gcloud projects get-iam-policy YOUR_GCP_PROJECT_ID
      ...
      
      - members:
        - serviceAccount:apigee-mart@hybrid-example.iam.gserviceaccount.com
        role: roles/apigeeconnect.Agent
      
      ...
    3. Si los resultados no incluyen role: roles/apigeeconnect.Agent, asigna el rol:
      gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID \
      --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent

      Donde YOUR_GCP_PROJECT_ID es el ID de tu proyecto de GCP y YOUR_MART_SERVICE_ACCOUNT_EMAIL es la dirección de correo de la cuenta de servicio de MART.

    El rol Agente de conexión de Apigee está predefinido y tiene asignado el siguiente permiso:

    Permiso Descripción
    apigeeconnect.endpoints.connect Este es el permiso para configurar el agente de conexión de Apigee.

    Para obtener información sobre cómo asignar permisos de acceso a través de la consola de GCP o de las APIs, consulta los siguientes artículos:

  3. Asegúrate de que el archivo de clave de la cuenta de servicio de MART esté en el directorio hybrid_files/service_accounts, tal como se explica en Crear cuentas de servicio.
  4. Abre el archivo de anulaciones. Si la propiedad connectAgent:enabled no tiene el valor true o no se ha incluido, añada o actualice la siguiente estrofa.

    La estrofa de Apigee Connect debe ir inmediatamente después de la estrofa k8sCluster.

    Para completar la configuración, debes proporcionar la ruta a la clave de cuenta de servicio descargada. La clave debe ser de la cuenta de servicio con el rol Agente de conexión de Apigee .

    # Apigee Connect Agent
    connectAgent:
      enabled: true
      serviceAccountPath: ./service-accounts/MART_SA_KEYFILE.json
    # Apigee Connect Agent
    connectAgent:
      enabled: true
      replicaCountMin: 3
      serviceAccountPath: ./service-accounts/connect_agent_sa_key.json
  5. Habilita la función Apigee Connect en tu organización. El nombre de la función es features.mart.connect.enabled.
    1. Busca la clave de la cuenta de servicio con el rol Administrador de la organización de Apigee que usaste cuando instalaste Apigee hybrid por primera vez, tal como se describe en la sección Habilitar el acceso del sincronizador. Esta es la cuenta de servicio apigee-org-admin. Necesitará esta clave para generar un token que le permita hacer una llamada a la API, tal como se explica más abajo.
    2. Ejecuta estos dos comandos para obtener un token:
      export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file
      $ export TOKEN=$(gcloud auth application-default print-access-token)

      Donde org-admin-service-account-file es la ruta de tu sistema a la clave de la cuenta de servicio con el rol Administrador de la organización de Apigee.

    3. Comprueba si Apigee Connect ya está habilitado:
      curl  https://apigee.googleapis.com/v1/organizations/your_org_name \
        -H "Authorization: Bearer $TOKEN"

      Busca en los resultados lo siguiente:

        "properties": {
          "property": [
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
          ]
        },
    4. Si los resultados no incluyen features..mart.connect.enabled definido como true, llama a la siguiente API de Apigee para habilitar Apigee Connect en tu organización:
      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"
          } ]
        }
      }'

  6. Inicia el agente de Apigee Connect en el clúster.

    Si has hecho cambios en alguno de los pasos anteriores, usa el siguiente comando para iniciar el agente de Apigee Connect:

     $APIGEECTL_HOME/apigeectl apply -f your_overrides_file.yaml --org

  7. mart:
      hostAlias: "mart.apigee-hybrid-docs.net"  # ignored when Apigee Connect is enabled.
      serviceAccountPath: ./service-accounts/example-project-apigee-mart.json
      sslCertPath: ./certs/fullchain.pem  # ignored when Apigee Connect is enabled.
      sslKeyPath: ./certs/privkey.key  # ignored when Apigee Connect is enabled.
  8. Consulta el registro del agente de conexión de Apigee. Si no se ha detectado ningún error, la actualización se ha completado correctamente:
    kubectl logs -n namespace apigee-connect-agent-pod-name

    El agente de Apigee Connect registra las siguientes categorías de registros:
    Categoría de registros de auditoría Operaciones
    DATA_READ ConnectionService.ListConnections
    DATA_WRITE Tether.Egress
    Para obtener ayuda sobre cómo ver los registros de auditoría en Apigee hybrid, consulta Información sobre el registro de auditoría.
  9. Con esta actualización, el plano de entorno de ejecución híbrido se comunica con el plano de gestión a través de Apigee Connect.

  10. Prueba la instalación.

Consulta también Eliminar Apigee Connect.

Probar la instalación

  1. Abre la interfaz de usuario de Apigee hybrid.
  2. Verifica que los desarrolladores y las aplicaciones de desarrollador que hayas creado anteriormente estén presentes en la interfaz de usuario. Como estas entidades se consultan desde el servidor MART, solo estarán presentes si la comunicación entre los planos de gestión y de tiempo de ejecución está configurada correctamente.
  3. Para asegurarte de que las solicitudes se envían a través de Apigee Connect y no a través del ingreso de MART, consulta el registro del servidor de MART. Deberías ver entradas del agente de conexión de Apigee llamado apigee-connect-agent-1.0:
    kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl --org | grep connect

    Por ejemplo:

    "2020-07-31 04:59:52,321 org: env: target: action: context-id: mode: pool-1-thread-1 INFO.
    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. Actualiza tu token de autorización:
    export TOKEN=$(gcloud auth application-default print-access-token)
  5. Llama a la API de Apigee para ver los flujos disponibles que se conectan con el endpoint apigee-mart:
    curl -s https://apigeeconnect.googleapis.com/v1/projects/YOUR_GCP_PROJECT_ID/endpoints/apigee_mart/connections \
      -H "Authorization: Bearer $TOKEN"
    {
      "connections": [
        {
          "endpoint": "projects/865098068308/endpoints/apigee_mart",
          "cluster": {
            "name": "apigee-connect-test-cluster2",
            "region": "australia-southeast1"
          },
          "streamCount": 4
        },
        {
          "endpoint": "projects/865098068308/endpoints/apigee_mart",
          "cluster": {
            "name": "apigee-connect-test-cluster",
            "region": "us-central1"
          },
          "streamCount": 2
        }
      ]
    }
  6. Comprueba los registros del agente de Apigee Connect:
    kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>

    Los siguientes registros indican que el agente de Apigee Connect se ha iniciado y se comunica correctamente:

    I0719 11:56:10.765526 2314949 main.go:47] Agent's flag values below
    I0719 11:56:10.765928 2314949 main.go:50] "alsologtostderr" : false
    I0719 11:56:10.765940 2314949 main.go:50] "cluster_name" : testABC
    I0719 11:56:10.765947 2314949 main.go:50] "cluster_region" : us-west2
    I0719 11:56:10.765953 2314949 main.go:50] "cpu_profile_enabled" : false
    I0719 11:56:10.765959 2314949 main.go:50] "http_client_timeout" : 2m0s
    I0719 11:56:10.765966 2314949 main.go:50] "http_port" : 7070
    I0719 11:56:10.765972 2314949 main.go:50] "http_server" : false
    I0719 11:56:10.765978 2314949 main.go:50] "insecure_ssl" : false
    I0719 11:56:10.765984 2314949 main.go:50] "local_cert" :
    I0719 11:56:10.765990 2314949 main.go:50] "log_backtrace_at" : :0
    I0719 11:56:10.766001 2314949 main.go:50] "log_dir" :
    I0719 11:56:10.766007 2314949 main.go:50] "logtostderr" : true
    I0719 11:56:10.766012 2314949 main.go:50] "mem_profile_enabled" : false
    I0719 11:56:10.766018 2314949 main.go:50] "project" : projects/apigee-connect-hybrid-prod
    I0719 11:56:10.766025 2314949 main.go:50] "resource_id" :
    I0719 11:56:10.766031 2314949 main.go:50] "server_addr" : apigeeconnect.googleapis.com:443
    I0719 11:56:10.766036 2314949 main.go:50] "server_cert" : ./server.crt
    I0719 11:56:10.766042 2314949 main.go:50] "server_key" : ./server.key
    I0719 11:56:10.766047 2314949 main.go:50] "stderrthreshold" : 2
    I0719 11:56:10.766054 2314949 main.go:50] "target_server" : http://127.0.0.1/
    I0719 11:56:10.766059 2314949 main.go:50] "tether_endpoint" : APIGEE_MART
    I0719 11:56:10.766065 2314949 main.go:50] "v" : 0
    I0719 11:56:10.766072 2314949 main.go:50] "vmodule" :
    I0719 11:56:10.845441 2314949 agent.go:400] successfully initiated http client
    I0719 11:56:10.845772 2314949 agent.go:728] starting metrics http server at ":7070"
    I0719 11:56:11.231959 2314949 agent.go:245] listening on tether 6407043920806543360
    I0719 11:58:11.346544 2314949 agent.go:245] listening on tether 2101602677040349184
    I0719 12:00:11.461084 2314949 agent.go:245] listening on tether 9109203697228840960
    I0719 12:02:11.583743 2314949 agent.go:245] listening on tether 8978599308035096576
    I0719 12:02:40.325633 2314949 agent.go:255] tether id 6407043920806543360 is closed
    
    ...
  7. En la interfaz de usuario híbrida, crea un producto de API, un desarrollador y una aplicación para desarrolladores. Después, haz varias llamadas a la API de un proxy.

    Los registros del agente de Connect generados al procesar solicitudes te ayudarán a ver el estado o los errores:

    kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>
    INFO: 2020/04/13 03:29:08 "961ff385-600a-427a-8864-ba066ff42330": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:08 Attempting to send response 961ff385-600a-427a-8864-ba066ff42330 on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:09 "e2fc0492-6e78-4c58-972b-7de8258b9e86": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:09 Attempting to send response e2fc0492-6e78-4c58-972b-7de8258b9e86 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:10 "1ab3023b-b763-4b91-bf4f-ca8c02f62e50": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:10 Attempting to send response 1ab3023b-b763-4b91-bf4f-ca8c02f62e50 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:12 "1fa3e3c3-a36e-4ff1-b2d3-5cf14f2f8fdd": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:12 Attempting to send response 1fa3e3c3-a36e-4ff1-b2d3-5cf14f2f8fdd on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:13 "09b7ef9d-f53d-466a-a174-e88fc7e5286d": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:13 Attempting to send response 09b7ef9d-f53d-466a-a174-e88fc7e5286d on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:14 "c2ce8b73-8faf-4a05-88d9-24fb2bf45552": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:14 Attempting to send response c2ce8b73-8faf-4a05-88d9-24fb2bf45552 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:15 "fdc3bac5-2b83-4b57-a28d-d8b455dae71e": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:15 Attempting to send response fdc3bac5-2b83-4b57-a28d-d8b455dae71e on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:16 "260026a9-f578-4447-a1d2-d8e49cf181d8": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:16 Attempting to send response 260026a9-f578-4447-a1d2-d8e49cf181d8 on
    tether 12483040283652521984
    INFO: 2020/04/13 03:29:17 "bf3d74a1-94ae-4041-892f-56f1ed9c9cff": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200
    INFO: 2020/04/13 03:29:17 Attempting to send response bf3d74a1-94ae-4041-892f-56f1ed9c9cff on
    tether 16734438331890270208
    INFO: 2020/04/13 03:29:18 "6d017278-3b7a-40fb-9c63-7c34320e7df1": received response from target
    "apigee-mart-apigee-connect-hybrid-prod.apigee.svc.cluster.local:8843", status code: 200

    Registros causados por un error de Connect Agent debido a un error de permiso denegado de gestión de identidades y accesos, lo que provoca que el agente falle:

    F0719 12:34:33.128565 2326128 tether.go:29] failed to register stream with Apigee Connect, got
    'PermissionDenied': rpc error: code = PermissionDenied desc = Permission denied on resource '//
    apigeeconnect.googleapis.com/projects/apigee-connect-hybrid-prod/endpoints/APIGEE_MART' (or it
    may not exist).
    F0719 12:34:33.128565 2326128 tether.go:29] failed to register stream with Apigee Connect, got
    'PermissionDenied': rpc error: code = PermissionDenied desc = Permission denied on resource pro
    ject apigee-connect-hybrid-prod.

Quitar Apigee Connect

Si eliminas la implementación de Apigee Connect, el estado del pod puede permanecer en el estado "Terminating" (Finalizando) durante un máximo de siete minutos. Este tiempo es el esperado. Los agentes de Apigee Connect esperan a que caduquen las conexiones existentes en lugar de detenerlas de repente. El retraso asegura que no se pierdan las solicitudes en curso.