Esta página aplica-se ao Apigee e ao Apigee Hybrid.
Veja a documentação do
Apigee Edge.
Como obter uma chave da API
O exemplo seguinte explica como obter uma chave da API que pode usar para validar chamadas da API para um serviço de destino encaminhado através do Apigee Adapter for Envoy.
1. Inicie sessão no Apigee
- Inicie sessão na IU do Apigee.
- Selecione a mesma organização que usou para aprovisionar o Apigee Adapter for Envoy.
2. Crie um programador
Pode usar um programador existente para testes ou criar um novo da seguinte forma:
- Selecione Publicar > Programadores no menu de navegação lateral.
- Clique em + Programador.
- Preencha a caixa de diálogo para criar um novo programador. Pode usar qualquer nome/email de programador que quiser.
3. Crie um produto de API
Siga o exemplo de criação de produtos fornecido abaixo.
- Selecione Publicar > Produtos de API no menu de navegação lateral.
- Clique em +CRIAR.
- Preencha a secção Detalhes do produto da seguinte forma. A tabela seguinte indica apenas os campos obrigatórios:
Campo Valor Descrição Nome httpbin-product
O nome exclusivo do produto API. Nome a apresentar httpbin product
O nome descritivo que quer ver na IU ou noutros contextos de apresentação. Acesso Public
Para efeitos deste exemplo, Público é uma boa escolha. - Na secção Operações, clique em +ADICIONAR UMA OPERAÇÃO.
- Na secção Origem, selecione Serviço remoto.
- Alterne o botão Origem para poder escrever manualmente o nome de um serviço remoto no campo Serviço remoto.
- No campo Serviço remoto, introduza o nome de um serviço remoto. Este é um serviço de destino para o qual o adaptador encaminha pedidos HTTP recebidos. Para fins de teste, use
httpbin.org
ouhttpbin.default.svc.cluster.local
com o Kubernetes. - Na secção Operation, introduza
/
para o caminho. Para informações sobre as opções de caminho, consulte o artigo Configurar caminhos de recursos. - Clique em GUARDAR para guardar a operação.
- Clique em GUARDAR para guardar o produto API.
Para mais informações, consulte o artigo Gerir produtos de API.
4. Crie uma app de programador
A app do programador contém a chave da API necessária para fazer chamadas de proxy da API através do adaptador.
- Selecione Publicar apps no menu de navegação lateral.
- Clique em + App.
- Preencha a secção Detalhes da app da seguinte forma. A tabela seguinte indica apenas os campos obrigatórios:
- Na secção Credenciais, clique em + Adicionar produto e selecione o produto que acabou de configurar: httpbin-product.
- Clique em Criar.
- Em Credenciais, clique em Mostrar junto à Chave.
- Copie o valor da chave do consumidor. Este valor é a chave da API
que vai usar para fazer chamadas à API para o serviço
httpbin
através do Apigee Adapter for Envoy.
Nome | httpbin-app
|
Programador | Selecione o programador que criou anteriormente ou escolha qualquer programador que pretender na lista. |
Usar a autenticação baseada em JWT
Pode usar um token JWT para fazer chamadas de proxy de API autenticadas em vez de usar uma chave da API. Esta
secção explica como usar o comando apigee-remote-service-cli token
para
criar, inspecionar e rodar tokens JWT. Para um ambiente híbrido do Apigee, pode usar este comando para criar um segredo do Kubernetes para armazenar os JWTs.
Vista geral
A validação e a autenticação JWT são processadas pelo Envoy através do respetivo filtro de autenticação JWT.
Após a autenticação, o filtro ext-authz
do Envoy envia os cabeçalhos do pedido e o JWT para apigee-remote-service-envoy
. Faz corresponder as reivindicações api_product_list
e scope
do JWT
aos produtos da API Apigee para o autorizar em relação ao destino do pedido.
Criar tokens JWT do Apigee
Os tokens JWT do Apigee podem ser criados através da CLI:
apigee-remote-service-cli token create -c config.yaml --id $KEY --secret $SECRET
Em alternativa, pode usar o ponto final do token OAuth padrão. Exemplo de curl:
curl https://org-env.apigee.net/remote-token/token -d '{"client_id":"myclientid","client_secret":"myclientsecret","grant_type":"client_credentials"}' -H "Content-type: application/json"
Usar o token JWT
Assim que tiver o token, basta transmiti-lo ao Envoy no cabeçalho de autorização. Exemplo:
curl localhost:8080/httpbin/headers -i -H "Authorization:Bearer $TOKEN"
Falha do token JWT
Rejeição do Envoy
Se o Envoy rejeitar o token, pode ver uma mensagem como:
Jwks remote fetch has failed
Se for o caso, certifique-se de que a configuração do Envoy contém um URI válido na secção remote_jwks
, que o Envoy consegue aceder ao mesmo e que definiu corretamente os certificados quando instalou o proxy do Apigee. Deve conseguir
chamar o URI diretamente com uma chamada GET e receber uma resposta JSON válida.
Exemplo:
curl https://myorg-eval-test.apigee.net/remote-service/certs
Outras mensagens da Envoy podem ter o seguinte aspeto:
- "Audiences in Jwt are not allowed" (Os públicos-alvo em JWT não são permitidos)
- "Jwt issuer is not configured" (O emissor de JWT não está configurado)
Estes são requisitos na sua configuração do Envoy que pode ter de modificar.
Inspecione um token
Pode usar a CLI para inspecionar o seu token. Exemplo
apigee-remote-service-cli -c config.yaml token inspect -f path/to/file
ou
apigee-remote-service-cli -c config.yaml token inspect <<< $TOKEN
Depuração
Consulte o artigo A chave da API válida falha.Usar o seu próprio fornecedor de identidade
Por predefinição, o Apigee Adapter for Envoy usa o proxy de API remote-token
como um serviço de fornecedor de identidade para autenticar aplicações cliente e fornecer tokens JWT com base no tipo de concessão de credenciais do cliente OAuth 2.0. No entanto, em alguns casos, pode não conseguir usar o proxy remote-token
.
Se tiver de usar um fornecedor de identidade que não seja o fornecido pelo Apigee, pode configurar o adaptador para usar outro fornecedor de identidade. Para ver detalhes sobre este exemplo de utilização do fornecedor de identidade não Apigee e a configuração necessária, consulte este artigo na comunidade do Apigee:
Usar o seu próprio fornecedor de identidade com o adaptador do Apigee Envoy.
Registo
Pode ajustar o nível de registo no serviço $REMOTE_SERVICE_HOME/apigee-remote-service-envoy. Todo o registo é enviado para stderr.
Elemento | Obrigatória | Descrição |
---|---|---|
-l, --log-level | Níveis válidos: debug, info, warn, error. | Ajusta o nível de registo. Predefinição: info |
-j, --json-log | Emite a saída do registo como registos JSON. |
O Envoy fornece registo. Para mais informações, consulte os seguintes links da documentação do Envoy:
Alterar o nome do segredo da política
Um segredo do Kubernetes implementado no cluster contém credenciais de que o adaptador precisa para autenticar a comunicação com o proxy do serviço remoto. Este segredo requer um ponto de montagem de volume, que é configurável. Por predefinição, o ponto de montagem é /policy-secret
.
Para alterar o ponto de montagem, siga estes passos:
- Execute este comando:
$REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/new-mount_point_name
Por exemplo:
$REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/my-mount-point
- Abra
$CLI_HOME/samples/apigee-envoy-adapter.yaml
num editor. - Altere o nome do ponto de montagem para o novo nome:
volumeMounts: - mountPath: /config name: apigee-remote-service-envoy readOnly: true - mountPath: /opt/apigee/tls name: tls-volume readOnly: true - mountPath: /my-mount-point name: policy-secret readOnly: true
- Guarde o ficheiro e aplique-o à malha de serviços:
kubectl apply -f $REMOTE_SERVICE_HOME/samples/apigee-envoy-adapter.yaml
Usar um proxy de rede
Pode inserir um proxy HTTP através das variáveis de ambiente HTTP_PROXY e HTTPS_PROXY no ambiente do ficheiro binário apigee-remote-service-envoy. Quando as usa, também pode usar a variável de ambiente NO_PROXY para excluir anfitriões específicos do envio através do proxy.
HTTP_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port] HTTPS_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port] NO_PROXY=127.0.0.1,localhost
Lembre-se de que o proxy tem de estar acessível a partir de apigee-remote-service-envoy.
Acerca das métricas e das estatísticas
Um ponto final de métricas do Prometheus está disponível em :5001/metrics
. Pode configurar este número de porta. Consulte o ficheiro de configuração.
Estatísticas do Envoy
Os links seguintes fornecem informações sobre como obter dados de estatísticas do proxy Envoy:
Estatísticas do Istio
Os links seguintes fornecem informações sobre como obter dados de estatísticas do proxy Envoy:
Apigee Analytics
O serviço remoto do Apigee para o Envoy envia estatísticas de pedidos para o Apigee para processamento de estatísticas. O Apigee comunica estes pedidos sob o nome do produto de API associado.
Para ver informações sobre as estatísticas do Apigee, consulte o artigo Vista geral dos serviços de estatísticas.
Suporte de ambiente multi-inquilino
Agora, pode ativar o adaptador para servir vários ambientes numa organização do Apigee. Esta funcionalidade permite-lhe usar um adaptador do Apigee para o Envoy associado a uma organização do Apigee para prestar serviços a vários ambientes. Antes desta alteração, um adaptador estava sempre associado a um ambiente do Apigee.
Para configurar o suporte de vários ambientes, altere o valor de tenant:env_name
para "*"
no ficheiro config.yaml
. Por exemplo:
- Abra o ficheiro
config.yaml
num editor. - Altere o valor de
tenant.env_name
para"*"
. Por exemplo:apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: remote_service_api: https://apitest.mydomain.net/remote-service org_name: my-org env_name: "*"" allow_unverified_ssl_cert: true analytics: collection_interval: 10s auth: jwt_provider_key: https://apitest.mydomain.net/remote-token/token
- Guarde o ficheiro.
- Aplique o ficheiro:
kubectl apply -f $CLI_HOME/config.yaml
Quando configura o modo de vários ambientes, também tem de configurar o Envoy para enviar um valor de ambiente adequado ao adaptador adicionando os seguintes metadados na secção virtual_hosts:routes
do ficheiro envoy-config.yaml
. Por exemplo:
- Gere o ficheiro
envoy-config.yaml
através da CLI. Por exemplo:$CLI_HOME/apigee-remote-service-cli samples create \ -t envoy-1.16 -c ./config.yaml --out myconfigs
- Abra o ficheiro gerado (denominado
envoy-config.yaml
). - Adicione os seguintes metadados na secção
virtual_host
ouroutes
do ficheiro:typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: test
O exemplo seguinte ilustra a configuração de um
virtual_host
com vários trajetos definidos, em que cada trajeto envia tráfego para um ambiente específico:filter_chains: - filters: - name: envoy.filters.network.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager stat_prefix: ingress_http route_config: virtual_hosts: - name: default domains: "*" routes: - match: { prefix: /test } route: cluster: httpbin typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: test - match: { prefix: /prod } route: cluster: httpbin typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: prod
- Repita o último passo para adicionar ambientes adicionais, conforme necessário.
- Guarde o ficheiro e aplique-o.
Capturar dados para relatórios personalizados
O adaptador suporta a transmissão de metadados do Envoy para a funcionalidade de captura de dados do Apigee, que envia dados capturados em variáveis que especificar para o Apigee Analytics para utilização em relatórios personalizados. Esta funcionalidade oferece uma capacidade semelhante à política de captura de dados do Apigee.
Para usar esta funcionalidade:
- Crie um recurso REST do coletor de dados.
- Defina variáveis de captura de dados através da API Apigee datacollectors.
- Se ainda não o fez, gere o ficheiro
envoy-config.yaml
através da CLI. Por exemplo:$CLI_HOME/apigee-remote-service-cli samples create \ -t envoy-1.16 -c ./config.yaml --out myconfigs
- Abra o ficheiro gerado (denominado
envoy-config.yaml
). - Use um filtro do Envoy para definir valores para as suas variáveis personalizadas no espaço de nomes
envoy.filters.http.apigee.datacapture
. Por exemplo, pode usar um filtro Cabeçalho para metadados ou um filtro Lua. Para mais informações sobre estes filtros, consulte os artigos Header-To-Metadata e Lua.Os nomes das variáveis personalizadas têm de estar formatados como
dc.XXXXX
.Exemplo de filtro de cabeçalho para metadados:
- name: envoy.filters.http.header_to_metadata typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.header_to_metadata.v3.Config request_rules: - header: "Host" on_header_present: metadata_namespace: envoy.filters.http.apigee.datacapture key: dc.host # host (without the prefix) also works type: STRING remove: false
Exemplo de filtro Lua:
- name: envoy.filters.http.lua typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua inline_code: | function envoy_on_request(request_handle) metadata = request_handle:streamInfo():dynamicMetadata() metadata:set("envoy.filters.http.apigee.datacapture", "dc.test", "A test string.") end
- Adicione o filtro pretendido ao ficheiro. Veja exemplos abaixo.
- Guarde o ficheiro e aplique-o.
Configurar mTLS entre o adaptador e o tempo de execução do Apigee
Pode fornecer certificados TLS do lado do cliente na secção tenant
do ficheiro config.yaml
do adaptador para usar o mTLS entre o adaptador e o tempo de execução do Apigee. Esta alteração aplica-se a todas as plataformas Apigee suportadas. Também ativa o mTLS para estatísticas
para a plataforma Apigee Edge for Private Cloud. Por exemplo:
tenant: tls: ca_file: path/ca.pem cert_file: path/cert.pem key_file: path/key.pem allow_unverified_ssl_cert: false