Задачи интеграции Kubernetes

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

Добавление пользовательского плагина

Вы можете добавлять новые функции и возможности в микрошлюз, создавая собственные плагины . Пользовательские плагины позволяют программно взаимодействовать с запросами и ответами, проходящими через микрошлюз.

В этом разделе объясняется, как упаковывать и развертывать плагины на экземпляре Edge Microgateway, работающем в вашем кластере Kubernetes.

В оставшейся части этого раздела предполагается, что вы знакомы с написанием и настройкой плагинов для стандартной конфигурации Edge Microgateway. Если нет, см. раздел «Разработка пользовательских плагинов» .

Упакуйте свой(и) плагин(ы)

Для создания пакета пользовательского плагина выполните следующие действия:

  1. Напишите и протестируйте свой плагин, следуя инструкциям в разделе «Написание простого плагина» .

  2. Разместите код вашего плагина в соответствующей структуре каталогов. Каталоги плагинов должны соответствовать установленной структуре. В следующем примере показана структура, которой вы должны придерживаться, где response-uppercase и request-headers — это названия папок, содержащих пользовательский код плагина (эти названия являются лишь примерами, названия ваших папок могут отличаться):

    plugin
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  3. cd в папку plugin .

  4. В папке plugin заархивируйте всю папку plugins :

    zip -r plugins.zip plugins/

Создайте образ Docker.

  1. В той же директории, где находится zip-файл, создайте новый файл с именем Dockerfile .
  2. Добавьте следующий код в 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"]
    
  3. Создайте новый образ 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.

  1. Добавьте плагин(ы) в конфигурационный файл 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:

  1. Обновите развертывание 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)
  2. Протестируйте плагин. Вызовите API, чтобы убедиться, что получаете ожидаемое поведение. Например, для плагина "response uppercase" текст ответа преобразуется в верхний регистр, как показано ниже:

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    Выход:

    HELLO WORLD
    
Внедрение новой конфигурации вручную.

Ручное внедрение — это простой подход, при котором новая конфигурация внедряется из командной строки.

  1. Выполните следующую команду:

    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)
  2. Протестируйте плагин. Вызовите API сервиса, чтобы убедиться, что вы получаете ожидаемое поведение. Например, для плагина "response uppercase" текст ответа преобразуется в верхний регистр, как показано ниже:

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    Выход:

    HELLO WORLD
    

Внесение изменений в конфигурацию Edge Microgateway

В некоторых случаях может потребоваться изменить конфигурацию Edge Microgateway . Например, вы можете захотеть добавить новый плагин в Edge Microgateway или изменить параметр конфигурации. В этом разделе объясняется, как вносить и применять изменения конфигурации Edge Microgateway, работающего в Kubernetes.

  1. Создайте конфигурационный файл 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
    
  2. Укажите закодированное в 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'
  3. Внесите необходимые изменения в конфигурационный файл Edge Microgateway для вашей организации и среды:

    $HOME/.edgemicro/your_org-your_env-config.yaml
  4. Закодируйте содержимое файла конфигурации в формате Base64 в два раза:

    cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64  | tr -d '\n'
  5. Внесите изменения в Kubernetes в том пространстве имен, где работает ваш сервис.

    kubectl apply -f secret.yaml -n 

Эти новые изменения не будут автоматически учтены существующими модулями микрошлюза; однако новые модули получат эти изменения. Вы можете удалить существующий модуль, чтобы при развертывании был создан новый модуль, который будет учтен.

Пример сервиса

Следующий пример иллюстрирует, как обновить развертывание службы, добавив новый файл конфигурации.

  1. Приобретите капсулы.

    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
    
  2. Удалите модуль edge-microgateway .

    kubectl delete pod edge-microgateway-57ccc7776b-g7nrg

    Пример выходных данных:

    pod "edge-microgateway-57ccc7776b-g7nrg" deleted
    
  3. Загрузите поды заново. Запустится новый под, который получит ваши изменения конфигурации.

    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 для масштабирования ваших развертываний.

Масштабирование развертывания сервиса

  1. Проверьте развертывания:

    kubectl get deployments

    Пример выходных данных:

    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edge-microgateway   1         1         1            1           18h
    helloworld          1         1         1            1           1d
    

    В результате выполнения программы отображается информация о развертывании одной реплики.

  2. Масштабируйте развертывание от 1 до любого желаемого количества реплик. В этом примере масштабируется служба edge-microgateway .

    kubectl scale deployment edge-microgateway --replicas=2
  3. (Необязательно) Если вы хотите использовать автоматическое масштабирование, воспользуйтесь этой командой:

    kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
  4. Проверьте развертывания, чтобы убедиться, что масштабирование включено:

    kubectl get deployments

    Пример выходных данных:

    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edge-microgateway   2         2         2            2           18h
    helloworld          1         1         1            1           1d
    

    В состав штата были внесены изменения, включающие две копии.

  5. Проверьте капсулы:

    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