شما در حال مشاهده مستندات 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-aware، یک محصول API، یک Developer و یک Developer App هستند. برای دستورالعملهای کامل، به Create entitys on Apigee Edge مراجعه کنید.
اجرای Edge Micro به عنوان یک کانتینر 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 استفاده میشوند:
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 استفاده کند، هنگام نصب دایرکتوری فایل لاگ باید پورت ۸۴۴۳ را در معرض دید قرار دهید. همچنین به VOLUME [سیستمهای فایل مشترک] مراجعه کنید. همچنین به استفاده از TLS در کانتینر Docker مراجعه کنید. EDGEMICRO_ORGنام سازمان Apigee که برای پیکربندی Edge Microgateway از آن استفاده کردهاید. EDGEMICRO_ENVنام محیط Apigee که برای پیکربندی Edge Microgateway استفاده کردهاید. EDGEMICRO_PROCESSESتعداد فرآیندهایی که باید شروع شوند. EDGEMICRO_KEYکلید هنگام پیکربندی Edge Microgateway بازگردانده شد. EDGEMICRO_SECRETاین راز وقتی که Edge Microgateway را پیکربندی کردید، برگشت. EDGEMICRO_CONFIGمتغیری حاوی فایل پیکربندی Edge Microgateway کدگذاری شده با base64. SERVICE_NAMEاگر از Kubernetes استفاده میکنید، این پارامتر به صورت خودکار پر میشود. در غیر این صورت، میتوانید آن را روی هر چیزی که میخواهید تنظیم کنید. اگر چیزی مشخص نکنید، نام سرویس به defaultتنظیم میشود.DEBUGبرای فعال کردن اشکالزدایی، روی *تنظیم کنید.HTTP_PROXYHTTPS_PROXYزمانی استفاده میشود که Edge Microgateway پشت یک فایروال در حال اجرا است و دروازه نمیتواند با Apigee Edge ارتباط برقرار کند. برای اطلاعات بیشتر، به راهاندازی Edge Microgateway پشت یک فایروال شرکت مراجعه کنید. برای مثال:
HTTP_PROXY=http://10.203.0.1:5187/NO_PROXYفهرستی از دامنههایی که Edge Microgateway نباید به آنها پروکسی بدهد، با کاما از هم جدا شده است. برای اطلاعات بیشتر، به «راهاندازی Edge Microgateway پشت فایروال شرکت» مراجعه کنید. برای مثال:
localhost,127.0.0.1,localaddress,.localdomain.comNODE_EXTRA_CA_CERTS(اختیاری) اگر از CA استفاده میکنید که به طور پیشفرض توسط Node.js قابل اعتماد نیست، از این پارامتر استفاده کنید. مقدار این پارامتر را برابر با مسیر فایلی که حاوی یک یا چند گواهی معتبر با فرمت PEM است، تنظیم کنید. برای جزئیات بیشتر، به گواهیهای TLS مراجعه کنید. --security-opt(اختیاری) گزینههای امنیتی مورد نظر داکر را تنظیم میکند. به پیکربندی امنیتی در مستندات داکر مراجعه کنید. --cap-drop(اختیاری) محدودیتهایی را برای قابلیتهای لینوکس مجاز در کانتینر تعیین میکند. به بخش امتیاز زمان اجرا و قابلیتهای لینوکس در مستندات داکر مراجعه کنید. برای مثال:
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، به برنامه توسعهدهندهای که قبلاً ایجاد کردهاید بروید. در صفحه برنامه توسعهدهنده، کلید مصرفکننده را نمایش داده و آن را کپی کنید. این مقدار، کلید 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 بیشتر بدانید، به بخش ۴: Secure Edge Microgateway مراجعه کنید.
متوقف کردن Edge Microgateway
برای متوقف کردن Edge Microgateway از دستور Docker زیر استفاده کنید:
docker stop edgemicro
راهاندازی مجدد Edge Microgateway
پس از متوقف کردن Edge Microgateway، میتوانید آن را با این دستور Docker مجدداً راهاندازی کنید:
docker start edgemicro
استفاده از TLS در کانتینر داکر
این بخش نحوه پیکربندی TLS برای Edge Microgateway که در یک کانتینر Docker اجرا میشود را توضیح میدهد. میتوانید سرور Edge Microgateway را طوری پیکربندی کنید که از TLS برای درخواستهای ورودی (جهت شمال) استفاده کند، و میتوانید Edge Microgateway را طوری پیکربندی کنید که یک کلاینت TLS برای درخواستهای خروجی به سمت نقاط انتهایی هدف (جهت جنوب) باشد.
محل قرار دادن فایلهای گواهینامه
کانتینر داکر که Edge Microgateway را اجرا میکند، یک نقطه اتصال (mount point) در /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 قابل اعتماد نیست
اگر از یک مرجع صدور گواهینامه (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
همچنین به اجرای Edge Micro به عنوان یک کانتینر Docker مراجعه کنید.
غیرفعال کردن اعتبارسنجی TLS
اگرچه توصیه نمیشود، اما در برخی موارد ممکن است بخواهید اعتبارسنجی TLS را برای Edge Microgateway که در یک کانتینر اجرا میشود غیرفعال کنید. قابلیت غیرفعال کردن TLS به طور پیشفرض در کانتینر Docker Edge Microgateway تعبیه نشده است. برای انجام این کار، باید یک تصویر Docker سفارشی برای Edge Microgateway ایجاد کنید. در زیر دستورالعملهای کلی برای ساخت تصویر سفارشی و غیرفعال کردن اعتبارسنجی TLS آمده است.
مخزن منبع Edge Microgateway را از
https://github.com/apigee-internal/microgatewayکپی یا دانلود کنید.cdبه دایرکتوریmicrogateway/kubernetes/docker/edgemicroدر دایرکتوری کد منبع بروید.برای مثال:
cd $HOME/git/microgateway/kubernetes/docker/edgemicroفایل
entrypoint.shرا باز کنید و کد را طوری تغییر دهید که متغیر محیطیNODE_TLS_REJECT_UNAUTHORIZEDرا بپذیرد. بعداً، هنگام اجرای کانتینر، مقداری برای این متغیر تعیین خواهید کرد.ساخت کانتینر داکر:
docker 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 به سمت شمال
این بخش نحوه تنظیم اتصال TLS به سمت شمال (ورودی) را در سرور Edge Microgateway توضیح میدهد. Northbound TLS به کلاینتها اجازه میدهد هنگام برقراری تماسهای API به Edge Microgateway از HTTPS استفاده کنند. مثال زیر از گواهیهای خودامضا استفاده میکند.
۱. مراحل اولیه راهاندازی
- فایل
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برای تولید ویژگیهای SNI مناسب، قطعه کد زیر را به
openssl.cnfاضافه کنید:[ 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-aware، یک محصول API، یک Developer و یک Developer App ایجاد کرده باشید. علاوه بر این، باید دستور
edgemicro configureاجرا کرده و یک کلید و رمز دریافت کرده باشید.
۲. ایجاد گواهیهای خودامضا
در مرحله بعد، گواهیها و کلیدهایی را که برای ایجاد 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برای Common Name استفاده کنید.بررسی کنید که فایلهای زیر ایجاد شده باشند:
-
rootca.key -
rootca.pem -
tls.key -
tls.csr -
rootca.srl -
tls.crt
-
۳. فایل پیکربندی 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» مراجعه کنید.
۴. کانتینر را اجرا کنید
برای اجرای کانتینر داکر با 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 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تنظیم شده است. - از یک volume mount برای mount کردن فایلهای key و cert استفاده میشود.
- متغیر
NODE_EXTRA_CA_CERTSبرای افزودن یک CA سفارشی (در صورت نیاز در مورد گواهیهای خودامضا) استفاده میشود.
-
۵. پیکربندی TLS را آزمایش کنید
برای آزمایش تنظیمات، دستور cURL زیر را اجرا کنید. مسیر پایه و کلید API خود را در دستور جایگزین کنید. مثال زیر فرض میکند که شما در دایرکتوری هستید که
rootca.pemدر آن قرار دارد و پروکسی که ایجاد کردهاید دارای مسیر پایه/helloاست:curl -v https://localhost:8443/hello --cacert rootca.pem \ -H "x-api-key: Az82fdnfONVCOOE4NKhajxAboDgA3FAo"خروجی cURL به صورت کامل، هر مرحله از TLS handshaking را نشان میدهد. اگر پاسخ 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 خروجی (Southbound) بین سرور Edge Microgateway و یک برنامهی کاربردی هدف backend را توضیح میدهد. مثال زیر از گواهیهای self-signed استفاده میکند.
۱. مراحل اولیه راهاندازی
- فایل
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برای تولید ویژگیهای SNI مناسب، قطعه کد زیر را به
openssl.cnfاضافه کنید:[ 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
۲. یک برنامه هدف 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
۳. ایجاد موجودیتها در Apigee Edge
با این تنظیمات، یک پروکسی Edge Microgateway-aware ایجاد کنید. برای اطلاعات بیشتر، به «ایجاد یک پروکسی Edge Microgateway-aware API در Edge» مراجعه کنید.
- نام پروکسی:
edgemicro_local - ویرایش:
1 - مسیر پایه:
/local - هدف:
https://helloworld:9443
- نام پروکسی:
یک محصول API ایجاد کنید. برای جزئیات بیشتر، به ایجاد یک محصول مراجعه کنید.
ایجاد یک توسعهدهنده. برای جزئیات بیشتر، به ایجاد یک توسعهدهنده مراجعه کنید.
یک برنامه توسعهدهنده ایجاد کنید. برای جزئیات بیشتر، به «ایجاد یک برنامه توسعهدهنده» مراجعه کنید.
۴. کانتینر را اجرا کنید
فایل پیکربندی 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 اجرا کنید.
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
۵. پیکربندی TLS را آزمایش کنید
برای آزمایش تنظیمات، دستور cURL زیر را اجرا کنید. مسیر پایهای که در پروکسی microgateway-aware استفاده کردهاید را با کلید 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را اضافه کنید.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 آشنا هستید. در غیر این صورت، به بخش «توسعه افزونههای سفارشی» مراجعه کنید.
گزینه الف: پوشه افزونهها را روی یک والیوم مانت کنید
(در نسخه ۲.۵.۲۷ اضافه شده است) مراحل افزودن افزونهها از طریق نصب ولوم مشابه مراحل مورد نیاز برای افزودن هر افزونه سفارشی به Edge Microgateway است. وقتی کانتینر Docker را اجرا میکنید، میتوانید دایرکتوری افزونهها را روی سیستم محلی خود (ولوم) در نقطه نصب کانتینر، که /opt/apigee/plugins است، نصب کنید. سپس دایرکتوری ولوم محلی را در فایل پیکربندی Edge Microgateway مشخص میکنید.
مراحل زیر نحوه استفاده از یک نقطه اتصال داکر برای افزودن افزونههای سفارشی را نشان میدهد.
میکروگیتوی لبه را متوقف کنید:
edgemicro stopیک دایرکتوری برای افزونههای سفارشی خود ایجاد کنید. برای مثال، create
$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کانتینر داکر را با دستوری مشابه دستور زیر اجرا کنید، که در آن از گزینه
-vبرای مانت کردن دایرکتوری plugins روی ولوم داکر استفاده میکنید. در دستور مثال زیر، دایرکتوری plugins$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 [سیستمهای فایل اشتراکی] مراجعه کنید.
گزینه ب: افزونهها را درون کانتینر قرار دهید
در این گزینه، افزونهها را در کانتینر خود میسازید.
۱. افزونههای خود را بستهبندی کنید
افزونه خود را طبق دستورالعملهای موجود در بخش «نوشتن یک افزونه ساده» بنویسید و آزمایش کنید.
کد افزونه خود را در ساختار دایرکتوری مناسب قرار دهید. دایرکتوریهای افزونه باید از یک ساختار مشخص پیروی کنند. مثال زیر ساختاری را که باید دنبال کنید نشان میدهد، که در آن
response-uppercaseوrequest-headersنام پوشههایی هستند که حاوی کد افزونه سفارشی هستند (این نامها فقط مثال هستند، نام پوشههای شما ممکن است متفاوت باشد):plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsoncdبه پوشهpluginبروید.در پوشه
plugin، کل پوشهpluginsرا زیپ کنید:zip -r plugins.zip plugins/
۲. ایجاد یک ایمیج داکر
در مرحله بعد، یک 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 .
۳. پیکربندی 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
۴. میکروگیتوی را شروع کنید
در نهایت، باید میکروگیتوی را در کانتینر راهاندازی کنید.
دستور زیر را برای رمزگذاری 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!