Как использовать Docker для Edge Microgateway

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

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

Требования

Прежде чем запускать Edge Microgateway в контейнере Docker, необходимо выполнить следующие задачи:

  • Настройте Edge Microgateway для организации или среды Apigee:

    edgemicro configure -o your_org -e your_env -u your_username

    Подробнее о настройке Edge Microgateway…

  • После выполнения инструкций по настройке найдите файл конфигурации. Местоположение по умолчанию:

    $HOME/.edgemicro/your_org-your_env-config.yaml

    где your_org и your_env – это организация и среда, которые вы использовали при выполнении команды edgemicro config. Этот файл понадобится вам, когда вы будете запускать Edge Microgateway в контейнере Docker.

  • Убедитесь, что у вас есть ключ и секретные учетные данные, которые были возвращены при выполнении команды edgemicro config. Пример:

    The following credentials are required to start edge micro
      key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0
      secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
    
  • Прежде чем запускать Edge Microgateway в контейнере Docker, необходимо создать (или иметь созданные) объекты Apigee Edge, которые требуются для выполнения аутентифицированных вызовов прокси-сервера API. К ним относятся прокси, поддерживающий Edge Microgateway, продукт API, разработчик и приложение разработчика. Полные инструкции приведены в статье Как создать объекты в Apigee Edge.

Как запустить Edge Micro в контейнере Docker

  1. Скачайте образ Docker для Edge Microgateway:

    docker pull gcr.io/apigee-microgateway/edgemicro:latest
  2. Прежде чем переходить к следующим шагам, убедитесь, что вы выполнили все действия, описанные в разделе Предварительные требования.

  3. Выполните следующую команду, чтобы закодировать в формате Base64 файл конфигурации Edge Microgateway, расположенный в каталоге $HOME/.edgemicro:

    export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`

    где your_org и your_env – это организация и среда, которые вы использовали при выполнении команды edgemicro config.

    Не забудьте заключить команду в обратные кавычки (`). Пример:

    export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
  4. Запуск Edge Microgateway в контейнере. Эта команда задает несколько переменных среды, которые используются средой выполнения контейнера для запуска Edge Microgateway:

    chown -R 100:101 ~/.edgemicro/ \
    docker run -P -p 8000:8000 -d --name edgemicro \
    -v /var/tmp:/opt/apigee/logs \
    -e EDGEMICRO_PROCESSES=1 \
    -e EDGEMICRO_ORG=your_org \
    -e EDGEMICRO_ENV=your_env \
    -e EDGEMICRO_KEY=your_key \
    -e EDGEMICRO_SECRET=your_secret \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    -e SERVICE_NAME=edgemicro \
    --security-opt=no-new-privileges \
    --cap-drop=ALL \
    gcr.io/apigee-microgateway/edgemicro:latest

    Параметры

    Параметр Описание
    -P Опубликовать все открытые порты для хоста. Также ознакомьтесь с документацией по команде Docker run.
    -p Сопоставляйте один порт или диапазон портов. Также ознакомьтесь с документацией по команде Docker run.
    -d Запустить в отсоединенном режиме. Также ознакомьтесь с документацией по команде Docker run.
    -v, --volume Указывает точку монтирования тома. Обратите внимание, что если вы настроите Edge Microgateway на использование TLS в контейнере Docker, то при монтировании каталога файлов журнала необходимо открыть порт 8443. Также ознакомьтесь с разделом VOLUME [общие файловые системы]. Также ознакомьтесь с информацией о том, как использовать TLS в контейнере Docker.
    EDGEMICRO_ORG Название организации Apigee, которую вы использовали для настройки Edge Microgateway.
    EDGEMICRO_ENV Название среды Apigee, которую вы использовали для настройки Edge Microgateway.
    EDGEMICRO_PROCESSES Количество процессов, которые нужно запустить.
    EDGEMICRO_KEY Ключ, возвращенный при настройке Edge Microgateway.
    EDGEMICRO_SECRET Секрет, возвращенный при настройке Edge Microgateway.
    EDGEMICRO_CONFIG Переменная, содержащая файл конфигурации Edge Microgateway, закодированный по стандарту Base64.
    SERVICE_NAME Если вы используете Kubernetes, этот параметр заполняется автоматически. В противном случае вы можете указать любое значение. Если вы ничего не укажете, название сервиса будет задано как default.
    DEBUG Чтобы включить отладку, задайте значение *.
    HTTP_PROXY HTTPS_PROXY Используйте, если Edge Microgateway работает за брандмауэром и не может взаимодействовать с Apigee Edge. Дополнительную информацию можно найти в статье Настройка Edge Microgateway за корпоративным брандмауэром.

    Пример: HTTP_PROXY=http://10.203.0.1:5187/.

    NO_PROXY Список доменов, разделенных запятыми, для которых Edge Microgateway не должен выполнять проксирование. Подробнее о настройке Edge Microgateway за корпоративным брандмауэром…

    Пример: localhost,127.0.0.1,localaddress,.localdomain.com.

    NODE_EXTRA_CA_CERTS (Необязательно.) Используйте этот параметр, если вы используете ЦС, который по умолчанию не считается доверенным в Node.js. Укажите в качестве значения этого параметра путь к файлу, содержащему один или несколько доверенных сертификатов в формате PEM. Подробнее о сертификатах TLS…
    --security-opt (Необязательно) Задает нужные параметры безопасности Docker. Подробнее о конфигурации безопасности в документации Docker…
    --cap-drop (Необязательно) Устанавливает ограничения на возможности Linux, разрешенные в контейнере. Подробнее о правах доступа во время выполнения и возможностях Linux…

    Пример:

    chown -R 100:101 ~/.edgemicro/ \
    docker run -P -p 8000:8000 -d --name edgemicro \
    -v /var/tmp:/opt/apigee/logs \
    -e EDGEMICRO_PROCESS=1 \
    -e EDGEMICRO_ORG=docs \
    -e EDGEMICRO_ENV=test \
    -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \
    -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    -e SERVICE_NAME=edgemicro \
    --security-opt=no-new-privileges \
    --cap-drop=ALL \
    gcr.io/apigee-microgateway/edgemicro
  5. Чтобы проверить, запущен ли контейнер:

    docker ps

    Вы должны получить примерно такой результат:

    CONTAINER ID    IMAGE         COMMAND                CREATED          STATUS          PORTS                                             NAMES
    8b92e082ea9c    edgemicro    "/tmp/entrypoint.sh"   12 minutes ago   Up 12 minutes    0.0.0.0:8000->8000/tcp, 0.0.0.0:32775->8443/tcp    edgemicro
    

Как проверить вызов API

После запуска Edge Microgateway в контейнере вы можете отправлять ему вызовы API. Например, если базовый путь вашего API – /hello:

http://localhost:8000/hello

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

{"error":"missing_authorization","error_description":"Missing Authorization header"}

Если вы видите этот ответ, значит Edge Microgateway успешно обработал вызов API. Однако по умолчанию Edge Microgateway требует для аутентификации ключ API. В следующем разделе вы протестируете API с действительным ключом.

Как протестировать API с помощью действительного ключа API

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

Вызовите API с заголовком x-api-key следующим образом: Значение Consumer Key (Идентификатор клиента), скопированное из приложения для разработчиков, является ключом API. По умолчанию Edge Microgateway ожидает, что вы передадите ключ в заголовке x-api-key, как показано ниже:

curl -i http://localhost:8000/hello -H "x-api-key:apikey"

Пример:

curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz"

Если вы хотите узнать больше о том, как выполнять аутентифицированные вызовы API через Edge Microgateway с помощью ключей API и токенов OAuth, ознакомьтесь с частью 4.

Как остановить Edge Microgateway

Чтобы остановить Edge Microgateway, используйте следующую команду Docker:

docker stop edgemicro

Перезапуск Edge Microgateway

После остановки Edge Microgateway вы можете перезапустить его с помощью следующей команды Docker:

docker start edgemicro

Как использовать TLS в контейнере Docker

В этом разделе рассказывается, как настроить TLS для Edge Microgateway, работающего в контейнере Docker. Вы можете настроить сервер Edge Microgateway так, чтобы он использовал TLS для входящих запросов (северное направление), а также настроить Edge Microgateway как клиента TLS для исходящих запросов к целевым конечным точкам (южное направление).

Куда помещать файлы сертификатов

Контейнер Docker, в котором работает Edge Microgateway, имеет точку подключения в /opt/apigee/.edgemicro. Если вы настроили Edge Microgateway на использование сертификатов TLS, вы можете сделать файлы сертификатов доступными в этой точке подключения и указать их в файле конфигурации Edge Microgateway. Обычно этот файл конфигурации находится в каталоге $HOME/.edgemicro и называется your_org-your_env-config.yaml. Пример:

...
edgemicro:
  ssl:
   key: /opt/apigee/.edgemicro/southbound/tls.key
   cert: /opt/apigee/.edgemicro/southbound/tls.crt
...

Использование ЦС, который не является доверенным для Node.js

Если вы используете центр сертификации, который по умолчанию не считается доверенным в Node.js (например, самозаверяющий сертификат), при запуске контейнера используйте параметр NODE_EXTRA_CA_CERTS.

Укажите путь к файлу, содержащему один или несколько доверенных сертификатов в формате PEM. Примеры использования этого параметра можно найти в статьях Как настроить TLS для исходящего трафика и Как настроить TLS для входящего трафика.

Пример:

chown -R 100:101 ~/.edgemicro/ \
docker run -P -p 8443:8443 -d --name edgemicro \
-v $HOME/.edgemicro:/opt/apigee/.edgemicro \
-v $HOME/.edgemicro:/opt/apigee/logs \
-e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \
-e EDGEMICRO_PORT=8443 \
-e EDGEMICRO_ORG=docs \
-e EDGEMICRO_ENV=test \
-e EDGEMICRO_KEY=ac36574905fb54fdae65fc5433e831bec2680efb98220a355f2e917e52973c \
-e EDGEMICRO_SECRET=aac81dff6c326eaa222d53c15c8841fa78ea863bf4472568c9ce2d80a3bc56 \
-e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
--link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro

Также прочитайте статью Как запустить Edge Micro в контейнере Docker.

Как отключить проверку TLS

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

  1. Клонируйте или скачайте исходный репозиторий Edge Microgateway с сайта https://github.com/apigee-internal/microgateway.

  2. cd в каталог microgateway/kubernetes/docker/edgemicro в каталоге исходного кода.

    Пример:

    cd $HOME/git/microgateway/kubernetes/docker/edgemicro
    
  3. Откройте файл entrypoint.sh и измените код, чтобы он принимал переменную среды NODE_TLS_REJECT_UNAUTHORIZED. Позже, когда вы запустите контейнер, вы укажете значение этой переменной.

  4. Создайте контейнер Docker:

    docker build -t edgemicro .
    
  5. При запуске контейнера укажите параметр -e NODE_TLS_REJECT_UNAUTHORIZED = 1. Пример:

chown -R 100:101 ~/.edgemicro/ \
docker run -P -p 8443:8443 -d --name edgemicro \
-v $HOME/.edgemicro:/opt/apigee/.edgemicro \
-v $HOME/.edgemicro:/opt/apigee/logs \
-e NODE_TLS_REJECT_UNAUTHORIZED = 1 \
-e EDGEMICRO_PORT=8443 \
-e EDGEMICRO_ORG=docs \
-e EDGEMICRO_ENV=test \
-e EDGEMICRO_KEY=ac36574905fb54fdae65fc5433e831bec2680efb98220a355f2e917e52973c \
-e EDGEMICRO_SECRET=aac81dff6c326eaa222d53c15c8841fa78ea863bf4472568c9ce2d80a3bc56 \
-e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
--link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro

Пример: как настроить TLS для исходящего трафика

В этом разделе рассказывается, как настроить входящее TLS-подключение на сервере Edge Microgateway. Northbound TLS позволяет клиентам использовать HTTPS при выполнении вызовов API к Edge Microgateway. В примере ниже используются самозаверяющие сертификаты.

1. Первоначальная настройка

  1. Найдите файл openssl.cnf в системе. Пример: /etc/ssl/openssl.cnf.
  2. Откройте файл opensssl.cnf для редактирования.
  3. Убедитесь, что в файле конфигурации есть символы req_extensions. Например, в вашем файле должна быть информация, похожая на приведенную ниже:

    [ req ]
    ...
    req_extensions          = v3_req
    ...
    
    [ v3_req ]
    extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    
  4. Добавьте в openssl.cnf следующий раздел, чтобы создать правильные атрибуты SNI:

    [ alt_names ]
    DNS.1 = www.example.com
    DNS.2 = example.com
    DNS.3 = localhost
    DNS.4 = localhost.localdomain
    DNS.5 = 127.0.0.1
    DNS.6 = ::1
    DNS.7 = fe80::1
    

    Пример файла opensssl.cnf:

    [ req ]
    distinguished_name      = req_distinguished_name
    attributes              = req_attributes
    req_extensions          = v3_req
    
    [ v3_req ]
    extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    
    [ req_distinguished_name ]
    countryName                     = Country Name (2 letter code)
    countryName_min                 = 2
    countryName_max                 = 2
    stateOrProvinceName             = State or Province Name (full name)
    localityName                    = Locality Name (eg, city)
    0.organizationName              = Organization Name (eg, company)
    organizationalUnitName          = Organizational Unit Name (eg, section)
    commonName                      = Common Name (eg, fully qualified host name)
    commonName_max                  = 64
    emailAddress                    = Email Address
    emailAddress_max                = 64
    
    [ req_attributes ]
    challengePassword               = A challenge password
    challengePassword_min           = 4
    challengePassword_max           = 20
    
    [ alt_names ]
    DNS.1 = www.example.com
    DNS.2 = example.com
    DNS.3 = localhost
    DNS.4 = localhost.localdomain
    DNS.5 = 127.0.0.1
    DNS.6 = ::1
    DNS.7 = fe80::1
    
  5. Если вы ещё не сделали этого, выполните инструкции из раздела Требования, чтобы инициализировать и настроить Edge Microgateway. После этого у вас должен быть прокси, совместимый с Edge Microgateway, продукт API, разработчик и приложение разработчика. Кроме того, вы должны были выполнить команду edgemicro configure и получить ключ и секрет.

2. Как создать сертификаты с собственной подписью

Затем создайте сертификаты и ключи, необходимые для установления TLS:

  1. cd в каталог $HOME/.edgemicro.
  2. Создайте следующий скрипт bash. Имя может быть любым. Пример: keygen.sh.

    #!/bin/bash
    # generate ca
    openssl genrsa -out rootca.key 2048
    openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1024 -out rootca.pem
    # generate key
    openssl genrsa -out tls.key 2048
    openssl req -new -key tls.key -out tls.csr
    # sign cert
    openssl x509 -req -in tls.csr -CA rootca.pem -CAkey rootca.key -CAcreateserial -out tls.crt -days 1024 -sha256 -extensions 'v3_req' -extfile path/openssl.cnf
    
  3. Убедитесь, что в файле bash указан правильный путь к файлу openssl.cnf.

  4. Выполните файл bash. Вам будет предложено указать информацию о сертификате. В поле "Общее имя" обязательно укажите localhost.

  5. Убедитесь, что созданы следующие файлы:

    • rootca.key
    • rootca.pem
    • tls.key
    • tls.csr
    • rootca.srl
    • tls.crt

3. Как изменить файл конфигурации Edge Microgateway

  1. Откройте файл конфигурации Edge Micro в редакторе. Пример:

    vi $HOME/.edgemicro/myorg-test-config.yaml
    
  2. Измените раздел edgemicro следующим образом: Обратите внимание, что вы вносите изменения в атрибуты port и ssl:

    edge_config:
    ...
    edgemicro:
      port: 8443
      max_connections: 1000
      config_change_poll_interval: 600
      ssl:
        key: /opt/apigee/.edgemicro/tls.key
        cert: /opt/apigee/.edgemicro/tls.crt
        passphrase: admin123
        rejectUnauthorized: true
        requestCert: false
      logging:
    ...
    
  3. Выполните следующую команду, чтобы закодировать файл конфигурации Edge Microgateway, расположенный в $HOME/.edgemicro, с помощью кодировки Base64:

    export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`

    где your_org и your_env – это организация и среда, которые вы использовали при выполнении команды edgemicro config.

    Не забудьте заключить команду в обратные кавычки (`). Пример:

    export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`

Также прочитайте статью Как запустить Edge Micro в контейнере Docker.

4. Запуск контейнера

  1. Выполните следующую команду, чтобы запустить контейнер Docker с Edge Microgateway:

    chown -R 100:101 ~/.edgemicro/ \
    docker run -P -p 8443:8443 -d --name edgemicro \
    -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \
    -v path_to_your_logs_dir:/opt/apigee/logs \
    -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \
    -e EDGEMICRO_PORT=8443 \
    -e EDGEMICRO_ORG=$EDGEMICRO_ORG \
    -e EDGEMICRO_ENV=$EDGEMICRO_ENV \
    -e EDGEMICRO_KEY=$EDGEMICRO_KEY \
    -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    gcr.io/apigee-microgateway/edgemicro:latest
    
  2. Обратите внимание на параметры, используемые в команде. Они отличаются от параметров базовой команды, описанной в разделе Запуск Edge Micro в контейнере Docker.

    • Для параметра port задано значение 8443.
    • Для монтирования файлов ключей и сертификатов используется монтирование тома.
    • Переменная NODE_EXTRA_CA_CERTS используется для добавления собственного ЦС (если это необходимо в случае самозаверяющих сертификатов).

5. Как проверить конфигурацию TLS

  1. Чтобы проверить настройку, выполните следующую команду cURL: Замените в команде путь к базе и ключ API. В следующем примере предполагается, что вы находитесь в каталоге, где расположен файл rootca.pem, а у созданного вами прокси-сервера базовый путь – /hello:

    curl -v https://localhost:8443/hello --cacert rootca.pem \
    -H "x-api-key: Az82fdnfONVCOOE4NKhajxAboDgA3FAo"
    
  2. Подробный вывод cURL показывает каждый шаг рукопожатия TLS. Если вы получили ответ HTTP 200, значит конфигурация выполнена успешно:

    *   Trying ::1...ey:Az82fdnfONVCOOE4NKhajxAboDgA3FAo"
    * TCP_NODELAY set
    * Connected to localhost (::1) port 8443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
    * successfully set certificate verify locations:
    *   CAfile: rootca.pem
      CApath: none
    * TLSv1.2 (OUT), TLS handshake, Client hello (1):
    * TLSv1.2 (IN), TLS handshake, Server hello (2):
    * TLSv1.2 (IN), TLS handshake, Certificate (11):
    * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
    * TLSv1.2 (IN), TLS handshake, Server finished (14):
    * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
    * TLSv1.2 (OUT), TLS change cipher, Client hello (1):
    * TLSv1.2 (OUT), TLS handshake, Finished (20):
    * TLSv1.2 (IN), TLS change cipher, Client hello (1):
    * TLSv1.2 (IN), TLS handshake, Finished (20):
    * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
    * ALPN, server accepted to use http/1.1
    * Server certificate:
    *  subject: C=US; ST=CO; L=Boulder; O=Docs; OU=Docs; CN=localhost; emailAddress=docs@apigee.com
    *  start date: Dec 14 22:35:28 2018 GMT
    *  expire date: Oct  3 22:35:28 2021 GMT
    *  common name: localhost (matched)
    *  issuer: C=US; ST=CO; L=Boulder; O=Docs; OU=Docs; CN=localhost; emailAddress=docs@apigee.com
    *  SSL certificate verify ok.
    > GET /hello HTTP/1.1
    > Host: localhost:8443
    > User-Agent: curl/7.54.0
    > Accept: */*
    > x-api-key:Az82fdnfaONVCOE4NKhajxAboDA3FAo
    >
    < HTTP/1.1 200 OK
    < x-powered-by: Apigee
    < access-control-allow-origin: *
    < x-frame-options: ALLOW-FROM RESOURCE-URL
    < x-xss-protection: 1
    < x-content-type-options: nosniff
    < content-type: text/plain; charset=utf-8
    < etag: W/"d-GHB1ZrJKk/wdVTdB/jgBsw"
    < date: Fri, 14 Dec 2018 22:43:13 GMT
    < via: 1.1 google
    < alt-svc: clear
    < x-response-time: 1325
    < Connection: keep-alive
    < Transfer-Encoding: chunked
    <
    * Connection #0 to host localhost left intact
    Hello, Guest!
    

Пример: как настроить TLS для исходящего трафика

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

1. Первоначальная настройка

  1. Найдите файл openssl.cnf в системе. Пример: /etc/ssl/openssl.cnf.
  2. Откройте файл opensssl.cnf для редактирования.
  3. Убедитесь, что в файле конфигурации есть символы req_extensions. Например, в вашем файле должна быть информация, похожая на приведенную ниже:

    [ req ]
    ...
    req_extensions          = v3_req
    ...
    
    [ v3_req ]
    extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    
  4. Добавьте в openssl.cnf следующий раздел, чтобы создать правильные атрибуты SNI:

    [ alt_names ]
    DNS.1 = helloworld
    DNS.2 = localhost
    DNS.3 = localhost.localdomain
    DNS.4 = 127.0.0.1
    DNS.5 = ::1
    DNS.6 = fe80::1
    

    Пример файла opensssl.cnf:

    [ req ]
    distinguished_name      = req_distinguished_name
    attributes              = req_attributes
    req_extensions          = v3_req
    
    [ v3_req ]
    extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    
    [ req_distinguished_name ]
    countryName                     = Country Name (2 letter code)
    countryName_min                 = 2
    countryName_max                 = 2
    stateOrProvinceName             = State or Province Name (full name)
    localityName                    = Locality Name (eg, city)
    0.organizationName              = Organization Name (eg, company)
    organizationalUnitName          = Organizational Unit Name (eg, section)
    commonName                      = Common Name (eg, fully qualified host name)
    commonName_max                  = 64
    emailAddress                    = Email Address
    emailAddress_max                = 64
    
    [ req_attributes ]
    challengePassword               = A challenge password
    challengePassword_min           = 4
    challengePassword_max           = 20
    
    [ alt_names ]
    DNS.1 = helloworld
    DNS.2 = localhost
    DNS.3 = localhost.localdomain
    DNS.4 = 127.0.0.1
    DNS.5 = ::1
    DNS.6 = fe80::1
    
  5. Выполните команду edgemicro configure:

    edgemicro configure -o your_org -e your_env -u your_username

    Подробнее о настройке Edge Microgateway…

  6. Скопируйте ключ и секретные учетные данные, возвращенные из edgemicro configure. Эти значения понадобятся вам для запуска контейнера. Пример:

    The following credentials are required to start edge micro
      key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0
      secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
    

2. Как создать целевое приложение Node.js

  1. cd в каталог .edgemicro.

  2. Создайте следующий скрипт bash. Имя может быть любым. Пример: keygen.sh.

    #!/bin/bash
    # generate ca
    openssl genrsa -out rootca.key 2048
    openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1024 -out rootca.pem
    # generate key
    openssl genrsa -out tls.key 2048
    openssl req -new -key tls.key -out tls.csr
    # sign cert
    openssl x509 -req -in tls.csr -CA rootca.pem -CAkey rootca.key -CAcreateserial -out tls.crt -days 1024 -sha256 -extensions 'v3_req' -extfile path/openssl.cnf
    
  3. Убедитесь, что в файле bash указан правильный путь к файлу openssl.cnf.

  4. Выполните файл bash. Вам будет предложено указать информацию о сертификате. В поле "Общее имя" обязательно укажите hellworld.

  5. Убедитесь, что созданы следующие файлы:

    • rootca.key
    • rootca.pem
    • tls.key
    • tls.csr
    • rootca.srl
    • tls.crt
  6. Создайте новый файл с названием server.js.

    'use strict';
    
    const express = require('express');
    const https = require('https');
    const fs = require('fs');
    
    const options = {
      key: fs.readFileSync("tls.key"),
      cert: fs.readFileSync("tls.crt")
    };
    
    // Constants
    const PORT = 9443;
    const HOST = '0.0.0.0';
    
    // App
    const app = express();
    app.get('/', (req, res) => {
      res.send('Hello world\n');
    });
    
    https.createServer(options, app).listen(PORT);
    
  7. Создайте файл package.json в том же каталоге, что и файл server.js. Пример:

    {
      "name": "helloworld",
      "version": "1.0.0",
      "description": "",
      "main": "server.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "node server.js"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "express": "^4.16.4",
        "fs": "0.0.1-security",
        "https": "^1.0.0"
      }
    }
    
  8. Выполните команду npm install, чтобы получить зависимости.

  9. Создайте новый файл Dockerfile в том же каталоге, что и server.js, где WORKDIR – это путь к корневому каталогу приложения Node.js:

    FROM node:8-alpine
    WORKDIR path-to-your-node-app
    COPY package*.json ./
    
    RUN npm install
    COPY . .
    EXPOSE 9443
    CMD [ "npm", "start" ]
    
  10. Создайте образ Docker:

    docker build -t helloworld . 
    
  11. Запустите пример приложения:

    docker run -P -p 9443:9443 --name helloworld helloworld
    

3. Как создавать объекты в Apigee Edge

  1. Создайте прокси-сервер, совместимый с Edge Microgateway, с указанными ниже настройками. Подробнее о том, как создать прокси-сервер API, совместимый с Edge Microgateway, в Edge…

    • Название прокси-сервера: edgemicro_local
    • Проверка аккаунта: 1
    • Базовый путь: /local
    • Цели: https://helloworld:9443
  2. Создайте продукт API. Подробнее о том, как создать продукт…

  3. Создание разработчика Подробнее о том, как создать разработчика…

  4. Создайте приложение разработчика. Подробнее о том, как создать приложение разработчика…

4. Запуск контейнера

  1. Откройте файл конфигурации Edge Micro в редакторе. Пример:

    vi $HOME/.edgemicro/myorg-test-config.yaml
    
  2. Измените раздел edgemicro следующим образом: Обратите внимание, что вы вносите изменения в атрибуты port и ssl:

    edge_config:
    ...
    edgemicro:
      port: 8443
      max_connections: 1000
      config_change_poll_interval: 600
      ssl:
        key: /opt/apigee/.edgemicro/tls.key
        cert: /opt/apigee/.edgemicro/tls.crt
        passphrase: admin123
        rejectUnauthorized: true
        requestCert: false
      logging:
    ...
    
  3. Выполните следующую команду, чтобы закодировать в формате Base64 файл конфигурации Edge Microgateway, расположенный в $HOME/.edgemicro:

    export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`

    где your_org и your_env – это организация и среда, которые вы использовали при выполнении команды edgemicro config.

    Не забудьте заключить команду в обратные кавычки (`). Пример:

    export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
  4. Чтобы запустить Edge Microgateway в контейнере Docker, выполните следующую команду:

    chown -R 100:101 ~/.edgemicro/ \
    docker run -P -p 8443:8443 -d --name edgemicro \
    -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \
    -v path_to_your_logs_dir:/opt/apigee/logs \
    -e EDGEMICRO_PORT=8443 \
    -e EDGEMICRO_ORG=$EDGEMICRO_ORG \
    -e EDGEMICRO_ENV=$EDGEMICRO_ENV \
    -e EDGEMICRO_KEY=$EDGEMICRO_KEY \
    -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
    

5. Как проверить конфигурацию TLS

  1. Чтобы проверить настройку, выполните следующую команду cURL: Замените базовый путь, который вы использовали в прокси-сервере с поддержкой микрошлюза, и ключ API, полученный из приложения для разработчиков, созданного в Apigee Edge. Пример:

    curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v
    

    Вы увидите следующую ошибку:

    ...
    *  subject: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com
    *  start date: Dec 10 02:12:22 2018 GMT
    *  expire date: Sep 29 02:12:22 2021 GMT
    *  issuer: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com
    *  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
    > GET /local HTTP/1.1
    > Host: localhost:8443
    > User-Agent: curl/7.54.0
    > Accept: */*
    > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd
    >
    < HTTP/1.1 502 Bad Gateway
    < Date: Wed, 12 Dec 2018 05:25:01 GMT
    < Connection: keep-alive
    < Content-Length: 93
    <
    * Connection #0 to host localhost left intact
    {"message":"unable to verify the first certificate","code":"UNABLE_TO_VERIFY_LEAF_SIGNATURE"}
    
  2. Запустите Edge Microgateway ещё раз, но на этот раз добавьте переменную NODE_EXTRA_CA_CERTS.

    chown -R 100:101 ~/.edgemicro/ \
    docker run -P -p 8443:8443 -d --name edgemicro \
    -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \
    -v path_to_your_logs_dir:/opt/apigee/logs \
    -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \
    -e EDGEMICRO_PORT=8443 \
    -e EDGEMICRO_ORG=$EDGEMICRO_ORG \
    -e EDGEMICRO_ENV=$EDGEMICRO_ENV \
    -e EDGEMICRO_KEY=$EDGEMICRO_KEY \
    -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
    
  3. Выполните следующую команду cURL. Замените базовый путь и ключ API, как и раньше. Пример:

    curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v
    
  4. Проверьте результат. При успешном выполнении запроса вы получите ответ с кодом статуса HTTP 200:

    ...
    > GET /local HTTP/1.1
    > Host: localhost:8443
    > User-Agent: curl/7.54.0
    > Accept: */*
    > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd
    >
    < HTTP/1.1 200 OK
    < x-powered-by: Express
    < content-type: text/html; charset=utf-8
    < etag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"
    < date: Wed, 12 Dec 2018 05:49:28 GMT
    < x-response-time: 421
    < Connection: keep-alive
    < Transfer-Encoding: chunked
    <
    Hello world
    

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

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

Вы можете развернуть плагины в экземпляре Edge Microgateway, работающем в контейнере Docker, двумя способами:

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

Вариант А. Подключите каталог плагинов к тому

(Добавлено в версии 2.5.27) Чтобы добавить плагины с помощью монтирования тома, выполните те же действия, что и при добавлении любого другого специального плагина в Edge Microgateway. При запуске контейнера Docker вы можете подключить каталог плагинов в локальной системе (том) в точке подключения контейнера, которая имеет значение /opt/apigee/plugins. Затем укажите каталог локального тома в файле конфигурации Edge Microgateway.

Ниже описано, как использовать точку подключения Docker, чтобы добавить специальные плагины.

  1. Остановить Edge Microgateway:

    edgemicro stop
    
  2. Создайте каталог для собственных плагинов. Например, создайте

    $HOME/edgemicro/custom/plugins
    
  3. Добавьте каталог пользовательских плагинов в файл конфигурации Edge Microgateway. Пример:

      plugins:
        dir: $HOME/edgemicro/custom/plugins
        sequence:
          - oauth
          - response-uppercase
      ````
    
  4. Напишите и протестируйте плагин, следуя инструкциям в разделе Как написать простой плагин. Убедитесь, что код плагина размещен в правильной структуре каталогов. Пример:

    custom
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  5. Запустите контейнер Docker с помощью команды, похожей на приведенную ниже. В ней используется параметр -v, чтобы смонтировать каталог плагинов на томе Docker. В приведенной ниже команде каталог плагинов $HOME/edgemicro/custom/plugins (где находится пользовательский плагин) сопоставляется с точкой подключения контейнера /opt/apigee/plugins:

    chown -R 100:101 ~/.edgemicro/ \
    docker run -P -p 8000:8000 -d --name edgemicro \
    -v /var/tmp:/opt/apigee/logs \
    -v $HOME/edgemicro/custom/plugins:/opt/apigee/plugins \
    -e EDGEMICRO_PROCESSES=1 \
    -e EDGEMICRO_ORG=jdoe \
    -e EDGEMICRO_ENV=test \
    -e EDGEMICRO_KEY=39c4b561100cd7f258768d1072f3e1d7c17b5f36a18fe89972bb5c9ce7e58fb \
    -e EDGEMICRO_SECRET=f5f9e239a38b4e6cc99c2aa067716a84aebdcff9580a7925fc500e402b1a5fa \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    -e SERVICE_NAME=edgemicro \
    --security-opt=no-new-privileges \
    --cap-drop=ALL gcr.io/apigee-microgateway/edgemicro:latest
    
  6. Вызовите API, чтобы протестировать плагин.

Подробнее о томах [общих файловых системах]…

Вариант Б. Встройте плагины в контейнер

В этом случае вы встраиваете плагины в контейнер.

1. Как упаковать плагины

  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/

2. Как создать образ Docker

Затем создайте Dockerfile, чтобы добавить код плагина в образ Edge Microgateway.

  1. В том же каталоге, где находится ZIP-файл, создайте новый файл с названием Dockerfile.
  2. Добавьте в файл Dockerfile следующий код и сохраните файл:

    USER root
    RUN apk update && \
        apk upgrade && \
        apk add zipapk add zip && \
        mkdir /opt/apigee/customplugins && \
        chown apigee:apigee /opt/apigee/customplugins
    COPY plugins.zip /opt/apigee/customplugins
    RUN su - apigee -c "unzip /opt/apigee/customplugins/plugins.zip -d /opt/apigee/customplugins"
    EXPOSE 8000
    EXPOSE 8443
    USER apigee
    ENTRYPOINT ["entrypoint"]
    
  3. Создайте новый образ Docker Edge Microgateway с вашими плагинами:

    docker build -t image-name .

    Пример:

    docker build -t edgemicroplugins .

3. Как обновить конфигурацию Edge Microgateway

Теперь, когда плагины упакованы, их нужно добавить в файл конфигурации Edge Microgateway.

  1. Откройте файл конфигурации Edge Microgateway в редакторе:

    $HOME/.edgemicro/org-env-config.yaml
    

    Пример:

    vi $HOME/.edgemicro/myorg-test-config.yaml
  2. Добавьте каталог плагинов в файл конфигурации. В приведенном ниже примере атрибут dir указывает местоположение кода плагина (которое вы задали в файле Dockerfile). Также необходимо указать название каталога плагинов. В примере ниже это response-uppercase.

    edgemicro:
      ...
      plugins:
        dir: /opt/apigee/plugins
        sequence:
          - oauth
          - response-uppercase
    

4. Как запустить микрошлюз

Наконец, вам нужно запустить микрошлюз в контейнере.

  1. Выполните следующую команду, чтобы закодировать в формате Base64 файл конфигурации Edge Microgateway, расположенный в $HOME/.edgemicro:

    export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`

    где your_org и your_env – это организация и среда, которые вы использовали при выполнении команды edgemicro config.

    Не забудьте заключить команду в обратные кавычки (`). Пример:

    export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
  2. Запуск Edge Microgateway в контейнере. Эта команда задает несколько переменных среды, которые используются средой выполнения контейнера для запуска Edge Microgateway:

    docker run -P -p 8000:8000 -d --name edgemicroplugins \
    -e EDGEMICRO_PLUGIN_DIR=/opt/apigee/customplugins/plugins \
    -e EDGEMICRO_ORG=your_org \
    -e EDGEMICRO_ENV=your_env \
    -e EDGEMICRO_KEY=your_key \
    -e EDGEMICRO_SECRET=your_secret \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    -e SERVICE_NAME=edgemicroplugins image_name

    Пример:

    docker run -P -p 8000:8000 -d --name edgemicroplugins \
    -e EDGEMICRO_PLUGIN_DIR=/opt/apigee/customplugins/plugins \
    -e EDGEMICRO_ORG=docs \
    -e EDGEMICRO_ENV=test \
    -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \
    -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \
    -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
    -e SERVICE_NAME=edgemicroplugins edgemicroplugins
  3. Вызовите API, чтобы протестировать плагин:

    Проверьте, выполняется ли код плагина, вызвав API и убедившись, что выходные данные соответствуют ожидаемым:

    curl -i http://localhost:8000/hello -H "x-api-key:apikey"

    Например, плагин response-uppercase может вернуть следующий ответ:

    curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz"
      HELLO, WORLD!