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

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

Как добавить собственный плагин

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

В этом разделе рассказывается, как упаковать и развернуть плагины в экземпляре 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 как сервис

Чтобы внедрить обновленную конфигурацию Edge Microgateway, используйте команду edgemicroctl:

  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. Масштабируйте развертывание от одной до нужного количества реплик. В этом примере масштабируется сервис 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. В этом случае вы можете настроить каждый экземпляр микрошлюза с собственным набором плагинов и параметров. Пример:

  • Сервису 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