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 com uma implementação híbrida do Apigee.
Pré-requisitos
Antes de começar: |
---|
|
|
|
Vista geral
Este exemplo explica como usar o Apigee Adapter for Envoy com o Apigee hybrid. Neste exemplo, vai implementar um serviço HTTP simples no mesmo cluster do Kubernetes onde o Apigee hybrid está implementado. Em seguida, configura o Apigee Adapter for Envoy para gerir chamadas API para este serviço com o Apigee.
A figura seguinte mostra a arquitetura básica da integração do Apigee Hybrid:
Um proxy Envoy é implementado com o serviço HTTP de destino como um sidecar do Istio na malha de serviços do Istio. O sidecar processa o tráfego da API de e para o serviço de destino e comunica com o serviço remoto. O Serviço Comando também comunica com o plano de gestão híbrido para obter informações sobre o produto API e o proxy.
Verifique a configuração do gcloud
- Verifique se a configuração do
gcloud
está definida para o projeto do GCP associado à sua organização híbrida.Para listar as definições atuais:
gcloud config list
Se necessário, defina o ID do projeto da GCP correto com este comando:
gcloud config set project project-id
- Tem de ter a autenticação com o Google Cloud SDK (gcloud) para o seu projeto do GCP:
gcloud auth login
Aprovisione o Apigee Hybrid
Neste passo, vai usar a CLI de serviço remoto para aprovisionar o híbrido com o proxy de API remote-service
. O comando de aprovisionamento também configura um certificado no
Apigee e gera credenciais que o serviço remoto vai usar para estabelecer ligação segura ao Apigee.
- Aceda ao diretório
$CLI_HOME
:cd $CLI_HOME
- Se não for proprietário do projeto do GCP associado à organização híbrida do Apigee,
certifique-se de que a sua conta de utilizador do GCP inclui a função
Apigee Organization Admin
. Consulte o artigo Conceder, alterar e revogar o acesso a recursos. - Execute este comando para obter uma chave de acesso:
TOKEN=$(gcloud auth print-access-token);echo $TOKEN
- 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
Onde:
Variável Descrição organization_name O nome da organização da Apigee para a sua instalação do Apigee Hybrid. environment_name O nome de um ambiente na sua organização do Apigee Hybrid. host_alias_url Um URL que inclui o hostAlias
para um anfitrião virtual definido na sua configuração híbrida. O URL tem de começar porhttps://
. Por exemplo:https://apitest.apigee-hybrid-docs.net
hybrid_runtime_namepace O espaço de nomes no qual os componentes do tempo de execução híbrido são implementados. Nota: o espaço de nomes predefinido para uma implementação híbrida é apigee
. - Execute o seguinte comando para aprovisionar o proxy de serviço remoto para o Apigee hybrid:
Se não estiver a fazer a atualização, use este comando para aprovisionar o Apigee:
./apigee-remote-service-cli provision --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --token $TOKEN > config.yaml
Se estiver a fazer uma atualização, use este comando com a flag
--force-proxy-install
para aprovisionar o Apigee:./apigee-remote-service-cli provision --force-proxy-install --organization $ORG --environment $ENV \ --runtime $RUNTIME --namespace $NAMESPACE --token $TOKEN > config.yaml
- Verifique o conteúdo do ficheiro
config.yaml
. Deverá ter um aspeto semelhante a este:# Configuration for apigee-remote-service-envoy # generated by apigee-remote-service-cli provision on 2020-07-06 18:03:58 apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: remote_service_api: https://apitest.apigee-hybrid-docs.net/remote-service org_name: hybrid-docs env_name: envoy allow_unverified_ssl_cert: true analytics: collection_interval: 10s fluentd_endpoint: apigee-udca-hybrid-docs-envoy.apigee:20001 tls: ca_file: /opt/apigee/tls/ca.crt key_file: /opt/apigee/tls/tls.key cert_file: /opt/apigee/tls/tls.crt --- apiVersion: v1 kind: Secret metadata: name: hybrid-docs-envoy-policy-secret namespace: apigee type: Opaque data: remote-service.crt: eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJhbGci... remote-service.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURS... remote-service.properties: a2lkPTIwMjAtMDctMDZ...
- Aplique a configuração do serviço (o ficheiro gerado pelo comando de aprovisionamento) ao cluster:
kubectl apply -f $CLI_HOME/config.yaml
- Valide o proxy e o certificado. O seguinte deve devolver um JSON válido:
curl -i $RUNTIME/remote-service/certs
O resultado tem um aspeto semelhante a este:
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kid": "2020-05-11T11:32:26-06:00", "kty": "RSA", "n": "0v-nbTQyAmtVZ-wZRP0ZPIbrVaX91YO9JZ9xCQPb4mOdOSS7yKfTDJGg0KM130sGVYBvR76alN8 fhrrSDEG5VXG8YYMqPXarwRC7MRJWocCQ_ECYrjDD0_Q018M2HyXZYSd8fhAogi9mVUYsEmCKqJH53Dh1 jqsHOQzBLKsX0iDO9hEZNFtjbX0UCbSxsUlmBCub7Uj2S-PahA6DEQOMhQjZM7bBMtkTMpFmaJ_RZTmow BHP57qMna17R8wHD4kUsO2u_-3HHs5PSj1NrEYoVU2dwLQw0GlkB__ZWeFgXTqot81vb-PmoM9YxwoZrm TcHdljugWy_s7xROPzTod0uw" } ] }
Crie ficheiros de configuração de amostra
Use o comando apigee-remote-service-cli samples create
para gerar ficheiros de configuração de exemplo.
Para este exemplo, precisa destes ficheiros gerados:
httpbin.yaml
– Uma configuração de implementação para um serviço HTTP.apigee-envoy-adapter.yaml
: uma configuração de implementação para o serviço remoto do Envoy.envoyfilter-sidecar.yaml
- Uma configuração que instala um EnvoyFilter. para o espaço de nomes predefinido.
Para gerar os exemplos:
- Aceda ao diretório
$CLI_HOME
. Execute este comando para gerar os ficheiros:
./apigee-remote-service-cli samples create -c ./config.yaml
Os seguintes ficheiros são enviados para o diretório
./samples
:ls samples apigee-envoy-adapter.yaml envoyfilter-sidecar.yaml httpbin.yaml request-authentication.yaml
Para mais informações, consulte o artigo Comando de amostras.
Implemente um serviço de teste no cluster
Neste passo, vai implementar um serviço de teste de pedido/resposta HTTP simples no mesmo cluster onde o Apigee hybrid está implementado.
- Ative a injeção do Istio no espaço de nomes
default
do cluster. Num passo posterior, vai implementar um sidecar do Envoy neste mesmo cluster. A ativação da injeção do Istio torna a implementação do sidecar possível. Este exemplo usa o espaço de nomesdefault
e todas as instruções subsequentes partem do princípio de que é este o caso.kubectl label namespace default istio-injection=enabled
- Aplique o serviço simples
httpbin
ao cluster no espaço de nomes predefinido:kubectl apply -f $CLI_HOME/samples/httpbin.yaml
- Agora, teste o serviço. Inicie um serviço
curl
em execução no cluster e abra um terminal:kubectl run -it curl --image=curlimages/curl --restart=Never -- sh
- Teste o serviço chamando-o a partir do interior do cluster:
curl -i httpbin.default.svc.cluster.local/headers
Em caso de êxito, é apresentado o estado 200 e o serviço devolve uma lista de cabeçalhos. Por exemplo:
HTTP/1.1 200 OK server: envoy date: Tue, 12 May 2020 17:09:01 GMT content-type: application/json content-length: 328 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 7 { "headers": { "Accept": "*/*", "Content-Length": "0", "Host": "httpbin.default.svc.cluster.local", "User-Agent": "curl/7.70.0-DEV", "X-B3-Parentspanid": "69f88bc3e322e157", "X-B3-Sampled": "0", "X-B3-Spanid": "8dd725f30e393d8b", "X-B3-Traceid": "38093cd817ad30a569f88bc3e322e157" } }
Execute o serviço remoto para o Envoy
Neste passo, inicia o serviço remoto para o cliente do Envoy na malha de serviços onde o Apigee hybrid está instalado. Este serviço fornece os pontos finais aos sidecars do Istio que
estão instalados nos serviços de destino. Também instala um sidecar com o serviço httpbin
.
- Aplique o serviço remoto do Apigee à malha de serviços:
kubectl apply -f $CLI_HOME/samples/apigee-envoy-adapter.yaml
- Aplique o
EnvoyFilter
aos sidecars do Istio no espaço de nomes predefinido. OEnvoyFilter
permite que o sidecar comunique com o serviço remoto do Apigee.httpbin
kubectl apply -f $CLI_HOME/samples/envoyfilter-sidecar.yaml
Teste a instalação
- Agora, volte à shell curl que abriu no passo
Implemente um serviço de teste no cluster e chame o serviço
httpbin
:curl -i httpbin.default.svc.cluster.local/headers
O serviço está agora a ser gerido pela Apigee e, como não forneceu uma chave de API, devolve o seguinte erro.
curl -i httpbin.default.svc.cluster.local/headers 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
- Configure um produto de API e obtenha uma chave da API, conforme explicado em Como obter uma chave da API.
- Faça uma chamada API com a chave:
export APIKEY=YOUR_API_KEY
curl -i httpbin.default.svc.cluster.local/headers -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": "kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS", "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": "kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS", "X-Apigee-Developeremail": "jdoe@example.com", "X-Apigee-Environment": "envoy", "X-Apigee-Organization": "acme-org", "X-Apigee-Scope": "", "X-B3-Parentspanid": "1476f9a2329bbdfa", "X-B3-Sampled": "0", "X-B3-Spanid": "1ad5c19bfb4bc96f", "X-B3-Traceid": "6f329a34e8ca07811476f9a2329bbdfa" } }
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:
- Se configurou o seu produto de API conforme explicado em
Como obter uma chave da API,
o limite de quota foi definido como 5 pedidos por minuto. Experimente chamar o serviço
httpbin
mais algumas vezes para acionar a quota. Quando a quota se esgota, é devolvido um erro de estado HTTP 403. - Aceda ao Apigee Analytics na IU do Apigee. Aceda a Analisar > Métricas da API > Desempenho do proxy da API.
- Gere e use tokens JWT para autenticar chamadas API.
- Use a CLI para gerir, criar tokens e controlar associações. Para ver detalhes da CLI, consulte a referência.