Você está lendo a documentação do Apigee Edge.
Acesse a
documentação da Apigee X. info
Como adicionar um plug-in personalizado
É possível adicionar novos recursos e funcionalidades ao microgateway escrevendo plug-ins personalizados. Os plug-ins personalizados permitem interagir programaticamente com as solicitações e respostas que fluem pelo microgateway.
Esta seção explica como empacotar e implantar plug-ins em uma instância do Edge Microgateway em execução no cluster do Kubernetes.
O restante desta seção pressupõe que você esteja familiarizado com a criação e configuração de plug-ins para uma configuração padrão do Edge Microgateway. Caso contrário, consulte Desenvolver plug-ins personalizados.
Empacotar seus plug-ins
Para empacotar plug-ins personalizados, siga estas etapas:
Crie e teste o plug-in de acordo com as instruções em Escrever um plug-in simples.
Coloque o código do plug-in na estrutura de diretório adequada. Os diretórios de plug-ins precisam seguir uma estrutura definida. O exemplo a seguir mostra a estrutura que você precisa seguir, em que
response-uppercaseerequest-headerssão os nomes das pastas que contêm o código do plug-in personalizado. Esses nomes são apenas exemplos, e os nomes das pastas podem ser diferentes:plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsoncdpara a pastaplugin.Na pasta
plugin, compacte toda a pastaplugins:zip -r plugins.zip plugins/
Criar uma imagem Docker
- No mesmo diretório em que o arquivo ZIP está localizado, crie um novo arquivo chamado
Dockerfile. Adicione o código a seguir ao
Dockerfilee salve o arquivo:FROM gcr.io/apigee-microgateway/edgemicro:latest RUN apt-get install unzip COPY plugins.zip /opt/apigee/ RUN chown apigee:apigee /opt/apigee/plugins.zip RUN su - apigee -c "unzip /opt/apigee/plugins.zip -d /opt/apigee" EXPOSE 8000 EXPOSE 8443 ENTRYPOINT ["entrypoint"]Crie uma nova imagem Docker do Edge Microgateway com seus plug-ins e envie a imagem para o registro do Docker. Você pode usar qualquer registro que quiser, como
docker.ioougcr.io:docker build -t edgemicroplugins .docker tag edgemicroplugins container-registry/your-project/edgemicropluginsdocker push container-registry/your-project/edgemicropluginsExemplo:
docker build -t edgemicroplugins .docker tag edgemicroplugins gcr.io/my-project/edgemicropluginsdocker push gcr.io/my-project/edgemicroplugins
Atualizar a configuração do Edge Microgateway
Adicione os plug-ins ao arquivo de configuração do Edge Microgateway. Você pode encontrar o arquivo de configuração aqui:
$HOME/.edgemicro/org-env-config.yaml
Exemplo:
$HOME/.edgemicro/myorg-test-config.yaml
Na configuração de exemplo a seguir, o plug-in personalizado response-uppercase foi adicionado.
O plug-in oauth já estava lá por padrão.
edgemicro:
...
plugins:
sequence:
- oauth
- response-uppercase
Atualizar o cluster do Kubernetes
A etapa final é aplicar a mudança de configuração ao cluster do Kubernetes. O Kubernetes vai extrair a nova imagem com o código do plug-in que você enviou para o registro de contêiner e usá-la para todos os pods recém-criados.
Se você implantou o Edge Microgateway como um serviço
Use o comando edgemicroctl para injetar a configuração atualizada do Edge Microgateway:
Atualize a implantação do Edge Microgateway com a nova imagem. Exemplo:
kubectl apply -f <(edgemicroctl -org=your_organization -env=your_environment -key=configuration_key -sec=configuration_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest)
em que:
your_organization: a organização do Apigee especificada no comandoedgemicro configure.your_environment: o ambiente especificado no comandoedgemicro configure.configuration_key: a chave retornada do comandoedgemicro configure.configuration_secret- o secret retornado do comandoedgemicro configure.config_file_path- o caminho para o arquivo de configuração do Edge Micro retornado do comandoedgemicro configure.container-registry: o registro do Docker em que você enviou a imagem. Por exemplo,gcr.iooudocker.io.your_project_name: o nome do projeto do repositório do Docker em que você enviou a imagem Docker.image_name: o nome da imagem Docker que você enviou.
Exemplo:
kubectl apply -f <(edgemicroctl -org=jdoe -env=test -key=f2d2eaa52b758493d00cec656e574ac947bee1d701c5c5f3295e5eaa39a3b -sec=0c38cda3fac6c59152f15657052ba1728f8003c1a763cf08da2a -conf=/Users/jdoe/.edgemicro/apigeesearch-test-config.yaml -img=gcr.io/jdoe-project/edgemicroplugins:latest)
Teste o plug-in. Chame a API para verificar se você recebe o comportamento esperado. Por exemplo, para o plug-in "response uppercase", o texto de resposta é convertido para letras maiúsculas, conforme mostrado abaixo:
curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'
Saída:
HELLO WORLD
Como injetar manualmente a nova configuração
A injeção manual é uma abordagem direta em que você injeta a nova configuração na linha de comando.
Execute o seguinte comando:
kubectl apply -f <(edgemicroctl -org=your_org -env=your_env -key=your_key -sec=your_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest -svc=service_deployment_file)
em que:
your_org: a organização do Apigee especificada no comandoedgemicro configure.your_env: o ambiente especificado no comandoedgemicro configure.your_key: a chave retornada do comandoedgemicro configure.your_secret: o secret retornado do comandoedgemicro configure.config_file_path- o caminho para o arquivo de configuração do Edge Micro retornado do comandoedgemicro configure.container-registry: o registro do Docker em que você enviou a imagem. Por exemplo,gcr.iooudocker.io.your_project_name: o nome do projeto do repositório do Docker em que você enviou a imagem Docker.image_name: o nome da imagem Docker que você enviou.service_deployment_file- o caminho para o arquivo de implantação do serviço ao qual os plug-ins serão aplicados. Por exemplo:samples/helloworld/helloworld.yaml.
Exemplo:
kubectl apply -f <(edgemicroctl -org=myorg -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/jdoe/.edgemicro/myorg-test-config.yaml -img=gcr.io/myproject/edgemicroplugins:latest -svc=samples/helloworld/helloworld.yaml)
Teste o plug-in. Chame a API de serviço para verificar se você recebe o comportamento esperado. Por exemplo, para o plug-in "response uppercase", o texto de resposta é convertido para letras maiúsculas, conforme mostrado abaixo:
curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'
Saída:
HELLO WORLD
Como fazer mudanças na configuração do Edge Microgateway
Em alguns casos, talvez seja necessário modificar a configuração do Edge Microgateway. Por exemplo, você pode adicionar um novo plug-in ao Edge Microgateway ou mudar um parâmetro de configuração. Esta seção explica como fazer e aplicar mudanças de configuração ao Edge Microgateway em execução no Kubernetes.
Crie um arquivo de configuração
secret.yaml, conforme mostrado abaixo:apiVersion: v1 kind: Secret metadata: name: mgwsecret type: Opaque data: mgorg: EDGEMICRO_ORG mgenv: EDGEMICRO_ENV mgkey: EDGEMICRO_KEY mgsecret: EDGEMICRO_SECRET mgconfig: EDGEMICRO_CONFIGEspecifique o valor codificado em Base64 de
EDGEMICRO_ORG,EDGEMICRO_ENV,EDGEMICRO_KEY,EDGEMICRO_SECRET:echo -n "your-org" | base64 | tr -d '\n'echo -n "your-org-env" | base64 | tr -d '\n'echo -n "your-mg-key" | base64 | tr -d '\n'echo -n "your-mg-secret" | base64 | tr -d '\n'Faça as mudanças no arquivo de configuração do Edge Microgateway para sua organização e ambiente:
$HOME/.edgemicro/your_org-your_env-config.yaml
Codifique em Base64 duas vezes o conteúdo do arquivo de configuração:
cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64 | tr -d '\n'
Aplique as mudanças ao Kubernetes no namespace em que o serviço está sendo executado.
kubectl apply -f secret.yaml -n
Essas novas mudanças não são selecionadas automaticamente pelos pods do microgateway atuais. No entanto, os novos pods vão receber as mudanças. Você pode excluir o pod atual para que a implantação crie um novo pod que selecione a mudança.
Exemplo de serviço
O exemplo a seguir ilustra como atualizar uma implantação de serviço com um novo
Acesse os pods.
kubectl get pods
Exemplo de saída:
NAME READY STATUS RESTARTS AGE edge-microgateway-57ccc7776b-g7nrg 1/1 Running 0 19h helloworld-6987878fc4-cltc2 1/1 Running 0 1dExclua o pod
edge-microgateway.kubectl delete pod edge-microgateway-57ccc7776b-g7nrg
Exemplo de saída:
pod "edge-microgateway-57ccc7776b-g7nrg" deletedAcesse os pods novamente. Um novo pod é iniciado e recebe as mudanças de configuração.
kubectl get pods
Exemplo de saída:
NAME READY STATUS RESTARTS AGE edge-microgateway-57ccc7776b-7f6tc 1/1 Running 0 5s helloworld-6987878fc4-cltc2 1/1 Running 0 1d
Como escalonar a implantação
Esta seção explica como usar os princípios de escalonamento do Kubernetes para escalonar as implantações.
Como escalonar uma implantação de serviço
Verifique as implantações:
kubectl get deployments
Exemplo de saída:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE edge-microgateway 1 1 1 1 18h helloworld 1 1 1 1 1dA saída indica que uma réplica foi implantada.
Escalone a implantação de 1 para quantas réplicas quiser. Neste exemplo, o serviço
edge-microgatewayé escalonado.kubectl scale deployment edge-microgateway --replicas=2
(Opcional) Se você quiser usar o escalonamento automático, use este comando:
kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
Verifique as implantações para confirmar se o escalonamento está ativado:
kubectl get deployments
Exemplo de saída:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE edge-microgateway 2 2 2 2 18h helloworld 1 1 1 1 1dO estado foi alterado para incluir duas réplicas.
Verifique os pods:
kubectl get pods
Exemplo de saída:
NAME READY STATUS RESTARTS AGE edge-microgateway-57ccc7776b-g7nrg 1/1 Running 0 18h edge-microgateway-57ccc7776b-rvfz4 1/1 Running 0 41s helloworld-6987878fc4-cltc2 1/1 Running 0 1dA saída mostra que as duas réplicas estão em execução.
Usar namespaces para várias configurações do Edge Microgateway
É possível implantar e configurar várias instâncias de serviços do Edge Microgateway no cluster do Kubernetes. Esse caso de uso permite configurar cada instância do microgateway com o próprio conjunto de plug-ins e parâmetros. Exemplo:
- O serviço A do Edge Microgateway exige apenas o plug-in de proteção contra picos.
- O serviço B do Edge Microgateway exige o plug-in de cota e oauth, mas não a proteção contra picos.
Para resolver esse caso de uso, use namespaces do Kubernetes. Por exemplo, é possível implantar o serviço A do Edge Microgateway no namespace foo e o serviço B do Edge Microgateway no namespace bar.
No exemplo a seguir, o Edge Microgateway configurado na organização OrgA é implantado como um serviço no namespace foo usando a opção -n:
kubectl apply -f <(edgemicroctl -org=myorgA -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgA-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n foo
Da mesma forma, no exemplo a seguir, o Edge Microgateway configurado na organização OrgB é implantado como um serviço no namespace bar usando a opção -n:
kubectl apply -f <(edgemicroctl -org=myorgB -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgB-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n bar