查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
本主題說明如何在 Docker 容器中執行 Edge Microgateway。步驟 本主題中會假設您對 Docker、Docker 指令和 Edge Microgateway 有基本瞭解 設定與配置適用對象 詳情請參閱 Docker 說明文件 和 Edge Microgateway
必要條件
在 Docker 容器中執行 Edge Microgateway 之前,您必須執行下列操作 工作:
為您的 Apigee 機構/環境設定 Edge Microgateway:
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
指令時使用的環境您需要準備 這個檔案會在 Docker 容器中啟動 Edge Microgateway請確認您具備執行 Cloud Shell 時傳回的金鑰和密鑰
edgemicro config
指令。例如:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
在 Docker 容器中啟動 Edge Microgateway 之前,您必須建立 (或已建立) 所需的 Apigee Edge 實體 以執行通過驗證的 API Proxy 呼叫這些實體包括具備 Edge Microgateway 感知功能的實體 Proxy、API 產品、開發人員和開發人員應用程式如需完整指示,請參閱: 在 Apigee Edge 上建立實體。
以 Docker 容器的形式執行 Edge Micro
下載 Edge Microgateway 的 Docker 映像檔:
敬上docker pull gcr.io/apigee-microgateway/edgemicro:latest
執行下列指令,對 Edge Microgateway 設定檔進行 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 Microgateway。這個指令會設定多個環境變數 來啟動 Edge Microgateway 時使用的版本:
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 執行參考資料。 -p
明確對應單一通訊埠或通訊埠範圍。另請參閱 Docker 執行參考資料。 -d
以卸離模式執行。另請參閱 Docker 執行參考資料。 -v, --volume
指定磁碟區掛接項目。請注意,如果設定 Edge Microgateway 如要在 Docker 容器中使用 TLS,您必須公開通訊埠 8443 掛接記錄檔目錄。另請參閱「VOLUME [共用檔案系統]」。另請參閱在 Docker 容器中使用 TLS 一文。 EDGEMICRO_ORG
用來設定 Edge Microgateway 的 Apigee 機構名稱。 EDGEMICRO_ENV
用來設定 Edge Microgateway 的 Apigee 環境名稱, EDGEMICRO_PROCESSES
要啟動的程序數量。 EDGEMICRO_KEY
設定 Edge Microgateway 時傳回的金鑰。 EDGEMICRO_SECRET
設定 Edge Microgateway 時傳回的密鑰。 EDGEMICRO_CONFIG
包含 Base64 編碼 Edge Microgateway 設定檔的變數。 SERVICE_NAME
如果是 Kubernetes,則會自動填入這個參數。否則 可以調整任何設定如果未指定,服務 名稱已設為「 default
」DEBUG
設為 *
即可啟用偵錯功能。HTTP_PROXY
HTTPS_PROXY
使用 Edge Microgateway 時 在防火牆後方運作,且閘道無法與 Apigee 通訊 邊緣如要 相關資訊,請參閱在公司防火牆後方設定 Edge Microgateway。 例如:
HTTP_PROXY=http://10.203.0.1:5187/
NO_PROXY
Edge Microgateway 不應 Proxy 的目標網域清單 (以半形逗號分隔)。 詳情請參閱「在公司防火牆後方設定 Edge Microgateway」。 例如:
localhost,127.0.0.1,localaddress,.localdomain.com
NODE_EXTRA_CA_CERTS
(選用) 如果您使用不受信任的 CA,請使用這個參數 預設使用 Node.js將此參數的值設為 檔案,其中包含一或多個信任憑證 (PEM 格式)。適用對象 詳情請參閱「傳輸層安全標準 (TLS) 憑證」。 --security-opt
(選用) 設定所需的 Docker 安全性選項。請參閱 Docker 說明文件中的安全性設定。 --cap-drop
(選用) 針對容器中允許的 Linux 功能設定限制。請參閱 Docker 說明文件中的「執行階段權限和 Linux 功能」。 例如:
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 金鑰的 API
在 Edge UI 中,前往您先前建立的開發人員應用程式。開發人員專區 應用程式頁面,顯示並複製用戶端金鑰。這個值是 API 金鑰。您會用到 以便進行驗證 API 呼叫
使用 x-api-key
標頭呼叫 API,如下所示。用戶端金鑰值
從開發人員應用程式複製而來的是 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"
如要進一步瞭解如何透過 Edge Microgateway 執行通過驗證的 API 呼叫 使用 API 金鑰和 OAuth 權杖,請參閱第 4 部分:安全 Edge Microgateway。
停止 Edge Microgateway
使用以下 Docker 指令停止 Edge Microgateway:
docker stop edgemicro
正在重新啟動 Edge Microgateway
停止 Edge Microgateway 後,您可以使用下列 Docker 指令重新啟動它:
docker start edgemicro
在 Docker 容器中使用 TLS
本節說明如何為 Edge Microgateway 執行中的 TLS 設定作業 Cloud Build 會以一系列步驟執行建構 每一步都會在 Docker 容器中執行您可以設定 Edge Microgateway 伺服器使用 TLS 針對傳入要求 (北向方向),您可以設定 Edge 向目標端點傳出要求時,做為傳輸層安全標準 (TLS) 用戶端的微閘道 (往南方向)。
憑證檔案存放位置
執行 Edge Microgateway 的 Docker 容器在 /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
如果您使用的是預設不受信任的憑證授權單位 (CA)
Node.js (例如使用自行簽署憑證的情況),請考慮使用
執行容器時,NODE_EXTRA_CA_CERTS
參數。
將這項參數設為包含一或多個檔案的路徑 PEM 格式的信任憑證。若要瞭解此參數的使用方式,請參閱 範例:如何設定向北傳輸層安全標準 (TLS) 和如何設定向南傳輸層安全標準 (TLS)。
例如:
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 Microgateway停用 TLS 的功能 根據預設,邊緣並未內建於 Edge Microgateway Docker 容器中。完成 就必須為 Edge Microgateway 建立自訂 Docker 映像檔。低於 是建構自訂映像檔及停用 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
選項。 例如:
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 Microgateway 上設定北入 (傳入) TLS 連線 伺服器北方 TLS 允許用戶端在向 Edge Microgateway 發出 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 Microgateway (如果尚未設定)。完成後, 都應已建立 Edge Microgateway 感知 Proxy、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: ...
執行以下指令,為 Edge Microgateway 設定檔進行 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 Micro 做為 Docker 容器執行。
4. 執行容器
執行下列指令,使用 Edge Microgateway 執行 Docker 容器:
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
變數的用途是新增自訂 CA (視情況而定) 自行簽署的憑證)。
5. 測試 TLS 設定
執行下列 cURL 指令來測試設定。替代 將 basepath 和 API 金鑰新增至指令以下範例假設您位於
rootca.pem
位於位置,且您建立的 Proxy 具有/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)
本節說明如何在 包括 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);
在與
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 Microgateway 感知 Proxy。如需更多資訊 請參閱「在 Edge 上建立 Edge Microgateway-aware API Proxy」。
- Proxy 名稱:
edgemicro_local
- 修訂版本:
1
- Basepath:
/local
- 目標:
https://helloworld:9443
- Proxy 名稱:
建立 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 Microgateway 設定檔進行 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 Microgateway。
敬上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 指令來測試設定。替代 也就是您在微閘道感知 Proxy 中所用的基本路徑 從您在 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 Microgateway,但這次請新增
NODE_EXTRA_CA_CERTS
變數。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 執行個體:
本節其餘部分會假設 您熟悉的 適用標準 Edge Microgateway 設定的外掛程式。如果沒有,請參閱「開發自訂外掛程式」。
選項 A:將外掛程式目錄掛接至磁碟區
(已在 v.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
: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 [共用檔案系統]」。
選項 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 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"]
使用外掛程式建立新的 Edge Microgateway Docker 映像檔:
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. 啟動微門
最後,您必須啟動容器中的微門。
執行下列指令,對 Edge Microgateway 設定檔進行 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 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!