Nesta seção, descrevemos o uso do Apigee Connect para comunicação entre o plano de gerenciamento híbrido e o serviço MART no plano de execução.
Introdução
O Apigee Connect permite que o plano de gerenciamento híbrido da Apigee se conecte com segurança ao serviço MART no plano do ambiente de execução sem exigir que você exponha o endpoint MART na Internet. Se você usa o Apigee Connect, não precisa configurar o gateway de entrada MART com um alias de host e um certificado de DNS autorizado.
Pré-requisitos
Apigee híbrida 1.2.0. ou mais recentes.
Adicionar o Apigee Connect ao ambiente de execução híbrido
A Apigee Connect é ativada por padrão para novas instalações da versão híbrida da Apigee 1.3.0 e mais recentes. Portanto, você provavelmente precisará realizar essas etapas se estiver fazendo o upgrade de uma versão mais antiga.
Quando o Apigee Connect é configurado e ativado, a entrada MART é ignorada: o plano de gerenciamento só se conecta ao MART usando o Apigee Connect. Todo o tráfego MART entre o plano de ambiente de execução híbrido passa pela conexão segura do Apigee Connect.
Siga estas etapas para ativar e usar o Apigee Connect com o híbrido da Apigee:
- Ative a API Apigee Connect na
biblioteca de APIs do Google Cloud. Ative a API no
Console do Google Cloud (GCP) ou com
gcloud
. Para instruções sobre como ativar APIs no console do Google Cloud, consulte a Etapa 3: ativar APIs. Para usargcloud
para ativar a API:- Defina o projeto atual no gcloud como o mesmo projeto do GCP para quem
a Apigee foi ativada e sua organização na Apigee foi provisionada.
$ gcloud config set project YOUR_GCP_PROJECT_ID
Em que
YOUR_GCP_PROJECT_ID
é o ID do projeto. - Verifique se a API Apigee Connect já está ativada:
gcloud services list
NAME TITLE apigee.googleapis.com Apigee API apigeeconnect.googleapis.com Apigee Connect API bigquery.googleapis.com BigQuery API ...
- Se os resultados não incluírem
apigeeconnect.googleapis.com
, ative a API:$ gcloud services enable apigeeconnect.googleapis.com
- Defina o projeto atual no gcloud como o mesmo projeto do GCP para quem
a Apigee foi ativada e sua organização na Apigee foi provisionada.
- Adicione o papel do agente do Apigee Connect à conta de serviço MART que você criou
na etapa
Criar contas de serviço das instruções de instalação do híbrido da Apigee:
- Se precisar, consiga o endereço de e-mail da sua conta de serviço MART:
gcloud iam service-accounts list
NAME EMAIL DISABLED apigee-mart apigee-mart@hybrid-example.iam.gserviceaccount.com False ...
- Verifique se a conta de serviço MART tem um papel atribuído a ela:
gcloud projects get-iam-policy YOUR_GCP_PROJECT_ID
... - members: - serviceAccount:apigee-mart@hybrid-example.iam.gserviceaccount.com role: roles/apigeeconnect.Agent ...
- Se os resultados não incluírem
role: roles/apigeeconnect.Agent
, atribua o papel:gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID \ --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent
Em que
YOUR_GCP_PROJECT_ID
é o ID do projeto do GCP eYOUR_MART_SERVICE_ACCOUNT_EMAIL
é o endereço de e-mail da conta de serviço MART.
O papel do agente do Apigee Connect é predefinido e tem a seguinte permissão atribuída a ele:
Permissão Descrição apigeeconnect.endpoints.connect
Essa é a permissão para configurar o Apigee Connect Agent. Para detalhes sobre como atribuir permissões de acesso por meio do Console do GCP ou de APIs, consulte:
- Se precisar, consiga o endereço de e-mail da sua conta de serviço MART:
- Verifique se o arquivo de chave da conta de serviço do MART está no diretório
hybrid_files/service_accounts
, conforme explicado em Criar contas de serviço. - Abra o arquivo de modificações. Se a propriedade
connectAgent:enabled
não estiver definida como verdadeira ou estiver ausente, adicione ou atualize a estrofe a seguir.A estrofe do Apigee Connect precisa estar imediatamente presente na estrofe k8sCluster.
A configuração exige que você forneça o caminho para a chave da conta de serviço transferida por download. A chave precisa ser de uma conta de serviço com o papel do agente do 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
- Ative o recurso Apigee Connect para sua organização. O nome do recurso é
features.mart.connect.enabled
.- Localize a chave da conta de serviço com a função de Administrador da organização da Apigee que
você usou quando instalou o híbrido da Apigee, conforme descrito na seção
Ativar
acesso de sincronia. Esta é a conta de serviço
apigee-org-admin . Você precisa dessa chave para gerar um token necessário para fazer uma chamada de API, conforme explicado abaixo. - Execute estes dois comandos para receber um token:
export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file $ export TOKEN=$(gcloud auth application-default print-access-token)
Em que org-admin-service-account-file é o caminho no sistema para a chave da conta de serviço com o papel Administrador da organização da Apigee.
- Verifique se a Apigee Connect já está ativado:
curl https://apigee.googleapis.com/v1/organizations/your_org_name \ -H "Authorization: Bearer $TOKEN"
Procure nos resultados por:
"properties": { "property": [ { "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" } ] },
- Se os resultados não incluírem
features..mart.connect.enabled
definido comotrue
, chame a seguinte API Apigee para ativar a Apigee Connect para sua organização: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" } ] } }'
- Localize a chave da conta de serviço com a função de Administrador da organização da Apigee que
você usou quando instalou o híbrido da Apigee, conforme descrito na seção
Ativar
acesso de sincronia. Esta é a conta de serviço
- Inicie o agente do Apigee Connect no cluster.
Se você tiver feito alterações em qualquer uma das etapas acima, use o seguinte comando para iniciar o agente do Apigee Connect:
$APIGEECTL_HOME/apigeectl apply -f your_overrides_file.yaml --org
- Verifique o registro do Apigee Connect Agent. Se não houver erros relatados, o upgrade será bem-sucedido:
kubectl logs -n namespace apigee-connect-agent-pod-name
O Apigee Connect Agent informa as seguintes categorias de registro:
Categoria de registros de auditoria Operações DATA_READ ConnectionService.ListConnections
DATA_WRITE Tether.Egress
- Teste a instalação.
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.
Com esse upgrade, o plano do ambiente de execução híbrido se comunica com o plano de gerenciamento por meio do Apigee Connect.
Consulte também: Como remover o Apigee Connect.
Teste a instalação
- Abra a IU do híbrido da Apigee.
- Verifique se todos os desenvolvedores e aplicativos para desenvolvedores criados anteriormente estão presentes na IU. Como essas entidades são consultadas pelo servidor MART, elas estarão presentes somente se a comunicação entre os planos de gerenciamento e do ambiente de execução estiver configurada corretamente.
- Para garantir que as solicitações passem pelo Apigee Connect e não pela entrada MART, verifique o
registro do servidor MART. Você verá as entradas do agente do Apigee Connect chamado
apigee-connect-agent-1.0
:kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl --org | grep connect
Exemplo:
"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"
- Atualize seu token de autorização:
export TOKEN=$(gcloud auth application-default print-access-token)
- Chame a API Apigee para ver os streams disponíveis que se conectam com o 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 } ] }
- Verifique os registros do agente do Apigee Connect:
kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>
Os registros a seguir indicam que o agente do Apigee Connect foi iniciado e está se comunicando corretamente:
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 ...
- Na IU híbrida, crie um produto de API, um desenvolvedor e um aplicativo para desenvolvedores. Em seguida, faça várias chamadas de
API para um proxy.
Os registros do agente do Connect gerados durante o processamento das solicitações serão úteis para verificar a integridade ou os erros:
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 falha no agente do Connect devido a um erro de permissão do IAM negado, fazendo com que o agente falhe:
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.
Como remover o Apigee Connect
Se você excluir a implantação do Apigee Connect, o status do pod poderá permanecer no estado "Terminando" por até sete minutos. Esse tempo é esperado. Os agentes do Apigee Connect aguardam que as conexões atuais expirem, em vez de interrompê-las repentinamente. O atraso garante que solicitações em andamento não sejam perdidas.