<ph type="x-smartling-placeholder"></ph>
現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント。 詳細
このトピックでは、Docker コンテナで Edge Appliance を実行する方法について説明します。手順 このトピックは、Docker、Docker コマンド、Edge Appliance の基本知識があることを前提としています。 設定と構成を行います対象 詳細については、Docker のドキュメントをご覧ください。 と Edge マネージャー について説明します。
前提条件
GKE を Docker コンテナで実行する前に、次のことを行う必要があります。 タスク:
Apigee 組織/環境用に Edge Appliance を構成します。
edgemicro configure -o your_org -e your_env -u your_username
構成の詳細については、パート 1: Edge Appliance を構成するをご覧ください。
構成手順を実行したら、構成 フォルダ内の 表示されます。デフォルトの場所は次のとおりです。
$HOME/.edgemicro/your_org-your_env-config.yaml
ここで、
your_org
とyour_env
は組織です。edgemicro config
コマンドを実行したときに使用した環境と環境。次が必要です このファイルは、Docker コンテナで Edge Appliance を起動するときに使用します。次のコマンドを実行したときに返されたキーとシークレットの認証情報を持っていることを確認します。
edgemicro config
コマンドを使用します。例:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
Docker コンテナで Edge Dataproc を起動する前に、サービス アカウントを作成する必要があります。 必要な Apigee Edge エンティティ(または作成済み)を 認証された API プロキシ呼び出しを行いますこれらのエンティティには、Edge API プロダクト、デベロッパー、デベロッパー アプリの 3 つで構成されます。詳しい手順については、以下をご覧ください。 Apigee Edge でエンティティを作成します。
Docker コンテナとして Edge Micro を実行する
Edge Appliance の Docker イメージをダウンロードします。
docker pull gcr.io/apigee-microgateway/edgemicro:latest
次のステップに進む前に、以下のステップをすべて完了していることを確認してください 前提条件セクションを確認してください。
次のコマンドを実行して、Edge Apigee 構成ファイルを base64 エンコードします
$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 AppSheet をコンテナとして実行する。このコマンドは複数の環境変数を設定します。 次のものを指定します。
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、Cloud Router を構成する場合、 Docker コンテナで TLS を使用するには、ポート 8443 を公開する必要があります。 ログファイルのディレクトリをマウントします。VOLUME [共有ファイルシステム] もご覧ください。Docker コンテナでの TLS の使用もご覧ください。 EDGEMICRO_ORG
Edge Appliance の構成に使用した Apigee 組織の名前。 EDGEMICRO_ENV
Edge Appliance の構成に使用した Apigee 環境の名前。 EDGEMICRO_PROCESSES
開始するプロセスの数。 EDGEMICRO_KEY
Edge Appliance を構成したときに返された鍵。 EDGEMICRO_SECRET
Edge Appliance を構成したときに返されたシークレット。 EDGEMICRO_CONFIG
base64 でエンコードされた Edge AppSheet 構成ファイルを含む変数。 SERVICE_NAME
Kubernetes を使用している場合、このパラメータは自動的に入力されます。それ以外の場合は 自由に設定できます。何も指定しない場合、サービスは 名前は default
に設定されています。DEBUG
デバッグを有効にするには、 *
に設定します。HTTP_PROXY
HTTPS_PROXY
次の場合に使用 ファイアウォールの背後で動作していて、ゲートウェイが Apigee と通信できない 。詳細 詳しくは、会社のファイアウォールの内側で Edge Appliance を設定するをご覧ください。 例:
HTTP_PROXY=http://10.203.0.1:5187/
NO_PROXY
Edge AppSheet がプロキシしないドメインのカンマ区切りリスト。 詳細については、会社のファイアウォールの内側で Edge Appliance を設定するをご覧ください。 例:
localhost,127.0.0.1,localaddress,.localdomain.com
NODE_EXTRA_CA_CERTS
(省略可)信頼されていない CA を使用している場合は、このパラメータを使用します。 Node.js によりデフォルトで作成されます。このパラメータの値は、 PEM 形式の信頼できる証明書が 1 つ以上含まれています。対象 詳しくは、TLS 証明書をご覧ください。 --security-opt
(省略可)必要な Docker セキュリティ オプションを設定します。Docker ドキュメントのセキュリティ構成をご覧ください。 --cap-drop
(省略可)コンテナで許可される Linux 機能に上限を設定します。Docker ドキュメントのランタイム権限と 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 Appliance を起動すると、API 呼び出しを行うことができます。
たとえば、API のベースパスが /hello
の場合は、次のようになります。
http://localhost:8000/hello
出力例:
{"error":"missing_authorization","error_description":"Missing Authorization header"}
このレスポンスが表示された場合、Edge Dataproc によって正常に処理されたことを意味します。 作成されます。ただし、デフォルトでは、Edge API の認証には API キーが必要です。 次のセクションでは、有効な API キーを使用して API をテストします。
有効な API キーで API をテストする
Edge UI で、前に作成したデベロッパー アプリに移動します。デベロッパー内 コンシューマ キーを表示してコピーします。この値が API キーです。使用する 認証された API 呼び出しを行うことができます。
次のように x-api-key
ヘッダーを使用して API を呼び出します。このコンシューマ キーの値には、
API キーになります。デフォルトでは、
次のように、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"
Edge Appliance を通じて認証済み API 呼び出しを行う方法の詳細を知りたい場合 API キーと OAuth トークンを使用する方法については、パート 4: Edge Appliance を保護するをご覧ください。
Edge Appliance の停止
次の Docker コマンドを使用して Edge AppSheet を停止します。
docker stop edgemicro
Edge Appliance の再起動
Edge Appliance を停止した後、次の Docker コマンドを使用して再起動できます。
docker start edgemicro
Docker コンテナでの TLS の使用
このセクションでは、実行中の Edge Appliance に対して TLS を構成する方法について説明します。 Docker コンテナで実行しますTLS を使用するように Edge Appliance サーバーを構成できます。 受信リクエスト(上り方向)に対して設定できます。また、Edge は、 ターゲット エンドポイントへの送信リクエスト用の TLS クライアントとしての AppSheet (南に向かう方向)。
証明書ファイルの配置場所
Edge Appliance を実行している Docker コンテナには、/opt/apigee/.edgemicro
にマウント ポイントがあります。
TLS 証明書を使用するように Edge Appliance を構成すると、
そのマウント ポイントで利用可能な証明書ファイルを作成し、
Edge Appliance の構成ファイル。通常、この構成ファイルは $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 を使用する
デフォルトで信頼されていない認証局(CA)を
Node.js(自己署名証明書を使用する場合など)は、
コンテナの実行時にパラメータ NODE_EXTRA_CA_CERTS
を設定します。
このパラメータを、1 つ以上のファイルを含むファイルのパスに設定します。 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
Docker コンテナとして Edge Micro を実行するもご覧ください。
TLS 検証の無効化
推奨されませんが、場合によっては TLS 検証を無効にすることをおすすめします コンテナで実行している Edge Appliance のものです。TLS を無効にする機能 デフォルトでは、これは Edge Appliance の Docker コンテナに組み込まれていません。目的 Edge Appliance 用にカスタマイズされた Docker イメージを作成する必要があります。下回っている は、カスタム イメージを作成し、TLS 検証を無効にするための一般的な手順です。
次の場所から Edge Appliance のソース リポジトリのクローンを作成するかダウンロードします。
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 の構成方法
このセクションでは、Edge Gateway でノースバウンド(受信)TLS 接続を設定する方法について説明します。 あります。ノースバウンド TLS では、クライアントが Edge Appliance への API 呼び出しを行うときに HTTPS を使用できます。 次の例では、自己署名証明書を使用しています。
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 Appliance を構成します(まだ構成していない場合)。完了すると、 作成する必要があります。 2 つありますまた、
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 AppSheet 構成ファイルを編集する
エディタで 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 Dataproc 構成ファイルを base64 エンコードします
$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`
Docker コンテナとして Edge Micro を実行するもご覧ください。
4. コンテナを実行する
次のコマンドを実行して、Edge Appliance で 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 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
コマンドで使用されている次のパラメータに注意してください。基本的な Pod の Docker コンテナとして Edge Micro を実行するで説明されているコマンドを実行できます。
port
は8443
に設定します。- ボリューム マウントは、鍵ファイルと証明書ファイルをマウントするために使用されます。
NODE_EXTRA_CA_CERTS
変数は、カスタム CA を追加するために使用されます(必要な場合)。 自己署名証明書)が含まれます。
5. TLS 構成をテストする
次の cURL コマンドを実行して、設定をテストします。代替 ベースパスと API キーをコマンドに追加します次の例では、現在のディレクトリが
rootca.pem
が配置されていて、作成したプロキシのベースパス/hello
があることを確認します。curl -v https://localhost:8443/hello --cacert rootca.pem \ -H "x-api-key: Az82fdnfONVCOOE4NKhajxAboDgA3FAo"
詳細な cURL 出力には、 TLS handshakeHTTP 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 接続を設定する方法について説明します。 バックエンド ターゲット アプリケーションの間の接続です。以下の例では、 自己署名証明書を使用できます。
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 Appliance を構成するをご覧ください。
返されたキーとシークレットの認証情報をコピーします。
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);
server.js
と同じディレクトリにpackage.json
ファイルを作成します。例:{ "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
を実行して依存関係を取得します。server.js
と同じディレクトリに新しい Dockerfile を作成します。ここで、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 Appliance 対応のプロキシを作成します。詳しくは Edge で Edge AppSheet 対応 API プロキシを作成するをご覧ください。
- プロキシ名:
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: ...
次のコマンドを実行して、
$HOME/.edgemicro
にある Edge Appliance 構成ファイルを 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`
次のコマンドを実行して、Docker コンテナで Edge Appliance を起動します。
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 コマンドを実行して、設定をテストします。代替 ゲートウェイ対応プロキシで使用したベースパスと Apigee Edge で作成したデベロッパー アプリから取得した API キー。例:
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 Appliance を再実行しますが、今回は
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
カスタム プラグインの追加
custom プラグインをご覧ください。カスタム プラグインを使用すると、プログラムでリクエストを操作できる レスポンスが返されます。
Edge Appliance にプラグインをデプロイする方法は 2 つあります。 作成する方法の例を紹介します。
このセクションの残りの部分では、 Google Cloud 環境で記述、構成する慣れ親しんだ 使用しています。ない場合は、カスタム プラグインを開発するをご覧ください。
オプション A: プラグイン ディレクトリをボリュームにマウントする
(v.2.5.27 で追加)ボリューム マウントを使用してプラグインを追加する手順は、次のとおりです。
Edge Appliance にカスタム プラグインを追加するために必要な手順とほぼ同じです。日時
ローカルにプラグイン ディレクトリをマウントして、
コンテナのマウント ポイント(/opt/apigee/plugins
)のシステム(ボリューム)。
次に、Edge AppSheet 構成ファイルでローカル ボリューム ディレクトリを指定します。
次の手順では、Docker マウント ポイントを使用してカスタム 使用できます。
Edge Appliance を停止します。
edgemicro stop
カスタム プラグイン用のディレクトリを作成します。たとえば、
$HOME/edgemicro/custom/plugins
Edge Scanner 構成ファイルにカスタム プラグイン ディレクトリを追加します。例:
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 [shared filesystems] をご覧ください。
オプション B: コンテナにプラグインをビルドする
この方法では、プラグインをコンテナにビルドします。
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 Appliance イメージに追加します。
- 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"]
プラグインを含む新しい Edge Appliance Docker イメージを作成します。
docker build -t image-name .
例:
docker build -t edgemicroplugins .
3. Edge Appliance の構成を更新する
プラグインをパッケージ化したので、Edge Appliance にプラグインを追加する必要があります。 構成ファイルが更新されます。
エディタで Edge Dataproc 構成ファイルを開きます。
$HOME/.edgemicro/org-env-config.yaml
例:
vi $HOME/.edgemicro/myorg-test-config.yaml
プラグイン ディレクトリを構成ファイルに追加します。次に例を示します。
dir
属性は、プラグイン コードの場所を指定します( 。プラグイン ディレクトリの名前も指定する必要があります。 以下の例では、response-uppercase
です。edgemicro: ... plugins: dir: /opt/apigee/plugins sequence: - oauth - response-uppercase
4. Apigee を起動する
最後に、コンテナでマイクロゲートウェイを起動する必要があります。
次のコマンドを実行して、Edge Apigee 構成ファイルを base64 エンコードします
$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 AppSheet をコンテナとして実行する。このコマンドは複数の環境変数を設定します。 次のものを指定します。
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!