En esta sección, se describe cómo usar Apigee Connect para la comunicación entre el plano de administración híbrida y el servicio MART en el plano de entorno de ejecución.
Introducción
Apigee Connect permite que el plano de administración híbrido de Apigee se conecte de forma segura al servicio MART en el plano del entorno de ejecución sin necesidad de exponer el extremo de MART en Internet. Si usas Apigee Connect, no necesitas configurar la puerta de enlace de entrada de MART con un alias de host y un certificado DNS autorizado.
Requisitos previos
Apigee Hybris 1.2.0. o versiones posteriores.
Agrega Apigee Connect al entorno de ejecución híbrido
Apigee Connect está habilitado de forma predeterminada para las instalaciones nuevas de la versión híbrida 1.3.0 de Apigee y versiones posteriores. Por lo tanto, es probable que necesites estos pasos si quieres actualizar de una versión anterior.
Cuando Apigee Connect está configurado y habilitado, la entrada de MART se ignora: el plano de administración solo se conecta al MART mediante Apigee Connect. Todo el tráfico de MART entre el plano de entorno de ejecución híbrido pasa a través de la conexión segura de Apigee Connect.
Sigue estos pasos para habilitar y usar Apigee Connect con Apigee Hybrid:
- Habilita la API de Apigee Connect en la biblioteca de la API de Google Cloud. Puedes habilitar la API en la
consola de Google Cloud o con
gcloud
. Para obtener instrucciones para habilitar las API en la consola de Google Cloud, consulta el Paso 3: Habilita las API. Para usargcloud
a fin de habilitar la API, sigue estos pasos:- Configura el proyecto actual de gcloud en el mismo proyecto de Google Cloud en el que se
habilitó y se aprovisionó tu organización de Apigee.
$ gcloud config set project YOUR_GCP_PROJECT_ID
En el ejemplo anterior
YOUR_GCP_PROJECT_ID
es el ID del proyecto. - Verifica si la API de 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 ...
- Si los resultados no incluyen
apigeeconnect.googleapis.com
, habilita la API:$ gcloud services enable apigeeconnect.googleapis.com
- Configura el proyecto actual de gcloud en el mismo proyecto de Google Cloud en el que se
habilitó y se aprovisionó tu organización de Apigee.
- Agrega la función Agente de Apigee Connect a la cuenta de servicio de MART que creaste en el paso Crea cuentas de servicio en las instrucciones de instalación híbrida de Apigee:
- .
- Si lo necesitas, obtén la dirección de correo electrónico 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 ...
- Comprueba si la cuenta de servicio de MART tiene el rol asignado:
gcloud projects get-iam-policy YOUR_GCP_PROJECT_ID
... - members: - serviceAccount:apigee-mart@hybrid-example.iam.gserviceaccount.com role: roles/apigeeconnect.Agent ...
- Si los resultados no incluyen
role: roles/apigeeconnect.Agent
, asigna la función:gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID \ --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent
En el ejemplo anterior,
YOUR_GCP_PROJECT_ID
es el ID de tu proyecto de Google Cloud yYOUR_MART_SERVICE_ACCOUNT_EMAIL
es la dirección de correo electrónico de la cuenta de servicio de MART.
La función del Agente de Apigee Connect está predefinida y tiene el siguiente permiso asignado:
Permiso Descripción apigeeconnect.endpoints.connect
Este es el permiso para configurar el agente de Apigee Connect. Para obtener detalles sobre cómo asignar permisos de acceso a través de las APIs o la consola de Google Cloud, consulta:
- Si lo necesitas, obtén la dirección de correo electrónico de tu cuenta de servicio de MART:
- Asegúrate de que el archivo de claves de la cuenta de servicio de MART esté en el directorio
hybrid_files/service_accounts
, como se explica en Crea cuentas de servicio. - Abre el archivo de anulaciones. Si la propiedad
connectAgent:enabled
no se configuró como verdadera o falta, agrega o actualiza la siguiente estrofa.La estrofa de Apigee Connect debe seguir de inmediato la estrofa k8sCluster.
La configuración requiere que proporciones la ruta a la clave de la cuenta de servicio descargada. La clave debe ser para la cuenta de servicio con la función del agente de Apigee Connect .
# 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
- Habilita la característica de Apigee Connect para tu organización. El nombre de la característica es
features.mart.connect.enabled
.- Ubica la clave de cuenta de servicio con la función Administrador de la organización de Apigee que usaste cuando instalaste Apigee Hybrid originalmente como se describe en la sección Habilita el acceso del sincronizador. Esta es la cuenta de servicio
apigee-org-admin . Necesitarás esta clave a fin de generar un token necesario para realizar una llamada a la API como se explica a continuación. - 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)
En el ejemplo anterior org-admin-service-account-file es la ruta de tu sistema a la clave de la cuenta de servicio con la función de Administrador de la organización de Apigee.
- Comprueba si Apigee Connect ya está habilitada:
curl https://apigee.googleapis.com/v1/organizations/your_org_name \ -H "Authorization: Bearer $TOKEN"
Busca los siguientes resultados:
"properties": { "property": [ { "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" } ] },
- Si los resultados no incluyen
features..mart.connect.enabled
configurado comotrue
, 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" } ] } }'
- Ubica la clave de cuenta de servicio con la función Administrador de la organización de Apigee que usaste cuando instalaste Apigee Hybrid originalmente como se describe en la sección Habilita el acceso del sincronizador. Esta es la cuenta de servicio
- Inicia el agente de Apigee Connect en el clúster.
Si realizaste 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
- Comprueba el registro del agente de Apigee Connect. Si no se informa ningún error, la actualización se realizará de forma correcta:
kubectl logs -n namespace apigee-connect-agent-pod-name
El agente de Apigee Connect informa las siguientes categorías de registro:
Categoría de registros de auditoría Operaciones DATA_READ ConnectionService.ListConnections
DATA_WRITE Tether.Egress
- Prueba la instalación.
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.
Con esta actualización, el plano de entorno de ejecución híbrido se comunica con el plano de administración a través de Apigee Connect.
Consulta también: Quita Apigee Connect.
Prueba la instalación
- Abre la IU de Apigee Hybrid.
- Verifica que todas las apps para programadores y desarrolladores que hayas creado antes estén presentes en la IU. Debido a que estas entidades se consultan desde el servidor de MART, estarán presentes solo si la comunicación entre los planos de administración y entorno de ejecución está configurada de forma correcta.
- Para asegurarte de que las solicitudes pasen por Apigee Connect y no mediante la entrada de MART, consulta el registro del servidor de MART. Deberías ver entradas para el agente de Apigee Connect 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"
- Actualiza tu token de autorización:
export TOKEN=$(gcloud auth application-default print-access-token)
- Llama a la API de Apigee para ver las transmisiones disponibles que se conectan con el extremo
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 } ] }
- Verifica 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 inició y se comunica de forma correcta:
I0719 11.66:10.765526 2314949 main.go:47] Agent's flag values below I0719 11.66:10.765928 2314949 main.go:50] "alsologtostderr" : false I0719 11.66:10.765940 2314949 main.go:50] "cluster_name" : testABC I0719 11.66:10.765947 2314949 main.go:50] "cluster_region" : us-west2 I0719 11.66:10.765953 2314949 main.go:50] "cpu_profile_enabled" : false I0719 11.66:10.765959 2314949 main.go:50] "http_client_timeout" : 2m0s I0719 11.66:10.765966 2314949 main.go:50] "http_port" : 7070 I0719 11.66:10.765972 2314949 main.go:50] "http_server" : false I0719 11.66:10.765978 2314949 main.go:50] "insecure_ssl" : false I0719 11.66:10.765984 2314949 main.go:50] "local_cert" : I0719 11.66:10.765990 2314949 main.go:50] "log_backtrace_at" : :0 I0719 11.66:10.766001 2314949 main.go:50] "log_dir" : I0719 11.66:10.766007 2314949 main.go:50] "logtostderr" : true I0719 11.66:10.766012 2314949 main.go:50] "mem_profile_enabled" : false I0719 11.66:10.766018 2314949 main.go:50] "project" : projects/apigee-connect-hybrid-prod I0719 11.66:10.766025 2314949 main.go:50] "resource_id" : I0719 11.66:10.766031 2314949 main.go:50] "server_addr" : apigeeconnect.googleapis.com:443 I0719 11.66:10.766036 2314949 main.go:50] "server_cert" : ./server.crt I0719 11.66:10.766042 2314949 main.go:50] "server_key" : ./server.key I0719 11.66:10.766047 2314949 main.go:50] "stderrthreshold" : 2 I0719 11.66:10.766054 2314949 main.go:50] "target_server" : http://127.0.0.1/ I0719 11.66:10.766059 2314949 main.go:50] "tether_endpoint" : APIGEE_MART I0719 11.66:10.766065 2314949 main.go:50] "v" : 0 I0719 11.66:10.766072 2314949 main.go:50] "vmodule" : I0719 11.66:10.845441 2314949 agent.go:400] successfully initiated http client I0719 11.66:10.845772 2314949 agent.go:728] starting metrics http server at ":7070" I0719 11.66:11.231.69 2314949 agent.go:245] listening on tether 6407043920806543360 I0719 11.68: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.683743 2314949 agent.go:245] listening on tether 8978599308035096576 I0719 12:02:40.325633 2314949 agent.go:255] tether id 6407043920806543360 is closed ...
- En la IU híbrida, crea un producto de API, un desarrollador y una app para desarrolladores. Luego, realiza varias llamadas a la API a un proxy.
Los registros del agente de conexión que se generan mientras se procesan las solicitudes serán útiles para ver un estado o un error:
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 provocados por la falla del agente de Connect debido a un error de permiso denegado de IAM, lo que provocó 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.
Quita Apigee Connect
Si borras la implementación de Apigee Connect, el estado del pod puede permanecer en el estado “Finalización” hasta siete minutos. Se espera este tiempo. Los agentes de Apigee Connect esperan que las conexiones existentes venzan en lugar de detenerlos de forma repentina. El retraso garantiza que no se pierdan las solicitudes en curso.