شما در حال مشاهده اسناد 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، یک Developer و یک Developer App است. برای دستورالعملهای کامل، به ایجاد موجودیتها در Apigee Edge مراجعه کنید.
Edge Micro را به عنوان یک ظرف Docker اجرا کنید
دانلود تصویر Docker برای Edge Microgateway:
docker pull gcr.io/apigee-microgateway/edgemicro:latest
قبل از اینکه به مراحل بعدی بروید، مطمئن شوید که تمام مراحل در قسمت پیش نیازها را انجام داده اید.
دستور زیر را اجرا کنید تا فایل پیکربندی Edge Microgateway که در
$HOME/.edgemicro
قرار دارد را در base64-encode کنید: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 را به عنوان یک ظرف اجرا کنید. این دستور چندین متغیر محیطی را تنظیم می کند که توسط Container Runtime برای راه اندازی 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 مراجعه کنید. -p
به صراحت یک پورت یا محدوده ای از پورت ها را نقشه برداری کنید. همچنین به مرجع اجرای Docker مراجعه کنید. -d
در حالت جدا شده اجرا کنید. همچنین به مرجع اجرای Docker مراجعه کنید. -v, --volume
پایه تنظیم صدا را مشخص می کند. توجه داشته باشید که اگر Edge Microgateway را برای استفاده از TLS در کانتینر Docker پیکربندی میکنید، در صورت مونت کردن فهرست فایل log، باید پورت 8443 را در معرض نمایش قرار دهید. همچنین VOLUME [فایل سیستمهای مشترک] را ببینید. همچنین استفاده از TLS در کانتینر Docker را ببینید. EDGEMICRO_ORG
نام سازمان Apigee که برای پیکربندی Edge Microgateway استفاده کردید. EDGEMICRO_ENV
نام محیط Apigee که برای پیکربندی Edge Microgateway استفاده کردید. EDGEMICRO_PROCESSES
تعداد فرآیندهایی که باید شروع شوند. EDGEMICRO_KEY
هنگامی که Edge Microgateway را پیکربندی کردید، کلید بازگشت. EDGEMICRO_SECRET
هنگامی که Edge Microgateway را پیکربندی کردید، این راز بازگشت. EDGEMICRO_CONFIG
متغیری حاوی فایل پیکربندی Edge Microgateway کدگذاری شده با base64. SERVICE_NAME
اگر در Kubernetes هستید، این پارامتر به صورت خودکار پر می شود. در غیر این صورت، می توانید آن را روی هر چیزی که می خواهید تنظیم کنید. اگر چیزی را مشخص نکنید، نام سرویس روی default
تنظیم میشود.DEBUG
برای فعال کردن اشکال زدایی، روی *
تنظیم کنید.HTTP_PROXY
HTTPS_PROXY
زمانی که Edge Microgateway پشت فایروال اجرا می شود و دروازه نمی تواند با Apigee Edge ارتباط برقرار کند، استفاده کنید. برای اطلاعات بیشتر، به راه اندازی Edge Microgateway در پشت فایروال شرکت مراجعه کنید. به عنوان مثال:
HTTP_PROXY=http://10.203.0.1:5187/
NO_PROXY
فهرستی از دامنههایی که Edge Microgateway نباید به آنها پروکسی کند. برای اطلاعات بیشتر، به راه اندازی Edge Microgateway در پشت فایروال شرکت مراجعه کنید. به عنوان مثال:
localhost,127.0.0.1,localaddress,.localdomain.com
NODE_EXTRA_CA_CERTS
(اختیاری) اگر از CA استفاده می کنید که به طور پیش فرض توسط Node.js قابل اعتماد نیست، از این پارامتر استفاده کنید. مقدار این پارامتر را روی مسیر یک فایل حاوی یک یا چند گواهی قابل اعتماد در قالب PEM تنظیم کنید. برای جزئیات، به گواهیهای TLS مراجعه کنید. --security-opt
(اختیاری) گزینه های امنیتی Docker مورد نظر را تنظیم می کند. تنظیمات امنیتی را در مستندات Docker ببینید. --cap-drop
(اختیاری) محدودیت هایی را برای قابلیت های لینوکس مجاز در کانتینر تعیین می کند. امتیاز Runtime و قابلیت های لینوکس را در مستندات Docker ببینید. به عنوان مثال:
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 را با یک کلید API معتبر تست کنید
در رابط کاربری Edge، به برنامه توسعه دهنده ای که قبلا ایجاد کرده اید بروید. در صفحه Developer App، Consumer Key را نشان داده و آن را کپی کنید. این مقدار کلید API است. از این کلید برای برقراری تماس های API احراز هویت شده استفاده خواهید کرد.
API را با هدر x-api-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 را ببینید.
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
...
استفاده از CA که مورد اعتماد Node.js نیست
اگر از یک Certificate Authority (CA) استفاده میکنید که بهطور پیشفرض توسط Node.js مورد اعتماد نیست (مانند موردی که در مورد گواهی امضا شده توسط خود وجود دارد)، هنگام اجرای کانتینر، از پارامتر NODE_EXTRA_CA_CERTS
استفاده کنید.
این پارامتر را روی مسیر یک فایل حاوی یک یا چند گواهی قابل اعتماد در قالب PEM تنظیم کنید. برای مشاهده نحوه استفاده از این پارامتر، به مثالهای How to configure Northbound TLS و How to configure southbound 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
همچنین Run 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 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: ...
دستور زیر را برای کدگذاری فایل پیکربندی 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`
همچنین به Run 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
برای افزودن یک CA سفارشی (در صورت نیاز در مورد گواهیهای خودامضا) استفاده میشود.
-
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 build -t helloworld .
برنامه نمونه را راه اندازی کنید:
docker run -P -p 9443:9443 --name helloworld helloworld
3. موجودیت ها را در Apigee Edge ایجاد کنید
با این تنظیمات یک پروکسی Edge Microgateway-aware ایجاد کنید. برای اطلاعات بیشتر، به ایجاد یک پروکسی 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: ...
دستور زیر را برای کدگذاری فایل پیکربندی 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 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 زیر را برای تست تنظیمات اجرا کنید. مسیر پایه ای را که در پروکسی microgateway-aware استفاده کرده اید و کلید API بدست آمده از برنامه Developer که در 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
افزودن یک افزونه سفارشی
با نوشتن افزونه های سفارشی می توانید ویژگی ها و قابلیت های جدیدی را به microgateway اضافه کنید. پلاگین های سفارشی به شما امکان می دهند با درخواست ها و پاسخ هایی که از طریق microgateway جریان می یابند به صورت برنامه نویسی تعامل داشته باشید.
شما دو گزینه برای استقرار پلاگین ها در یک نمونه Edge Microgateway دارید که در یک کانتینر داکر اجرا می شود:
بقیه این بخش فرض می کند که شما با نوشتن و پیکربندی پلاگین ها برای راه اندازی استاندارد Edge Microgateway آشنا هستید. اگر نه، به توسعه افزونه های سفارشی مراجعه کنید.
گزینه A: دایرکتوری پلاگین ها را روی یک جلد قرار دهید
(افزوده شده در نسخه 2.5.27) مراحل اضافه کردن پلاگین ها از طریق یک ولوم مونت مشابه مراحل مورد نیاز برای افزودن هر پلاگین سفارشی به Edge Microgateway است. هنگامی که کانتینر Docker را اجرا می کنید، می توانید دایرکتوری پلاگین ها را در سیستم محلی خود (حجم) روی نقطه نصب کانتینر که /opt/apigee/plugins
است، نصب کنید. سپس دایرکتوری حجم محلی را در فایل پیکربندی Edge Microgateway مشخص کنید.
مراحل زیر نحوه استفاده از نقطه اتصال Docker برای گنجاندن افزونه های سفارشی را نشان می دهد.
Stop Edge Microgateway:
edgemicro stop
یک دایرکتوری برای پلاگین های سفارشی خود ایجاد کنید. مثلا ایجاد کنید
$HOME/edgemicro/custom/plugins
دایرکتوری پلاگین سفارشی را به فایل پیکربندی Edge Microgateway اضافه کنید. به عنوان مثال:
plugins: dir: $HOME/edgemicro/custom/plugins sequence: - oauth - response-uppercase ````
افزونه خود را با توجه به دستورالعمل های موجود در Write a simple plugin بنویسید و تست کنید. حتما کد پلاگین خود را در ساختار دایرکتوری مناسب قرار دهید. به عنوان مثال:
custom | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.json
کانتینر Docker را با دستوری شبیه به دستور زیر اجرا کنید، جایی که از گزینه
-v
برای مونت کردن دایرکتوری افزونه ها بر روی حجم داکر استفاده می کنید. در دستور مثال زیر، دایرکتوری پلاگینها$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 [فایل سیستمهای مشترک] را ببینید.
گزینه B: افزونه ها را در کانتینر بسازید
در این گزینه شما افزونه ها را در کانتینر خود می سازید.
1. پلاگین های خود را بسته بندی کنید
افزونه خود را با توجه به دستورالعمل های موجود در Write a simple plugin بنویسید و تست کنید.
کد پلاگین خود را در ساختار دایرکتوری مناسب قرار دهید. دایرکتوری های پلاگین باید از یک ساختار مجموعه پیروی کنند. مثال زیر ساختاری را نشان میدهد که باید از آن پیروی کنید، که در آن
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 اضافه کنید.
- در همان دایرکتوری که فایل فشرده در آن قرار دارد، یک فایل جدید به نام
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 که در
$HOME/.edgemicro
قرار دارد را در base64-encode کنید: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 را به عنوان یک ظرف اجرا کنید. این دستور چندین متغیر محیطی را تنظیم می کند که توسط Container Runtime برای راه اندازی 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!