Вы просматриваете документацию по 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
Скачайте образ Docker для Edge Microgateway:
docker pull gcr.io/apigee-microgateway/edgemicro:latest
Прежде чем переходить к следующим шагам, убедитесь, что вы выполнили все действия, описанные в разделе Предварительные требования.
Выполните следующую команду, чтобы закодировать в формате 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`
Запуск 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_PROXYHTTPS_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
Чтобы проверить, запущен ли контейнер:
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.
Клонируйте или скачайте исходный репозиторий Edge Microgateway с сайта
https://github.com/apigee-internal/microgateway.cdв каталогmicrogateway/kubernetes/docker/edgemicroв каталоге исходного кода.Пример:
cd $HOME/git/microgateway/kubernetes/docker/edgemicroОткройте файл
entrypoint.shи измените код, чтобы он принимал переменную средыNODE_TLS_REJECT_UNAUTHORIZED. Позже, когда вы запустите контейнер, вы укажете значение этой переменной.Создайте контейнер Docker:
docker build -t edgemicro .При запуске контейнера укажите параметр
-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. Первоначальная настройка
- Найдите файл
openssl.cnfв системе. Пример:/etc/ssl/openssl.cnf. - Откройте файл
opensssl.cnfдля редактирования. Убедитесь, что в файле конфигурации есть символы
req_extensions. Например, в вашем файле должна быть информация, похожая на приведенную ниже:[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEnciphermentДобавьте в
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Если вы ещё не сделали этого, выполните инструкции из раздела Требования, чтобы инициализировать и настроить Edge Microgateway. После этого у вас должен быть прокси, совместимый с Edge Microgateway, продукт API, разработчик и приложение разработчика. Кроме того, вы должны были выполнить команду
edgemicro configureи получить ключ и секрет.
2. Как создать сертификаты с собственной подписью
Затем создайте сертификаты и ключи, необходимые для установления TLS:
cdв каталог$HOME/.edgemicro.Создайте следующий скрипт 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
Убедитесь, что в файле bash указан правильный путь к файлу
openssl.cnf.Выполните файл bash. Вам будет предложено указать информацию о сертификате. В поле "Общее имя" обязательно укажите
localhost.Убедитесь, что созданы следующие файлы:
rootca.keyrootca.pemtls.keytls.csrrootca.srltls.crt
3. Как изменить файл конфигурации Edge Microgateway
Откройте файл конфигурации Edge Micro в редакторе. Пример:
vi $HOME/.edgemicro/myorg-test-config.yamlИзмените раздел
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: ...Выполните следующую команду, чтобы закодировать файл конфигурации 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. Запуск контейнера
Выполните следующую команду, чтобы запустить контейнер 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
Обратите внимание на параметры, используемые в команде. Они отличаются от параметров базовой команды, описанной в разделе Запуск Edge Micro в контейнере Docker.
- Для параметра
portзадано значение8443. - Для монтирования файлов ключей и сертификатов используется монтирование тома.
- Переменная
NODE_EXTRA_CA_CERTSиспользуется для добавления собственного ЦС (если это необходимо в случае самозаверяющих сертификатов).
- Для параметра
5. Как проверить конфигурацию TLS
Чтобы проверить настройку, выполните следующую команду cURL: Замените в команде путь к базе и ключ API. В следующем примере предполагается, что вы находитесь в каталоге, где расположен файл
rootca.pem, а у созданного вами прокси-сервера базовый путь –/hello:curl -v https://localhost:8443/hello --cacert rootca.pem \ -H "x-api-key: Az82fdnfONVCOOE4NKhajxAboDgA3FAo"Подробный вывод 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. Первоначальная настройка
- Найдите файл
openssl.cnfв системе. Пример:/etc/ssl/openssl.cnf. - Откройте файл
opensssl.cnfдля редактирования. Убедитесь, что в файле конфигурации есть символы
req_extensions. Например, в вашем файле должна быть информация, похожая на приведенную ниже:[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEnciphermentДобавьте в
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Выполните команду
edgemicro configure:edgemicro configure -o your_org -e your_env -u your_username
Подробнее о настройке Edge Microgateway…
Скопируйте ключ и секретные учетные данные, возвращенные из
edgemicro configure. Эти значения понадобятся вам для запуска контейнера. Пример:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
2. Как создать целевое приложение Node.js
cdв каталог.edgemicro.Создайте следующий скрипт 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
Убедитесь, что в файле bash указан правильный путь к файлу
openssl.cnf.Выполните файл bash. Вам будет предложено указать информацию о сертификате. В поле "Общее имя" обязательно укажите
hellworld.Убедитесь, что созданы следующие файлы:
rootca.keyrootca.pemtls.keytls.csrrootca.srltls.crt
Создайте новый файл с названием
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);Создайте файл
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" } }Выполните команду
npm install, чтобы получить зависимости.Создайте новый файл 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" ]
Создайте образ Docker:
docker build -t helloworld .Запустите пример приложения:
docker run -P -p 9443:9443 --name helloworld helloworld
3. Как создавать объекты в Apigee Edge
Создайте прокси-сервер, совместимый с Edge Microgateway, с указанными ниже настройками. Подробнее о том, как создать прокси-сервер API, совместимый с Edge Microgateway, в Edge…
- Название прокси-сервера:
edgemicro_local - Проверка аккаунта:
1 - Базовый путь:
/local - Цели:
https://helloworld:9443
- Название прокси-сервера:
Создайте продукт API. Подробнее о том, как создать продукт…
Создание разработчика Подробнее о том, как создать разработчика…
Создайте приложение разработчика. Подробнее о том, как создать приложение разработчика…
4. Запуск контейнера
Откройте файл конфигурации Edge Micro в редакторе. Пример:
vi $HOME/.edgemicro/myorg-test-config.yamlИзмените раздел
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: ...Выполните следующую команду, чтобы закодировать в формате 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`
Чтобы запустить 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
Чтобы проверить настройку, выполните следующую команду 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"}Запустите 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
Выполните следующую команду cURL. Замените базовый путь и ключ API, как и раньше. Пример:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -vПроверьте результат. При успешном выполнении запроса вы получите ответ с кодом статуса 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, чтобы добавить специальные плагины.
Остановить Edge Microgateway:
edgemicro stopСоздайте каталог для собственных плагинов. Например, создайте
$HOME/edgemicro/custom/pluginsДобавьте каталог пользовательских плагинов в файл конфигурации Edge Microgateway. Пример:
plugins: dir: $HOME/edgemicro/custom/plugins sequence: - oauth - response-uppercase ````Напишите и протестируйте плагин, следуя инструкциям в разделе Как написать простой плагин. Убедитесь, что код плагина размещен в правильной структуре каталогов. Пример:
custom | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsonЗапустите контейнер 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Вызовите API, чтобы протестировать плагин.
Подробнее о томах [общих файловых системах]…
Вариант Б. Встройте плагины в контейнер
В этом случае вы встраиваете плагины в контейнер.
1. Как упаковать плагины
Напишите и протестируйте плагин, следуя инструкциям в разделе Как написать простой плагин.
Разместите код плагина в правильной структуре каталогов. Каталоги плагинов должны иметь определенную структуру. В следующем примере показана структура, которую необходимо использовать.
response-uppercaseиrequest-headers– это названия папок с кодом пользовательского плагина (названия приведены в качестве примера, ваши папки могут называться иначе).plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsoncdв папкуplugin.В папке
pluginзаархивируйте всю папкуplugins:zip -r plugins.zip plugins/
2. Как создать образ Docker
Затем создайте Dockerfile, чтобы добавить код плагина в образ Edge Microgateway.
- В том же каталоге, где находится ZIP-файл, создайте новый файл с названием
Dockerfile. Добавьте в файл
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"]Создайте новый образ Docker Edge Microgateway с вашими плагинами:
docker build -t image-name .Пример:
docker build -t edgemicroplugins .
3. Как обновить конфигурацию Edge Microgateway
Теперь, когда плагины упакованы, их нужно добавить в файл конфигурации Edge Microgateway.
Откройте файл конфигурации Edge Microgateway в редакторе:
$HOME/.edgemicro/org-env-config.yaml
Пример:
vi $HOME/.edgemicro/myorg-test-config.yaml
Добавьте каталог плагинов в файл конфигурации. В приведенном ниже примере атрибут
dirуказывает местоположение кода плагина (которое вы задали в файле Dockerfile). Также необходимо указать название каталога плагинов. В примере ниже этоresponse-uppercase.edgemicro: ... plugins: dir: /opt/apigee/plugins sequence: - oauth - response-uppercase
4. Как запустить микрошлюз
Наконец, вам нужно запустить микрошлюз в контейнере.
Выполните следующую команду, чтобы закодировать в формате 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`
Запуск 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
Вызовите 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!