Вы просматриваете документацию 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.json
cd
в папку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/edgemicroplugins
docker push container-registry/your-project/edgemicroplugins
Например:
docker build -t edgemicroplugins .
docker tag edgemicroplugins gcr.io/my-project/edgemicroplugins
docker 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, чтобы узнать, получите ли вы ожидаемое поведение. Например, для плагина «ответ в верхнем регистре» текст ответа преобразуется в верхний регистр, как показано ниже:
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 службы, чтобы узнать, получите ли вы ожидаемое поведение. Например, для плагина «ответ в верхнем регистре» текст ответа преобразуется в верхний регистр, как показано ниже:
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
Укажите значение
EDGEMICRO_ORG
,EDGEMICRO_ENV
,EDGEMICRO_KEY
,EDGEMICRO_SECRET
в кодировке Base64: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 A требуется только подключаемый модуль блокировки пиков.
- Службе Edge Microgateway Service B требуется плагин квоты и oauth, но не блокировка пиков.
Чтобы решить эту проблему, используйте пространства имен Kubernetes. Например, вы можете развернуть службу Edge Microgateway A в пространстве имен foo
, а службу Edge Microgateway 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