Exemplo de Envoy nativo para o Apigee e o híbrido

Esta página aplica-se ao Apigee e ao Apigee Hybrid.

Veja a documentação do Apigee Edge.

Este exemplo demonstra como usar o Apigee Adapter for Envoy instalando e executando o Envoy localmente e não num cluster do Kubernetes. Pode seguir o exemplo neste documento para instalações do Apigee e do Apigee Hybrid.

As chamadas de proxy da API passam pelo Envoy em execução como uma aplicação nativa. A Apigee fornece serviços de gestão de APIs, como a criação de produtos de API e apps para programadores. O Envoy comunica com o plano de gestão do Apigee através do serviço remoto do adaptador. O adaptador também envia dados de estatísticas para o Apigee, onde os pode ver no Apigee Analytics.

Pré-requisitos

Antes de começar:

Verifique a configuração do gcloud

  1. Verifique se a configuração do gcloud está definida para o projeto do Google Cloud associado à sua organização do Apigee.

    Para listar as definições atuais. Veja também gcloud config.

    gcloud config list

    Se necessário, defina o ID do projeto do Google Cloud correto com este comando:

    gcloud config set project project-id
  2. Tem de ter a autenticação com o SDK do Google Cloud (gcloud) para o seu projeto do Google Cloud. Veja também gcloud auth login.
    gcloud auth login

Aprovisione o Apigee

Neste passo, vai usar a CLI de serviço remoto para aprovisionar recursos do Apigee Adapter for Envoy no Apigee. O comando de aprovisionamento implementa proxies de API usados para operações do adaptador do Apigee, configura um certificado no Apigee e gera credenciais que o serviço remoto vai usar para se ligar em segurança do seu sistema ao Apigee.

  1. Aceda ao diretório $CLI_HOME:
    cd $CLI_HOME
  2. (Opcional) Por predefinição, o adaptador procura credenciais da conta de serviço predefinidas no seu projeto do Google Cloud para ter autorização para enviar dados de estatísticas para o Apigee. Se não quiser usar as credenciais da conta de serviço predefinidas, pode criar uma conta de serviço e referenciar a respetiva chave no comando de aprovisionamento. A conta de serviço tem de ter a função apigee.analyticsAgent. Para obter instruções, consulte o artigo Criar e gerir contas de serviço.
  3. Crie as seguintes variáveis de ambiente. Estas variáveis vão ser usadas como parâmetros para o script de aprovisionamento:
    export ORG=organization_name
    export ENV=environment_name
    export RUNTIME=host_alias_url
    export NAMESPACE=hybrid_runtime_namespace  ## Apigee hybrid only
    export AX_SERVICE_ACCOUNT=analytics_service_account  ## Optional

    Onde:

    Variável Descrição
    organization_name O nome da sua organização da Apigee.
    environment_name O nome de um ambiente na sua organização.
    host_alias_url
    • Para o Apigee Hybrid, um URL que inclui o hostAlias para um anfitrião virtual definido na sua configuração híbrida.
    • Para o Apigee, um nome de anfitrião do grupo de ambientes que inclui o ambiente. Pode encontrar grupos de ambientes na IU do Apigee em Administração > Ambientes > Grupos.
    • Nota: o URL tem de começar por https://. Por exemplo: https://apitest.mydomain.net

    hybrid_runtime_namepace (Apenas para o Apigee Hybrid) O espaço de nomes no qual os componentes do tempo de execução do Hybrid são implementados.

    Nota: o espaço de nomes predefinido para uma implementação híbrida é apigee.

    analytics_service_account (Opcional) O caminho para um ficheiro JSON da chave da conta de serviço do Google Cloud que tenha a função Apigee Analytics Agent. Para uma descrição detalhada deste parâmetro, consulte o artigo Comando Provision.
  4. Se não for proprietário do projeto do Google Cloud associado à organização do Apigee, certifique-se de que a sua conta de utilizador do Google Cloud inclui a função Administrador da organização do Apigee ou as funções Criador de APIs e Implementador. Consulte o artigo Conceder, alterar e revogar o acesso a recursos.
  5. Obtenha uma chave de acesso:
    TOKEN=$(gcloud auth print-access-token);echo $TOKEN
  6. Aprovisione o proxy de serviço remoto no Apigee. O resultado do comando é redirecionado para um ficheiro de configuração que vai usar num passo posterior.

    Se não estiver a fazer a atualização, use este comando para aprovisionar o Apigee. Se estiver a fazer o aprovisionamento para o Apigee hybrid, certifique-se de que adiciona o parâmetro --namespace $NAMESPACE:

    ./apigee-remote-service-cli provision --organization $ORG --environment $ENV \
         --runtime $RUNTIME --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml

    Se estiver a fazer uma atualização, use este comando com a flag --force-proxy-install para aprovisionar o Apigee. Se estiver a fazer o aprovisionamento para o Apigee hybrid, certifique-se de que adiciona o parâmetro --namespace $NAMESPACE:

    ./apigee-remote-service-cli provision --force-proxy-install --organization $ORG --environment $ENV \
         --runtime $RUNTIME --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml
  7. Verifique o conteúdo do ficheiro config.yaml. Deverá ter um aspeto semelhante a este:
    # Configuration for apigee-remote-service-envoy (platform: Google Cloud)
    # generated by apigee-remote-service-cli provision on 2020-11-20 02:49:28
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          remote_service_api: https://apitest.mydomain.com/remote-service
          org_name: my-org
          env_name: test
        analytics:
          collection_interval: 10s
        auth:
          jwt_provider_key: https://apitest.mydomain.com/remote-service/token
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-org-new-test-policy-secret
      namespace: apigee
    type: Opaque
    data:
      remote-service.crt: eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJhbGci...
      remote-service.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURS...
      remote-service.properties: a2lkPTIwMjAtMDctMDZ...
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-org-new-test-analytics-secret
      namespace: apigee
    type: Opaque
    data:
      client_secret.json: ewogICJ0eXBlIjogInNlcnZ...
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
  8. Se estiver a usar o Apigee Hybrid, aplique a configuração do serviço (o ficheiro gerado pelo comando de aprovisionamento) ao cluster onde o Apigee Hybrid foi instalado no Passo 1: crie um cluster.

Execução apigee-remote-service-envoy

Pode executar o serviço remoto como um ficheiro binário nativo ou no Docker.

Executar o serviço de forma nativa

Execute o ficheiro binário do serviço com o ficheiro de configuração gerado pelo comando de aprovisionamento:

$REMOTE_SERVICE_HOME/apigee-remote-service-envoy -c config_file_path/config.yaml

Execute o serviço no Docker

As imagens do Docker são publicadas com etiquetas de lançamento. Para esta instalação, use a versão mais recente. Existem três variações de imagens à sua escolha:

Variação Imagem
Google distroless google/apigee-envoy-adapter:v2.0.3
Ubuntu google/apigee-envoy-adapter:v2.0.3-ubuntu
Ubuntu com Boring Crypto google/apigee-envoy-adapter:v2.0.3-boring

Por exemplo, para executar a imagem de teste com o seu config.yaml local disponível como /config.yaml através de uma montagem de volume, use este comando:

docker run -v ./config.yaml:/config.yaml google/apigee-envoy-adapter:v2.0.3

Crie um ficheiro de configuração do Envoy de exemplo

Gere um ficheiro de configuração do Envoy de exemplo através da CLI:

  1. Certifique-se de que está no diretório $ENVOY_HOME.
  2. Liste os modelos de configuração disponíveis:
    $CLI_HOME/apigee-remote-service-cli samples templates
  3. Execute o comando samples. Para TEMPLATE, substitua um dos modelos do Envoy suportados:

    $CLI_HOME/apigee-remote-service-cli samples create --template TEMPLATE -c ./config.yaml

    O comando cria o ficheiro ./samples/envoy-config.yaml.

Para mais informações, consulte o artigo Comando de amostras.

Instale e execute o proxy Envoy

Siga estes passos para instalar e executar o proxy Envoy:

  1. Transfira um binário do Envoy ou crie-o.
  2. Execute o Envoy com um ficheiro de configuração de exemplo que gerou anteriormente para o serviço httpbin.org:
    envoy -c ./samples/envoy-config.yaml

Teste a instalação

  1. Configure um produto de API e obtenha uma chave da API, conforme explicado em Como obter uma chave da API.
  2. Chame o serviço httpbin sem uma chave da API:
    curl -i http://localhost:8080/headers -H "HOST:httpbin.org"
    

    O serviço está agora a ser gerido pela Apigee e, como não forneceu uma chave de API, a chamada devolve o seguinte erro.

    curl -i http://localhost:8080/headers -H "HOST:httpbin.org"
    HTTP/1.1 403 Forbidden
    date: Tue, 12 May 2020 17:51:36 GMT
    server: envoy
    content-length: 0
    x-envoy-upstream-service-time: 11
  3. Faça uma chamada API com a chave:
    export APIKEY=YOUR_API_KEY
    curl -i http://localhost:8080/headers -H "HOST:httpbin.org" -H "x-api-key: $APIKEY"

    A chamada deve ter êxito com um estado 200 e devolver uma lista de cabeçalhos na resposta. Por exemplo:

    curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS"
    HTTP/1.1 200 OK
    server: envoy
    date: Tue, 12 May 2020 17:55:34 GMT
    content-type: application/json
    content-length: 828
    access-control-allow-origin: *
    access-control-allow-credentials: true
    x-envoy-upstream-service-time: 301
    
    {
      "headers": {
        "Accept": "*/*",
        "Content-Length": "0",
        "Host": "httpbin.default.svc.cluster.local",
        "User-Agent": "curl/7.70.0-DEV",
        "X-Api-Key": "kyOTalNNLMPfOSy6rneclmVSL6pA2zS",
        "X-Apigee-Accesstoken": "",
        "X-Apigee-Api": "httpbin.default.svc.cluster.local",
        "X-Apigee-Apiproducts": "httpbin",
        "X-Apigee-Application": "httpbin",
        "X-Apigee-Authorized": "true",
        "X-Apigee-Clientid": "kyOTalNNLMPfOSy6rVeclmVSL6pA2zS",
        "X-Apigee-Developeremail": "user@mydomain.com",
        "X-Apigee-Environment": "test",
        "X-Apigee-Organization": "my-org",
        "X-Apigee-Scope": "",
        "X-B3-Parentspanid": "1476f9a2329bbdfa",
        "X-B3-Sampled": "0",
        "X-B3-Spanid": "1ad5c19bfb4bc96f",
        "X-B3-Traceid": "6f329a34e8ca07811476f9a2329bbdfa"
      }
    }

Desinstale o adaptador do Apigee Envoy

Para remover uma instalação do adaptador do Apigee Envoy:

  1. Onde quer que tenha optado por executar o adaptador do Envoy (nativamente ou no Docker), remova-o.
  2. Elimine os proxies remote-service e remote-token dos seus ambientes do Apigee. Consulte o artigo Eliminar um proxy de API.
  3. Remova todos os produtos API ou operações não usados pelos exemplos de utilização do adaptador Envoy. Consulte o artigo Eliminar um produto de API.

Passos seguintes

O tráfego da API para o serviço httpbin é agora gerido pela Apigee. Seguem-se algumas funcionalidades que pode explorar e experimentar:

  • Aceda ao Apigee Analytics na IU do Edge. Aceda a Analisar > Métricas da API > Desempenho do proxy da API.
  • Explore as opções da CLI na referência.