Вы просматриваете документацию 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
Дополнительные сведения о настройке см. в разделе «Часть 1. Настройка 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 "LOG_CONSOLE_OUTPUT_TO_FILE=false" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL \ gcr.io/apigee-microgateway/edgemicro:latest
Параметры
Параметр Описание -P
Опубликуйте все открытые порты на хосте. См. также Справочник по запуску Docker . -p
Явно сопоставьте один порт или диапазон портов. См. также Справочник по запуску Docker . -d
Запуск в автономном режиме. См. также Справочник по запуску Docker . -v, -- volume
Указывает монтирование тома. Обратите внимание: если вы настраиваете Edge Microgateway для использования TLS в контейнере Docker, вам необходимо открыть порт 8443, если вы монтируете каталог файла журнала. См. также VOLUME [общие файловые системы] . См. также Использование TLS в Docker-контейнере . -w, -- workdir
(Необязательно) Указывает путь к каталогу, в котором должны быть созданы файлы edgemicro.sock
иedgemicro.pid
. Вы не можете изменить корневое имя файлаedgemicro
. По умолчанию используется текущий путь к рабочему каталогу.Пример:
docker run -P -p 8000:8000 -d -w /tmp --name edgemicro
...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. LOG_CONSOLE_OUTPUT_TO_FILE
(Логическое значение) Позволяет указать, куда отправляются выходные данные журнала. См. раздел «Указание параметров файла журнала» . <tr> <td><code>SERVICE_NAME</code></td> <td>If you are on Kubernetes, this parameter is auto-populated. Otherwise, you can set it to anything you wish. If you specify nothing, the service name is set to <code>default</code>.</td> </tr> <tr> <tr> <td><code>DEBUG</code></td> <td>Set to <code>*</code> to enable debugging. </td> </tr> <tr> <td><code>HTTP_PROXY</code> <code>HTTPS_PROXY</code></td> <td>Use when Edge Microgateway is running behind a firewall and the gateway cannot communicate with Apigee Edge. For more information, see <a href="operation-and-configuration-reference-edge-microgateway#settingupedgemicrogatewaybehindacompanyfirewall">Setting up Edge Microgateway behind a company firewall</a>. <p>For example: <code>HTTP_PROXY=http://10.203.0.1:5187/</code></p></td> </tr> <tr> <td><code>NO_PROXY</code></td> <td>A comma delimited list of domains that Edge Microgateway should not proxy to. For more information, see <a href="operation-and-configuration-reference-edge-microgateway#settingupedgemicrogatewaybehindacompanyfirewall">Setting up Edge Microgateway behind a company firewall</a>. <p>For example: <code>localhost,127.0.0.1,localaddress,.localdomain.com</code></p></td> </tr> <tr> <tr> <tr> <td><code>NODE_EXTRA_CA_CERTS</code></td> <td>(Optional) Use this parameter if you are using a CA that's not trusted by default by Node.js. Set the value of this parameter to the path to a file containing one or more trusted certificates in PEM format. For details, see <a href="#tls_certificates">TLS certificates</a>.</td> </tr> <tr> <td><code>--security-opt</code></td> <td>(Optional) Sets desired Docker security options. See <a href="https://docs.docker.com/engine/reference/run/#security-configuration">Security configuration</a> in the Docker documentation.</td> </tr> <tr> <td><code>--cap-drop</code></td> <td>(Optional) Sets limits on Linux capabilities permitted in the container. See <a href="https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities">Runtime privilege and Linux capabilities</a> in the Docker documentation.</td> </tr> </tbody>
Например:
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
Указание параметров вывода файла журнала
Параметр конфигурации Edge Microgateway to_console позволяет отправлять информацию журнала на стандартный вывод, а не в файл журнала. Если вы выполните действия по запуску Edge Microgateway в контейнере Docker, контейнер по умолчанию перенаправляет стандартный вывод и вывод ошибок в файл, расположенный в контейнере по адресу:
${APIGEE_ROOT}/logs/edgemicro.log
.Чтобы предотвратить отправку информации журнала в
edgemicro.log
, используйте переменнуюLOG_CONSOLE_OUTPUT_TO_FILE
при запуске контейнера.В следующей таблице описано поведение вывода журнала при использовании
LOG_CONSOLE_OUTPUT_TO_FILE
сto_console
:to_console: true
LOG_CONSOLE_OUTPUT_TO_FILE=false
- Никакие журналы не будут отправляться в файл журнала Edge Microgateway, как описано в разделе «Управление файлами журналов» .
- Журналы не будут отправляться в файл
edgemicro.log
.
to_console: true
LOG_CONSOLE_OUTPUT_TO_FILE=true
- Никакие журналы не будут отправляться в файл журнала Edge Microgateway, как описано в разделе «Управление файлами журналов» .
- Журналы будут отправляться в файл
edgemicro.log
.
to_console: false
LOG_CONSOLE_OUTPUT_TO_FILE=true
- Журналы будут отправляться в файл журнала Edge Microgateway, как описано в разделе «Управление файлами журналов» .
- Журналы будут отправляться в файл
edgemicro.log
.
Тестирование вызова 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 с действительным ключом API
В пользовательском интерфейсе Edge перейдите к созданному ранее приложению разработчика. На странице приложения разработчика покажите Consumer Key и скопируйте его. Это значение является ключом 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: Secure Edge Microgateway .
Остановочный край микрошлюза
Используйте следующую команду Docker, чтобы остановить Edge Microgateway:
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 не доверяет.
Если вы используете центр сертификации (CA), которому 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 по умолчанию не встроена в контейнер Edge Microgateway Docker. Для выполнения этой задачи необходимо создать индивидуальный образ 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.key
-
rootca.pem
-
tls.key
-
tls.csr
-
rootca.srl
-
tls.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: ...
Выполните следующую команду, чтобы закодировать в 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 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
Обратите внимание на следующие параметры, используемые в команде; они отличаются от базовой команды, описанной в Run 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
Дополнительные сведения о настройке см. в разделе Часть 1. Настройка 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.key
-
rootca.pem
-
tls.key
-
tls.csr
-
rootca.srl
-
tls.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 для включения пользовательских плагинов.
Остановить пограничный микрошлюз:
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, чтобы протестировать плагин.
Дополнительную информацию см. в разделе VOLUME [общие файловые системы] .
Вариант Б. Встройте плагины в контейнер.
В этом варианте вы встраиваете плагины в свой контейнер.
1. Упакуйте свои плагины
Напишите и протестируйте свой плагин, следуя инструкциям в разделе «Написание простого плагина» .
Поместите код плагина в правильную структуру каталогов. Каталоги плагинов должны иметь определенную структуру. В следующем примере показана структура, которой вы должны следовать, где
response-uppercase
иrequest-headers
— это имена папок, содержащих собственный код плагина (эти имена являются только примерами, имена ваших папок могут отличаться):plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.json
cd
в папку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!