Задачи интеграции 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 как услугу

Используйте команду 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, чтобы узнать, получите ли вы ожидаемое поведение. Например, для плагина «ответ в верхнем регистре» текст ответа преобразуется в верхний регистр, как показано ниже:

    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 службы, чтобы узнать, получите ли вы ожидаемое поведение. Например, для плагина «ответ в верхнем регистре» текст ответа преобразуется в верхний регистр, как показано ниже:

    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. Укажите значение 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'
    
  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 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