Apigee Connect

Esta secção descreve a utilização do Apigee Connect para a comunicação entre o plano de gestão híbrido e o serviço MART no plano de tempo de execução.

Introdução

O Apigee Connect permite que o plano de gestão híbrido do Apigee se ligue de forma segura ao serviço MART no plano de tempo de execução sem que tenha de expor o ponto final MART na Internet. Se usar o Apigee Connect, não precisa de configurar o gateway de entrada MART com um alias de anfitrião e um certificado DNS autorizado.

Serviços principais executados no plano de tempo de execução híbrido que mostram o Apigee Connect

Pré-requisitos

Apigee Hybrid 1.2.0 ou mais recente.

Adicione o Apigee Connect ao tempo de execução híbrido

O Apigee Connect está ativado por predefinição para novas instalações da versão 1.3.0 e mais recentes do Apigee Hybrid. Por conseguinte, é mais provável que precise destes passos se estiver a fazer uma atualização a partir de uma versão mais antiga.

Quando o Apigee Connect está configurado e ativado, a entrada do MART é ignorada: o plano de gestão liga-se apenas ao MART através do Apigee Connect. Todo o tráfego MART entre o plano de tempo de execução híbrido passa através da ligação segura do Apigee Connect.

Siga estes passos para ativar e usar o Apigee Connect com o Apigee hybrid:

  1. Ative a API Apigee Connect na biblioteca de APIs Google Cloud. Pode ativar a API na consola do Google Cloud (GCP) ou com gcloud. Para obter instruções sobre como ativar APIs na Google Cloud Console, consulte o Passo 3: ative as APIs. Para usar o gcloud para ativar a API:
    1. Defina o projeto atual no gcloud para o mesmo projeto do GCP para o qual o Apigee foi ativado e a sua organização do Apigee foi aprovisionada.
      $ gcloud config set project YOUR_GCP_PROJECT_ID

      Em que YOUR_GCP_PROJECT_ID é o ID do projeto.

    2. 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
      
      ...
    3. Se os resultados não incluírem apigeeconnect.googleapis.com, ative a API:
      $ gcloud services enable apigeeconnect.googleapis.com
  2. Adicione a função Agente do Apigee Connect à conta de serviço MART que criou no passo Criar contas de serviço nas instruções de instalação do Apigee híbrido:
    1. Se precisar, obtenha o endereço de email da sua conta de serviço do MART:
      gcloud iam service-accounts list
      NAME                          EMAIL                                                 DISABLED
      apigee-mart                   apigee-mart@hybrid-example.iam.gserviceaccount.com       False
      
      ...
    2. Verifique se a conta de serviço do MART já tem a função atribuída:
      gcloud projects get-iam-policy YOUR_GCP_PROJECT_ID
      ...
      
      - members:
        - serviceAccount:apigee-mart@hybrid-example.iam.gserviceaccount.com
        role: roles/apigeeconnect.Agent
      
      ...
    3. Se os resultados não incluírem role: roles/apigeeconnect.Agent, atribua a função:
      gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID \
      --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent

      Onde YOUR_GCP_PROJECT_ID é o ID do seu projeto do GCP, e YOUR_MART_SERVICE_ACCOUNT_EMAIL é o endereço de email da conta de serviço do MART.

    A função Agente do Apigee Connect está predefinida e tem a seguinte autorização atribuída:

    Autorização Descrição
    apigeeconnect.endpoints.connect Esta é a autorização para configurar o agente do Apigee Connect.

    Para ver detalhes sobre a atribuição de autorizações de acesso através da consola do GCP ou das APIs, consulte:

  3. Certifique-se de que o ficheiro de chave da conta de serviço do MART está no diretório hybrid_files/service_accounts, conforme explicado em Crie contas de serviço.
  4. Abra o ficheiro de substituições. Se a propriedade connectAgent:enabled não estiver definida como verdadeira ou estiver em falta, adicione ou atualize a seguinte secção.

    A secção Apigee Connect tem de seguir imediatamente a secção k8sCluster.

    A configuração requer que indique o caminho para a chave da conta de serviço transferida. A chave tem de ser para a conta de serviço com a função 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
  5. Ative a funcionalidade Apigee Connect para a sua organização. O nome da funcionalidade é features.mart.connect.enabled.
    1. Localize a chave da conta de serviço com a função Apigee Organization Admin que usou quando instalou originalmente o Apigee híbrido, conforme descrito na secção Ativar o acesso do sincronizador. Esta é a conta de serviço apigee-org-admin. Precisa desta chave para gerar um token necessário para fazer uma chamada à API, conforme explicado abaixo.
    2. Execute estes dois comandos para obter um token:
      export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file
      $ export TOKEN=$(gcloud auth application-default print-access-token)

      Onde org-admin-service-account-file é o caminho no seu sistema para a chave da conta de serviço com a função Administrador da organização do Apigee.

    3. Verifique se o Apigee Connect já está ativado:
      curl  https://apigee.googleapis.com/v1/organizations/your_org_name \
        -H "Authorization: Bearer $TOKEN"

      Procure nos resultados:

        "properties": {
          "property": [
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
          ]
        },
    4. Se os resultados não incluírem features..mart.connect.enabled definido como true, chame a seguinte API Apigee para ativar o Apigee Connect para a 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"
          } ]
        }
      }'

  6. Inicie o agente do Apigee Connect no cluster.

    Se fez alterações em qualquer um dos passos acima, use o seguinte comando para iniciar o agente do 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. Verifique o registo do agente do Apigee Connect. Se não forem comunicados erros, a atualização foi bem-sucedida:
    kubectl logs -n namespace apigee-connect-agent-pod-name

    O agente do Apigee Connect comunica as seguintes categorias de registos:
    Categoria de registos de auditoria Operações
    DATA_READ ConnectionService.ListConnections
    DATA_WRITE Tether.Egress
    Para receber ajuda na visualização de registos de auditoria no Apigee Hybrid, consulte as informações de registo de auditoria.
  9. Com esta atualização, o plano de tempo de execução híbrido comunica com o plano de gestão através do Apigee Connect.

  10. Teste a instalação.

Veja também: Remover o Apigee Connect.

Teste a instalação

  1. Abra a IU do Apigee Hybrid.
  2. Verifique se os programadores e as apps de programador que criou anteriormente estão presentes na IU. Uma vez que estas entidades são consultadas a partir do servidor MART, só estão presentes se a comunicação entre os planos de gestão e de tempo de execução estiver configurada corretamente.
  3. Para se certificar de que os pedidos estão a passar pelo Apigee Connect e não pela entrada do MART, verifique o registo do servidor do MART. Deverá ver entradas para o agente do Apigee Connect denominado apigee-connect-agent-1.0:
    kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl --org | grep connect

    Por 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"
  4. Atualize o token de autorização:
    export TOKEN=$(gcloud auth application-default print-access-token)
  5. Chame a API Apigee para ver as streams disponíveis que se ligam ao ponto final 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. Verifique os registos do agente do Apigee Connect:
    kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>

    Os seguintes registos indicam que o agente do Apigee Connect foi iniciado e está a comunicar corretamente:

    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
    
    ...
  7. Na IU híbrida, crie um produto API, um programador e uma app de programador. Em seguida, faça várias chamadas API a um proxy.

    Os registos do agente de ligação gerados durante o processamento de pedidos são úteis para ver o estado 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

    Registos causados pela falha do agente Connect devido ao erro de autorização de IAM negada, o que faz 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.

Remover o Apigee Connect

Se eliminar a implementação do Apigee Connect, o estado do pod pode permanecer no estado "A terminar" durante até sete minutos. Este período é o esperado. Os agentes do Apigee Connect aguardam que as ligações existentes expirem em vez de as interromperem subitamente. O atraso garante que os pedidos em curso não são perdidos.