Apigee Connect

Questa sezione descrive l'utilizzo di Apigee Connect per la comunicazione tra il piano di gestione ibrido e il servizio MART nel piano di runtime.

Introduzione

Apigee Connect consente al piano di gestione ibrido Apigee di connettersi in modo sicuro al servizio MART nel piano di runtime senza che sia necessario esporre l'endpoint MART su internet. Se utilizzi Apigee Connect, non è necessario configurare il gateway in entrata MART con un alias host e un certificato DNS autorizzato.

Servizi principali in esecuzione sul piano di runtime ibrido che mostra Apigee Connect

Prerequisiti

Apigee hybrid 1.2.0. o versioni successive.

Aggiungi Apigee Connect al runtime ibrido

Apigee Connect è abilitato per impostazione predefinita per le nuove installazioni di Apigee hybrid versione 1.3.0 e successive. Pertanto, se esegui l'upgrade da una versione precedente, è molto probabile che tu debba eseguire questa procedura.

Quando Apigee Connect è configurato e abilitato, il traffico in entrata MART viene ignorato: il piano di gestione si connette solo a MART utilizzando Apigee Connect. Tutto il traffico MART tra il piano di runtime ibrido passa attraverso la connessione sicura di Apigee Connect.

Segui questi passaggi per abilitare e utilizzare Apigee Connect con Apigee hybrid:

  1. Abilita l'API Apigee Connect nella libreria API di Google Cloud. Puoi abilitare l'API nella console di Google Cloud (GCP) o con gcloud. Per istruzioni sull'abilitazione delle API nella console Google Cloud, consulta Passaggio 3: abilita le API. Per utilizzare gcloud al fine di abilitare l'API:
    1. Imposta il progetto attuale in gcloud sullo stesso progetto Google Cloud per cui è stato abilitato Apigee ed è stato eseguito il provisioning della tua organizzazione Apigee.
      $ gcloud config set project YOUR_GCP_PROJECT_ID

      Dove YOUR_GCP_PROJECT_ID è l'ID progetto.

    2. Controlla se l'API Apigee Connect è già abilitata:
      gcloud services list
      NAME                                 TITLE
      apigee.googleapis.com                Apigee API
      apigeeconnect.googleapis.com         Apigee Connect API
      bigquery.googleapis.com              BigQuery API
      
      ...
    3. Se i risultati non includono apigeeconnect.googleapis.com, abilita l'API:
      $ gcloud services enable apigeeconnect.googleapis.com
  2. Aggiungi il ruolo Agente Apigee Connect all'account di servizio MART che hai creato nel passaggio Creare account di servizio nelle istruzioni per l'installazione di Apigee Connect:
    1. Se necessario, recupera l'indirizzo email del tuo account di servizio MART:
      gcloud iam service-accounts list
      NAME                          EMAIL                                                 DISABLED
      apigee-mart                   apigee-mart@hybrid-example.iam.gserviceaccount.com       False
      
      ...
    2. Controlla se all'account di servizio MART è già stato assegnato il ruolo:
      gcloud projects get-iam-policy YOUR_GCP_PROJECT_ID
      ...
      
      - members:
        - serviceAccount:apigee-mart@hybrid-example.iam.gserviceaccount.com
        role: roles/apigeeconnect.Agent
      
      ...
    3. Se i risultati non includono role: roles/apigeeconnect.Agent, assegna il ruolo:
      gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT_ID \
      --member serviceAccount:YOUR_MART_SERVICE_ACCOUNT_EMAIL --role roles/apigeeconnect.Agent

      Dove YOUR_GCP_PROJECT_ID è l'ID del progetto Google Cloud e YOUR_MART_SERVICE_ACCOUNT_EMAIL è l'indirizzo email dell'account di servizio MART.

    Il ruolo di Agente Apigee Connect è predefinito e dispone della seguente autorizzazione assegnata:

    Autorizzazione Descrizione
    apigeeconnect.endpoints.connect Questa è l'autorizzazione per configurare l'agente Apigee Connect.

    Per maggiori dettagli sull'assegnazione delle autorizzazioni di accesso tramite la console Google Cloud o le API, vedi:

  3. Assicurati che il file di chiavi dell'account di servizio MART si trovi nella directory hybrid_files/service_accounts, come spiegato in Creare account di servizio.
  4. Apri il file di override. Se la proprietà connectAgent:enabled non è impostata su true o non è presente, aggiungi o aggiorna la stanza seguente.

    La stanza Apigee Connect deve seguire immediatamente la stanza k8sCluster.

    La configurazione richiede che tu fornisca il percorso della chiave dell'account di servizio scaricata. La chiave deve essere relativa all'account di servizio con il ruolo di agente 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. Abilita la funzionalità Apigee Connect per la tua organizzazione. Il nome della funzionalità è features.mart.connect.enabled.
    1. Individua la chiave dell'account di servizio con il ruolo Amministratore organizzazione Apigee che hai utilizzato quando hai installato inizialmente Apigee hybrid come descritto nella sezione Abilitare l'accesso del sincronizzatore. Questo è l'account di servizio apigee-org-admin. Avrai bisogno di questa chiave per generare il token necessario per effettuare una chiamata API, come spiegato di seguito.
    2. Esegui questi due comandi per ricevere un token:
      export GOOGLE_APPLICATION_CREDENTIALS=org-admin-service-account-file
      $ export TOKEN=$(gcloud auth application-default print-access-token)

      Dove org-admin-service-account-file è il percorso sul sistema alla chiave dell'account di servizio con il ruolo Amministratore organizzazione Apigee.

    3. Controlla se Apigee Connect è già abilitato:
      curl  https://apigee.googleapis.com/v1/organizations/your_org_name \
        -H "Authorization: Bearer $TOKEN"

      Cerca nei risultati per:

        "properties": {
          "property": [
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
          ]
        },
    4. Se i risultati non includono features..mart.connect.enabled impostato su true, chiama la seguente API Apigee per abilitare Apigee Connect per la tua organizzazione:
      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. Avvia l'agente Apigee Connect nel cluster.

    Se hai apportato modifiche ai passaggi precedenti, utilizza il comando seguente per avviare l'agente 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. Controlla il log dell'agente Apigee Connect. Se non sono presenti errori, l'upgrade è riuscito:
    kubectl logs -n namespace apigee-connect-agent-pod-name

    L'agente Apigee Connect segnala le seguenti categorie di log:
    Categoria di audit log Suite operativa
    DATA_READ ConnectionService.ListConnections
    DATA_WRITE Tether.Egress
    Per assistenza sulla visualizzazione degli audit log in Apigee hybrid, consulta Informazioni sugli audit log.
  9. Con questo upgrade, il piano di runtime ibrido comunica con il piano di gestione tramite Apigee Connect.

  10. Verifica l'installazione.

Vedi anche: Rimuovere Apigee Connect.

Testa l'installazione

  1. Apri l'UI ibrida di Apigee.
  2. Verifica che tutte le app per sviluppatori e sviluppatori che hai creato in precedenza siano presenti nell'interfaccia utente. Poiché le query su queste entità vengono eseguite dal server MART, saranno presenti solo se la comunicazione tra il piano di gestione e il piano di runtime è configurata correttamente.
  3. Per assicurarti che le richieste passino attraverso Apigee Connect e non attraverso il Ingress MART, controlla il log del server MART. Dovresti visualizzare le voci per l'agente Apigee Connect denominato apigee-connect-agent-1.0:
    kubectl logs -n apigee apigee-mart-orgname-rc101-q72tl --org | grep connect

    Ad esempio:

    "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. Aggiorna il token di autorizzazione:
    export TOKEN=$(gcloud auth application-default print-access-token)
  5. Chiama l'API Apigee per visualizzare i flussi disponibili che si connettono all'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. Controlla i log dell'agente Apigee Connect:
    kubectl logs -n namespace apigee-connect-agent-YOUR_GCP_PROJECT_ID-<....>

    I log seguenti indicano che l'agente Apigee Connect è stato avviato e comunica correttamente:

    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. Nella UI ibrida, crea un prodotto API, un'app sviluppatore e un'app sviluppatore, quindi effettua diverse chiamate API a un proxy.

    I log dell'agente Connect generati durante l'elaborazione delle richieste sono utili per verificare l'integrità o gli errori:

    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

    Log causati da un errore dell'agente Connect dovuto a un errore di autorizzazione IAM negata che abbia causato l'arresto anomalo dell'agente:

    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.

Rimozione di Apigee Connect in corso...

Se elimini il deployment di Apigee Connect, lo stato del pod può rimanere in stato "Terminazione" per un massimo di sette minuti. Questo periodo di tempo è previsto. Gli agenti Apigee Connect attendono la scadenza delle connessioni esistenti invece di arrestarle improvvisamente. Il ritardo garantisce che le richieste in corso non vengano perse.