Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Как добавить собственный плагин
Вы можете добавить в микрошлюз новые функции и возможности, написав специальные плагины. С помощью пользовательских плагинов можно программно взаимодействовать с запросами и ответами, которые проходят через микрошлюз.
В этом разделе рассказывается, как упаковать и развернуть плагины в экземпляре Edge Microgateway, работающем в кластере Kubernetes.
В остальной части этого раздела предполагается, что вы знакомы с написанием и настройкой плагинов для стандартной конфигурации Edge Microgateway. В противном случае ознакомьтесь с разделом Как разрабатывать собственные плагины.
Как упаковать плагин
Чтобы упаковать пользовательские плагины, выполните следующие действия:
Напишите и протестируйте плагин, следуя инструкциям в разделе Как написать простой плагин.
Разместите код плагина в правильной структуре каталогов. Каталоги плагинов должны иметь определенную структуру. В следующем примере показана структура, которую необходимо использовать.
response-uppercaseиrequest-headers– это названия папок с кодом пользовательского плагина (названия приведены в качестве примера, ваши папки могут называться иначе):plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsoncdв папкуplugin.В папке
pluginзаархивируйте всю папкуplugins:zip -r plugins.zip plugins/
Как создать образ Docker
- В том же каталоге, где находится ZIP-файл, создайте новый файл с названием
Dockerfile. Добавьте в файл
Dockerfileследующий код и сохраните файл: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"]Создайте новый образ Docker Edge Microgateway с вашими плагинами и загрузите его в реестр Docker. Вы можете использовать любой реестр, например
docker.ioилиgcr.io:docker build -t edgemicroplugins .docker tag edgemicroplugins container-registry/your-project/edgemicropluginsdocker push container-registry/your-project/edgemicropluginsПример:
docker build -t edgemicroplugins .docker tag edgemicroplugins gcr.io/my-project/edgemicropluginsdocker push gcr.io/my-project/edgemicroplugins
Как обновить конфигурацию Edge Microgateway
Добавьте плагины в файл конфигурации Edge Microgateway. Файл конфигурации можно найти здесь:
$HOME/.edgemicro/org-env-config.yaml
Пример:
$HOME/.edgemicro/myorg-test-config.yaml
В приведенном ниже примере конфигурации добавлен специальный плагин response-uppercase.
Плагин oauth уже был установлен по умолчанию.
edgemicro:
...
plugins:
sequence:
- oauth
- response-uppercase
Как обновить кластер Kubernetes
На последнем шаге нужно применить изменения конфигурации к кластеру Kubernetes. Kubernetes скачает новый образ с кодом плагина, который вы отправили в реестр контейнеров, и будет использовать его для всех новых созданных контейнеров.
Если вы развернули Edge Microgateway как сервис
Чтобы внедрить обновленную конфигурацию Edge Microgateway, используйте команду edgemicroctl:
Обновите развертывание Edge Microgateway, используя новый образ. Пример:
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)
где:
your_organization– организация Apigee, указанная в командеedgemicro configure.your_environment– среда, указанная в командеedgemicro configure.configuration_key– ключ, возвращенный командойedgemicro configure.configuration_secret– секрет, возвращенный командойedgemicro configure.config_file_path– путь к файлу конфигурации Edge Micro, возвращенный командойedgemicro configure.container-registry– реестр Docker, в который вы отправили образ. Примеры:gcr.ioилиdocker.io.your_project_name– название проекта для репозитория Docker, в который вы отправили образ Docker.image_name– название отправленного вами образа Docker.
Пример:
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)
Проверьте плагин. Вызовите API, чтобы проверить, работает ли он так, как вы ожидаете. Например, если вы используете плагин "response uppercase", текст ответа будет преобразован в верхний регистр, как показано ниже:
curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'
Вывод:
HELLO WORLD
Вручную внедрить новую конфигурацию
При ручном внедрении вы вводите новую конфигурацию из командной строки.
Выполните следующую команду:
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)
где:
your_org– организация Apigee, указанная в командеedgemicro configure.your_env– среда, указанная в командеedgemicro configure.your_key– ключ, возвращенный командойedgemicro configure.your_secret– секрет, возвращенный командойedgemicro configure.config_file_path– путь к файлу конфигурации Edge Micro, возвращенный командойedgemicro configure.container-registry– реестр Docker, в который вы отправили образ. Примеры:gcr.ioилиdocker.io.your_project_name– название проекта для репозитория Docker, в который вы отправили образ Docker.image_name– название отправленного вами образа Docker.service_deployment_file- Путь к файлу развертывания сервиса, к которому будут применяться плагины. Пример:samples/helloworld/helloworld.yaml.
Пример:
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)
Проверьте плагин. Вызовите API сервиса, чтобы проверить, работает ли он так, как ожидается. Например, плагин "response uppercase" преобразует текст ответа в верхний регистр, как показано ниже:
curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'
Вывод:
HELLO WORLD
Как изменить конфигурацию Edge Microgateway
В некоторых случаях может потребоваться изменить конфигурацию Edge Microgateway. Например, вы можете добавить новый плагин в Edge Microgateway или изменить параметр конфигурации. В этом разделе рассказывается, как вносить изменения в конфигурацию Edge Microgateway, работающего в Kubernetes, и применять их.
Создайте файл конфигурации
secret.yaml, как показано ниже:apiVersion: v1 kind: Secret metadata: name: mgwsecret type: Opaque data: mgorg: EDGEMICRO_ORG mgenv: EDGEMICRO_ENV mgkey: EDGEMICRO_KEY mgsecret: EDGEMICRO_SECRET mgconfig: EDGEMICRO_CONFIGУкажите значение, закодированное по алгоритму Base64, для
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'Внесите изменения в файл конфигурации Edge Microgateway для своей организации и среды:
$HOME/.edgemicro/your_org-your_env-config.yaml
Дважды закодируйте содержимое файла конфигурации по стандарту Base64:
cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64 | tr -d '\n'
Примените изменения к Kubernetes в пространстве имен, где работает ваш сервис.
kubectl apply -f secret.yaml -n
Существующие контейнеры микрошлюза не получают эти изменения автоматически, но новые контейнеры будут их получать. Вы можете удалить существующий контейнер, чтобы при развертывании был создан новый контейнер с учетом изменений.
Пример сервиса
В примере ниже показано, как обновить развертывание сервиса с помощью нового
Соберите капсулы.
kubectl get pods
Примеры результатов:
NAME READY STATUS RESTARTS AGE edge-microgateway-57ccc7776b-g7nrg 1/1 Running 0 19h helloworld-6987878fc4-cltc2 1/1 Running 0 1dУдалите модуль
edge-microgateway.kubectl delete pod edge-microgateway-57ccc7776b-g7nrg
Примеры результатов:
pod "edge-microgateway-57ccc7776b-g7nrg" deletedСнова получите капсулы. Запускается новый контейнер, в который вносятся изменения конфигурации.
kubectl get pods
Примеры результатов:
NAME READY STATUS RESTARTS AGE edge-microgateway-57ccc7776b-7f6tc 1/1 Running 0 5s helloworld-6987878fc4-cltc2 1/1 Running 0 1d
Масштабирование развертывания
В этом разделе рассказывается, как использовать принципы масштабирования Kubernetes для масштабирования развертываний.
Масштабирование развертывания сервиса
Проверьте развертывания:
kubectl get deployments
Примеры результатов:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE edge-microgateway 1 1 1 1 18h helloworld 1 1 1 1 1dВ выходных данных указано, что развернута одна реплика.
Масштабируйте развертывание от одной до нужного количества реплик. В этом примере масштабируется сервис
edge-microgateway.kubectl scale deployment edge-microgateway --replicas=2
Если вы хотите использовать автомасштабирование, выполните следующую команду:
kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
Проверьте развертывания, чтобы убедиться, что масштабирование включено:
kubectl get deployments
Примеры результатов:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE edge-microgateway 2 2 2 2 18h helloworld 1 1 1 1 1dСостояние изменено, чтобы включить две реплики.
Проверьте модули:
kubectl get pods
Примеры результатов:
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 1dВ выходных данных указано, что обе реплики находятся в состоянии выполнения.
Как использовать пространства имен для нескольких конфигураций Edge Microgateway
Вы можете развернуть и настроить несколько экземпляров сервисов Edge Microgateway в кластере Kubernetes. В этом случае вы можете настроить каждый экземпляр микрошлюза с собственным набором плагинов и параметров. Пример:
- Сервису A Edge Microgateway требуется только плагин spike arrest.
- Сервису Edge Microgateway B требуется плагин квоты и OAuth, но не плагин защиты от скачков трафика.
Для решения этой задачи используйте пространства имен Kubernetes. Например, вы можете развернуть сервис A Edge Microgateway в пространстве имен foo, а сервис B Edge Microgateway – в пространстве имен bar.
В следующем примере Edge Microgateway, настроенный в организации OrgA, развертывается как сервис в пространстве имен foo с помощью параметра -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
Аналогично, в следующем примере Edge Microgateway, настроенный в организации OrgB, развертывается как сервис в пространстве имен bar с помощью параметра -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