درحال مشاهده اسناد 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
برای جزئیات بیشتر درباره پیکربندی، بخش ۱: پیکربندی Edge Microgateway را ببینید.
پساز انجام مراحل پیکربندی، فایل پیکربندی را پیدا کنید. مکان پیشفرض در اینجا است:
$HOME/.edgemicro/your_org-your_env-config.yaml
که در آن
your_orgوyour_envسازمان و محیطی است که هنگام اجرای فرمانedgemicro configاستفاده کردید. وقتی Edge Microgateway را در محفظه Docker شروع میکنید به این فایل نیاز خواهید داشت.مطمئن شوید که اطلاعات اعتباری کلید و رمز را که هنگام اجرای فرمان
edgemicro configبرگردانده شده است داشته باشید. برای مثال:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430قبلاز شروع Edge Microgateway در یک محفظه Docker، باید نهادهای Apigee Edge را که برای انجام تماسهای پراکسی API اصیلسازیشده لازم است ایجاد کنید (یا قبلاً ایجاد کرده باشید). این نهادها شامل پراکسی آگاه از Edge Microgateway، محصول API، توسعهدهنده، و برنامه توسعهدهنده میشود. برای دستورالعملهای کامل، ایجاد نهادها در Apigee Edge را ببینید.
اجرای Edge Micro بهعنوان محتوی Docker
تصویر Docker را برای Edge Microgateway بارگیری کنید:
docker pull gcr.io/apigee-microgateway/edgemicro:latest
قبلاز ادامه دادن به مراحل بعدی، مطمئن شوید که همه مراحل بخش پیشنیازها را انجام دادهاید.
فرمان زیر را اجرا کنید تا فایل پیکربندی 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 استفاده کند، درصورت نصب کردن دایرکتوری فایل گزارش، باید درگاه 8443 را نمایان کنید. همچنین VOLUME [shared filesystems] را ببینید. همچنین استفاده از 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(اختیاری) اگر از «مرجع گواهی» استفاده میکنید که بهطور پیشفرض مورد اعتماد 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
درحال آزمایش تماس میانای برنامهسازی کاربردی
پساز شروع Edge Microgateway در محتوی، میتوانید با آن تماسهای API برقرار کنید.
برای مثال، اگر مسیر پایه API شما /hello است:
http://localhost:8000/hello
برونداد نمونه:
{"error":"missing_authorization","error_description":"Missing Authorization header"}
اگر این پاسخ را دیدید، یعنی Edge Microgateway باموفقیت تماس با میانای برنامهسازی کاربردی را مدیریت کرده است. بااینحال، بهطور پیشفرض، Edge Microgateway برای اصالتسنجی به کلید API نیاز دارد. در بخش بعدی، API را با کلید API معتبر آزمایش خواهید کرد.
میانای برنامهسازی کاربردی را با کلید میانای برنامهسازی کاربردی معتبر آزمایش کنید
در «میانای کاربری Edge»، به «برنامه توسعهدهندگان» که قبلاً ایجاد کردهاید پیمایش کنید. در صفحه «برنامه توسعهدهنده»، «کلید مصرفکننده» را نشان دهید و آن را کپی کنید. این مقدار کلید میانای برنامهسازی کاربردی است. از این کلید برای انجام تماسهای 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 بیشتر بدانید، بخش ۴: ایمنسازی Edge Microgateway را ببینید.
درحال توقف Edge Microgateway
از فرمان Docker زیر برای متوقف کردن Edge Microgateway استفاده کنید:
docker stop edgemicro
درحال بازراهاندازی Edge Microgateway
پساز متوقف کردن Edge Microgateway، میتوانید آن را با این دستور Docker بازراهاندازی کنید:
docker start edgemicro
استفاده از TLS در محفظه Docker
این بخش نحوه پیکربندی کردن TLS را برای Edge Microgateway که در ظرف Docker اجرا میشود توضیح میدهد. میتوانید سرور Edge Microgateway را پیکربندی کنید تا از TLS برای درخواستهای ورودی (جهت شمالی) استفاده کند، و میتوانید Edge Microgateway را پیکربندی کنید تا برای درخواستهای خروجی به نقاط پایانی هدف (جهت جنوبی) یک کارخواه TLS باشد.
محل قرار دادن فایلهای گواهینامه
محتوی Docker که Edge Microgateway را اجرا میکند نقطه اتصال در /opt/apigee/.edgemicro دارد.
وقتی Edge Microgateway را پیکربندی میکنید تا از گواهینامههای TLS استفاده کند، میتوانید فایلهای گواهینامه را در آن نقطه اتصال دردسترس قرار دهید و در فایل پیکربندی Edge Microgateway به آنها ارجاع دهید. این فایل پیکربندی معمولاً در $HOME/.edgemicro
دایرکتوری قرار دارد و your_org-your_env-config.yaml نامیده میشود.
برای مثال:
...
edgemicro:
ssl:
key: /opt/apigee/.edgemicro/southbound/tls.key
cert: /opt/apigee/.edgemicro/southbound/tls.crt
...
استفاده از «مرجع گواهی» که Node.js به آن اعتماد ندارد
اگر از «مرجع گواهینامه» (CA) استفاده میکنید که بهطور پیشفرض ازسوی
Node.js قابلاعتماد نیست (مثل گواهینامه خودامضا)، هنگام اجرای
کانتینر، از پارامتر NODE_EXTRA_CA_CERTS استفاده کنید.
این پارامتر را روی مسیر فایلی تنظیم کنید که حاوی یک یا چند گواهینامه مورد اعتماد در قالب PEM است. برای دیدن نحوه استفاده از این پارامتر، مثالهای نحوه پیکربندی «امنیت لایه انتقال» شمالی و نحوه پیکربندی «امنیت لایه انتقال» جنوبی را ببینید.
برای مثال:
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 را برای Edge Microgateway که در یک محتوی اجرا میشود غیرفعال کنید. قابلیت غیرفعال کردن TLS بهطور پیشفرض در محتوی Docker «درگاه کوچک Edge» ساخته نشده است. برای انجام این تکلیف، باید تصویر Docker سفارشیسازیشدهای برای Edge Microgateway ایجاد کنید. در زیر دستورالعملهای کلی برای ساختن تصویر سفارشی و خاموش کردن اعتبارسنجی «امنیت لایه انتقال» آمده است.
مخزن منبع 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 راهاندازی کنید. «امنیت لایه انتقال» شمالی به مشتریان اجازه میدهد هنگام فراخوانی «میانای برنامهسازی کاربردی» در «ریزدروازه Edge» از 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بیت زیر را به
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را اجرا کرده باشید و کلید و رمزی دریافت کرده باشید.
۲. تولید گواهینامههای خودامضاشده
در مرحله بعد، گواهینامهها و کلیدهایی را که برای ایجاد 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.keyrootca.pemtls.keytls.csrrootca.srltls.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: ...فرمان زیر را اجرا کنید تا فایل پیکربندی 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 Micro بهعنوان محتوی Docker را ببینید.
۴. اجرای محتوی
برای اجرای محتوی 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
به پارامترهای زیر که در این فرمان استفاده شده است توجه کنید؛ این پارامترها با فرمان پایه شرحدادهشده در اجرای Edge Micro بهعنوان ظرف Docker متفاوت است.
-
portروی8443تنظیم شده است. - از یک نصب حجم برای نصب فایلهای کلید و گواهینامه استفاده میشود.
- از متغیر
NODE_EXTRA_CA_CERTSبرای افزودن «مرجع گواهینامه» سفارشی (درصورت نیاز در مورد گواهینامههای خودامضا) استفاده میشود.
-
۵. پیکربندی «امنیت لایه انتقال» را آزمایش کنید
برای آزمایش راهاندازی، فرمان cURL زیر را اجرا کنید. مسیر پایه و کلید میانای برنامهسازی کاربردی خود را در فرمان جایگزین کنید. مثال زیر فرض میکند که شما در دایرکتوریای هستید که
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 خروجی بین سرور Edge Microgateway و برنامه هدف زیرینه را راهاندازی کنید. مثال زیر از گواهینامههای خودامضا استفاده میکند.
۱. مراحل راهاندازی اولیه
- فایل
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
برای جزئیات بیشتر درباره پیکربندی، بخش ۱: پیکربندی 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.keyrootca.pemtls.keytls.csrrootca.srltls.crt
فایل جدیدی بهنام
server.jsایجاد کن.'use strict'; const express = require('express'); const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync("tls.key"), cert: fs.readFileSync("tls.crt") }; // Constants const PORT = 9443; const HOST = '0.0.0.0'; // App const app = express(); app.get('/', (req, res) => { res.send('Hello world\n'); }); https.createServer(options, app).listen(PORT);فایل
package.jsonرا در همان دایرکتوریserver.jsایجاد کنید. برای مثال:{ "name": "helloworld", "version": "1.0.0", "description": "", "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node server.js" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.16.4", "fs": "0.0.1-security", "https": "^1.0.0" } }برای دریافت وابستگیها،
npm installرا اجرا کنید.Dockerfile جدیدی در همان دایرکتوری
server.jsایجاد کنید، که در آنWORKDIRمسیر ریشه برنامه Node.js شما است:FROM node:8-alpine WORKDIR path-to-your-node-app COPY package*.json ./ RUN npm install COPY . . EXPOSE 9443 CMD [ "npm", "start" ]
ساختن تصویر Docker:
docker build -t helloworld .برنامه نمونه را شروع کنید:
docker run -P -p 9443:9443 --name helloworld helloworld
۳. ایجاد نهادها در Apigee Edge
پراکسی آگاه از Edge Microgateway را با این تنظیمات ایجاد کنید. برای اطلاعات بیشتر، ایجاد پراکسی API سازگار با Edge Microgateway در Edge را ببینید.
- نام پراکسی:
edgemicro_local - نسخه اصلاحشده:
1 - مسیر پایه:
/local - هدف:
https://helloworld:9443
- نام پراکسی:
محصول میانای برنامهسازی کاربردی ایجاد کنید. برای جزئیات، ایجاد محصول را ببینید.
توسعهدهندهای ایجاد کنید. برای جزئیات، ایجاد توسعهدهنده را ببینید.
ایجاد برنامه «توسعهدهنده». برای جزئیات، ایجاد برنامه توسعهدهنده را ببینید
۴. اجرای محتوی
فایل پیکربندی 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، فرمان زیر را اجرا کنید.
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
۵. پیکربندی «امنیت لایه انتقال» را آزمایش کنید
برای آزمایش راهاندازی، فرمان cURL زیر را اجرا کنید. مسیر پایه را که در پراکسی آگاه از میکرو دروازه استفاده کردهاید و کلید API را که از برنامه «توسعهدهنده» ایجادشده در Apigee Edge بهدست آوردهاید جایگزین کنید. برای مثال:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -vباید این خطا را ببینید:
... * subject: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com * start date: Dec 10 02:12:22 2018 GMT * expire date: Sep 29 02:12:22 2021 GMT * issuer: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com * SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway. > GET /local HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd > < HTTP/1.1 502 Bad Gateway < Date: Wed, 12 Dec 2018 05:25:01 GMT < Connection: keep-alive < Content-Length: 93 < * Connection #0 to host localhost left intact {"message":"unable to verify the first certificate","code":"UNABLE_TO_VERIFY_LEAF_SIGNATURE"}Edge Microgateway را دوباره اجرا کنید، اما اینبار متغیر
NODE_EXTRA_CA_CERTSرا اضافه کنید.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 زیر را اجرا کنید. همانند قبل، مسیر پایه و کلید میانای برنامهسازی کاربردی را جایگزین کنید. برای مثال:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -vبرونداد را بررسی کنید. درصورت موفقیت، پاسخ وضعیت HTTP 200 دریافت خواهید کرد:
... > GET /local HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd > < HTTP/1.1 200 OK < x-powered-by: Express < content-type: text/html; charset=utf-8 < etag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0" < date: Wed, 12 Dec 2018 05:49:28 GMT < x-response-time: 421 < Connection: keep-alive < Transfer-Encoding: chunked < Hello world
افزودن افزایه سفارشی
با نوشتن افزایههای سفارشی میتوانید ویژگیها و قابلیتهای جدیدی به ریزدروازه اضافه کنید. افزایههای سفارشی به شما امکان میدهند بهصورت برنامهریزیشده با درخواستها و پاسخهایی که ازطریق ریزدرگاه جریان مییابند تعامل داشته باشید.
برای مستقر کردن افزایهها در نمونه Edge Microgateway که در ظرف docker اجرا میشود، دو گزینه دارید:
بقیه این بخش فرض میکند که با نوشتن و پیکربندی افزایهها برای راهاندازی استاندارد Edge Microgateway آشنا هستید. اگر نه، توسعه افزایههای سفارشی را ببینید.
گزینه A: نصب دایرکتوری افزایهها روی حجم
(در نسخه ۲.۵.۲۷ اضافه شده است) مراحل افزودن افزایهها ازطریق نصب حجم مشابه مراحل لازم برای افزودن هر افزایه سفارشی به 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 [shared filesystems] را ببینید.
گزینه ب: ساختن افزایهها در محتوی
در این گزینه، افزایهها را در محتوی خود میسازید.
۱. بستهبندی افزایهها
افزایه خود را طبق دستورالعملهای نوشتن افزایه ساده بنویسید و آزمایش کنید.
کد افزایه را در ساختار دایرکتوری مناسب قرار دهید. فهرستهای افزایه باید از ساختار مشخصی پیروی کنند. نمونه زیر ساختاری را نشان میدهد که باید از آن پیروی کنید، در این ساختار
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/
۲. ساختن تصویر 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 .
۳. بهروزرسانی پیکربندی 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
۴. شروع کردن ریزدروازه
درنهایت، باید ریزدروازه را در محتوی شروع کنید.
فرمان زیر را اجرا کنید تا فایل پیکربندی 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!