Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Добавление пользовательского плагина
Вы можете добавлять новые функции и возможности в микрошлюз, создавая собственные плагины . Пользовательские плагины позволяют программно взаимодействовать с запросами и ответами, проходящими через микрошлюз.
В этом разделе объясняется, как упаковывать и развертывать плагины на экземпляре 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 как сервис
Используйте команду edgemicroctl для внедрения обновленной конфигурации Edge Microgateway:
Обновите развертывание 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В результате выполнения программы отображается информация о развертывании одной реплики.
Масштабируйте развертывание от 1 до любого желаемого количества реплик. В этом примере масштабируется служба
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. Этот вариант использования позволяет настроить каждый экземпляр микрошлюза с собственным набором плагинов и параметров. Например:
- Для работы сервиса Edge Microgateway Service A требуется только плагин защиты от скачков напряжения.
- Для работы Edge Microgateway Service B требуется плагин квотирования и OAuth, но не плагин предотвращения скачков трафика.
Для решения этой задачи используйте пространства имен Kubernetes. Например, вы можете развернуть Edge Microgateway Service A в пространстве имен foo , а Edge Microgateway Service B — в пространстве имен 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