Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu Apigee X. thông tin
Chủ đề này giải thích cách chạy Edge Microgateway trong một vùng chứa Docker. Các bước được đề cập trong chủ đề này giả định rằng bạn có kiến thức cơ bản về Docker, các lệnh Docker, cũng như chế độ thiết lập và cấu hình Edge Microgateway. Để biết thêm thông tin, hãy tham khảo tài liệu về Docker và Edge Microgateway.
Điều kiện tiên quyết
Trước khi chạy Edge Microgateway trong một vùng chứa Docker, bạn phải thực hiện các tác vụ sau:
Định cấu hình Edge Microgateway cho tổ chức/môi trường Apigee của bạn:
edgemicro configure -o your_org -e your_env -u your_username
Để biết thêm thông tin chi tiết về cấu hình, hãy xem Phần 1: Định cấu hình Edge Microgateway.
Sau khi thực hiện các bước định cấu hình, hãy tìm tệp cấu hình. Vị trí mặc định là:
$HOME/.edgemicro/your_org-your_env-config.yaml
trong đó
your_orgvàyour_envlà tổ chức và môi trường mà bạn đã sử dụng khi chạy lệnhedgemicro config. Bạn sẽ cần tệp này khi khởi động Edge Microgateway trong một vùng chứa Docker.Đảm bảo bạn có khoá và thông tin đăng nhập bí mật được trả về khi bạn chạy lệnh
edgemicro config. Ví dụ:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430Trước khi khởi động Edge Microgateway trong một vùng chứa Docker, bạn cần tạo (hoặc đã tạo) các thực thể Apigee Edge bắt buộc để thực hiện các lệnh gọi được xác thực đến API proxy. Các thực thể này bao gồm một proxy có nhận biết Edge Microgateway, một Sản phẩm API, một Nhà phát triển và một Ứng dụng dành cho nhà phát triển. Để biết hướng dẫn đầy đủ, hãy xem bài viết Tạo thực thể trên Apigee Edge.
Chạy Edge Micro dưới dạng vùng chứa Docker
Tải hình ảnh Docker xuống cho Edge Microgateway:
docker pull gcr.io/apigee-microgateway/edgemicro:latest
Trước khi chuyển sang các bước tiếp theo, hãy nhớ thực hiện tất cả các bước trong phần Điều kiện tiên quyết.
Chạy lệnh sau để mã hoá base64 tệp cấu hình Edge Microgateway nằm trong
$HOME/.edgemicro:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
trong đó
your_orgvàyour_envlà tổ chức và môi trường mà bạn đã sử dụng khi chạy lệnhedgemicro config.Hãy nhớ đặt dấu nháy ngược (`) xung quanh lệnh. Ví dụ:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Chạy Edge Microgateway dưới dạng một vùng chứa. Lệnh này đặt một số biến môi trường mà thời gian chạy vùng chứa dùng để khởi động 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
Tham số
Tham số Nội dung mô tả -PXuất bản tất cả các cổng được hiển thị cho máy chủ lưu trữ. Xem thêm Tài liệu tham khảo về lệnh chạy Docker. -pLiên kết rõ ràng một cổng hoặc dải cổng. Xem thêm Tài liệu tham khảo về lệnh chạy Docker. -dChạy ở chế độ tách biệt. Xem thêm Tài liệu tham khảo về lệnh chạy Docker. -v, --volumeChỉ định một điểm gắn kết ổ đĩa. Xin lưu ý rằng nếu định cấu hình Edge Microgateway để sử dụng TLS trong vùng chứa Docker, bạn phải hiển thị cổng 8443 nếu bạn gắn thư mục tệp nhật ký. Xem thêm VOLUME [shared filesystems]. Xem thêm bài viết Sử dụng TLS trong vùng chứa Docker. EDGEMICRO_ORGTên của tổ chức Apigee mà bạn đã dùng để định cấu hình Edge Microgateway. EDGEMICRO_ENVTên của môi trường Apigee mà bạn đã dùng để định cấu hình Edge Microgateway. EDGEMICRO_PROCESSESSố lượng quy trình cần bắt đầu. EDGEMICRO_KEYKhoá được trả về khi bạn định cấu hình Edge Microgateway. EDGEMICRO_SECRETKhoá bí mật được trả về khi bạn định cấu hình Edge Microgateway. EDGEMICRO_CONFIGMột biến chứa tệp cấu hình Edge Microgateway được mã hoá bằng base64. SERVICE_NAMENếu bạn đang dùng Kubernetes, thì thông số này sẽ được điền sẵn. Nếu không, bạn có thể đặt giá trị này thành bất kỳ giá trị nào bạn muốn. Nếu bạn không chỉ định gì, tên dịch vụ sẽ được đặt thành default.DEBUGĐặt thành *để bật tính năng gỡ lỗi.HTTP_PROXYHTTPS_PROXYSử dụng khi Edge Microgateway đang chạy sau tường lửa và cổng không thể giao tiếp với Apigee Edge. Để biết thêm thông tin, hãy xem bài viết Thiết lập Edge Microgateway sau tường lửa của công ty. Ví dụ:
HTTP_PROXY=http://10.203.0.1:5187/NO_PROXYDanh sách các miền được phân tách bằng dấu phẩy mà Edge Microgateway không nên chuyển đến. Để biết thêm thông tin, hãy xem bài viết Thiết lập Edge Microgateway sau tường lửa của công ty. Ví dụ:
localhost,127.0.0.1,localaddress,.localdomain.comNODE_EXTRA_CA_CERTS(Không bắt buộc) Sử dụng tham số này nếu bạn đang dùng một CA mà Node.js không tin cậy theo mặc định. Đặt giá trị của tham số này thành đường dẫn đến một tệp chứa một hoặc nhiều chứng chỉ đáng tin cậy ở định dạng PEM. Để biết thông tin chi tiết, hãy xem bài viết Chứng chỉ TLS. --security-opt(Không bắt buộc) Đặt các lựa chọn bảo mật Docker mong muốn. Xem phần Cấu hình bảo mật trong tài liệu của Docker. --cap-drop(Không bắt buộc) Đặt giới hạn cho các chức năng của Linux được phép trong vùng chứa. Xem phần Đặc quyền thời gian chạy và các chức năng của Linux trong tài liệu của Docker. Ví dụ:
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
Cách kiểm tra để đảm bảo vùng chứa đang chạy:
docker ps
Bạn sẽ thấy kết quả tương tự như dưới đây:
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
Kiểm thử lệnh gọi API
Sau khi khởi động Edge Microgateway trong vùng chứa, bạn có thể thực hiện các lệnh gọi API đến vùng chứa đó.
Ví dụ: nếu basepath của API là /hello:
http://localhost:8000/hello
Kết quả mẫu:
{"error":"missing_authorization","error_description":"Missing Authorization header"}
Nếu bạn thấy phản hồi này, tức là Edge Microgateway đã xử lý thành công lệnh gọi API. Tuy nhiên, theo mặc định, Edge Microgateway yêu cầu phải có khoá API để xác thực. Trong phần tiếp theo, bạn sẽ kiểm thử API bằng một khoá API hợp lệ.
Kiểm thử một API bằng khoá API hợp lệ
Trong giao diện người dùng Edge, hãy chuyển đến Ứng dụng dành cho nhà phát triển mà bạn đã tạo trước đó. Trong trang Ứng dụng nhà phát triển, hãy cho thấy Khoá người dùng và sao chép khoá đó. Giá trị này là khoá API. Bạn sẽ dùng khoá này để thực hiện các lệnh gọi API được xác thực.
Gọi API bằng tiêu đề x-api-key như sau. Giá trị Consumer Key (Khoá người dùng) mà bạn đã sao chép từ Ứng dụng dành cho nhà phát triển chính là khoá API. Theo mặc định, Edge Microgateway yêu cầu bạn truyền khoá trong một tiêu đề có tên là x-api-key, như sau:
curl -i http://localhost:8000/hello -H "x-api-key:apikey"
Ví dụ:
curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz"
Nếu bạn muốn tìm hiểu thêm về cách thực hiện các lệnh gọi API đã xác thực thông qua Edge Microgateway bằng khoá API và mã thông báo OAuth, hãy xem Phần 4: Bảo mật Edge Microgateway.
Dừng Edge Microgateway
Sử dụng lệnh Docker sau để dừng Edge Microgateway:
docker stop edgemicro
Khởi động lại Edge Microgateway
Sau khi dừng Edge Microgateway, bạn có thể khởi động lại bằng lệnh Docker sau:
docker start edgemicro
Sử dụng TLS trong vùng chứa Docker
Phần này giải thích cách định cấu hình TLS cho Edge Microgateway đang chạy trong một vùng chứa Docker. Bạn có thể định cấu hình máy chủ Edge Microgateway để sử dụng TLS cho các yêu cầu đến (hướng bắc) và bạn có thể định cấu hình Edge Microgateway làm một ứng dụng TLS cho các yêu cầu đi đến các điểm cuối mục tiêu (hướng nam).
Nơi đặt tệp chứng chỉ
Vùng chứa Docker chạy Edge Microgateway có một điểm gắn kết trên /opt/apigee/.edgemicro.
Khi định cấu hình Edge Microgateway để sử dụng chứng chỉ TLS, bạn có thể cung cấp các tệp chứng chỉ trên điểm gắn kết đó và tham chiếu đến các tệp đó trong tệp cấu hình Edge Microgateway. Tệp cấu hình này thường nằm trong thư mục $HOME/.edgemicro và có tên là your_org-your_env-config.yaml.
Ví dụ:
...
edgemicro:
ssl:
key: /opt/apigee/.edgemicro/southbound/tls.key
cert: /opt/apigee/.edgemicro/southbound/tls.crt
...
Sử dụng một CA không được Node.js tin cậy
Nếu bạn đang sử dụng Cơ quan cấp chứng chỉ (CA) mà Node.js không tin cậy theo mặc định (chẳng hạn như trường hợp sử dụng chứng chỉ tự ký), hãy cân nhắc sử dụng tham số NODE_EXTRA_CA_CERTS khi chạy vùng chứa.
Đặt tham số này thành đường dẫn đến một tệp chứa một hoặc nhiều chứng chỉ đáng tin cậy ở định dạng PEM. Để xem cách sử dụng tham số này, hãy xem các ví dụ Cách định cấu hình TLS hướng bắc và Cách định cấu hình TLS hướng nam.
Ví dụ:
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
Xem thêm bài viết Chạy Edge Micro dưới dạng một vùng chứa Docker.
Tắt quy trình xác thực TLS
Mặc dù không nên, nhưng trong một số trường hợp, bạn có thể muốn tắt quy trình xác thực TLS cho Edge Microgateway đang chạy trong một vùng chứa. Theo mặc định, vùng chứa Docker Edge Microgateway không có khả năng tắt TLS. Để hoàn thành nhiệm vụ này, bạn phải tạo một hình ảnh Docker tuỳ chỉnh cho Edge Microgateway. Dưới đây là hướng dẫn chung để tạo hình ảnh tuỳ chỉnh và tắt quy trình xác thực TLS.
Sao chép hoặc tải kho lưu trữ nguồn Edge Microgateway xuống từ
https://github.com/apigee-internal/microgateway.cdvào thư mụcmicrogateway/kubernetes/docker/edgemicrotrong thư mục mã nguồn.Ví dụ:
cd $HOME/git/microgateway/kubernetes/docker/edgemicroMở tệp
entrypoint.shvà sửa đổi mã để chấp nhận biến môi trườngNODE_TLS_REJECT_UNAUTHORIZED. Sau đó, khi chạy vùng chứa, bạn sẽ chỉ định một giá trị cho biến này.Tạo vùng chứa Docker:
docker build -t edgemicro .Khi chạy vùng chứa, hãy chỉ định tuỳ chọn
-e NODE_TLS_REJECT_UNAUTHORIZED = 1. Ví dụ:
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
Ví dụ: Cách định cấu hình TLS hướng bắc
Phần này giải thích cách thiết lập một kết nối TLS chiều bắc (đến) trên máy chủ Edge Microgateway. TLS chiều bắc cho phép các ứng dụng sử dụng HTTPS khi thực hiện lệnh gọi API đến Edge Microgateway. Ví dụ bên dưới sử dụng chứng chỉ tự ký.
1. Các bước thiết lập ban đầu
- Xác định vị trí tệp
openssl.cnftrên hệ thống của bạn. Ví dụ:/etc/ssl/openssl.cnf. - Mở tệp
opensssl.cnfđể chỉnh sửa. Đảm bảo rằng
req_extensionscó trong tệp cấu hình của bạn. Ví dụ: bạn nên có thông tin tương tự như sau trong tệp của mình:[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEnciphermentThêm đoạn sau vào
openssl.cnfđể tạo các thuộc tính SNI phù hợp:[ 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::1Tệp
opensssl.cnfmẫu:[ 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::1Làm theo các bước trong phần Điều kiện tiên quyết để khởi động và định cấu hình Edge Microgateway (nếu chưa thực hiện). Khi hoàn tất, bạn sẽ tạo được một proxy nhận biết Edge Microgateway, một Sản phẩm API, một Nhà phát triển và một Ứng dụng dành cho nhà phát triển. Ngoài ra, bạn sẽ chạy lệnh
edgemicro configurevà nhận được một khoá và mã bí mật.
2. Tạo chứng chỉ tự ký
Tiếp theo, hãy tạo các chứng chỉ và khoá mà bạn cần để thiết lập TLS:
cdthành thư mục$HOME/.edgemicro.Tạo tập lệnh bash sau. Bạn có thể đặt tên tuỳ ý cho tệp này. Ví dụ:
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
Trong tệp bash, hãy đảm bảo đường dẫn đến tệp
openssl.cnflà chính xác.Thực thi tệp bash. Bạn sẽ được nhắc cung cấp thông tin về chứng chỉ. Hãy nhớ sử dụng
localhostcho Tên chung.Kiểm tra để đảm bảo bạn đã tạo các tệp sau:
rootca.keyrootca.pemtls.keytls.csrrootca.srltls.crt
3. Chỉnh sửa tệp cấu hình Edge Microgateway
Mở tệp cấu hình Edge Micro trong một trình chỉnh sửa. Ví dụ:
vi $HOME/.edgemicro/myorg-test-config.yamlChỉnh sửa khổ thơ
edgemicronhư sau. Lưu ý rằng bạn đang thay đổi các thuộc tínhportvà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: ...Thực thi lệnh sau để mã hoá base64 tệp cấu hình Edge Microgateway nằm trong
$HOME/.edgemicro:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
trong đó
your_orgvàyour_envlà tổ chức và môi trường mà bạn đã sử dụng khi chạy lệnhedgemicro config.Hãy nhớ đặt dấu nháy ngược (`) xung quanh lệnh. Ví dụ:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Xem thêm: Chạy Edge Micro dưới dạng một vùng chứa Docker.
4. Chạy vùng chứa
Thực thi lệnh sau để chạy vùng chứa Docker bằng 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
Lưu ý các tham số sau được dùng trong lệnh; các tham số này khác với lệnh cơ bản được mô tả trong phần Chạy Edge Micro dưới dạng một vùng chứa Docker.
portđược đặt thành8443.- Một điểm gắn kết ổ đĩa được dùng để gắn các tệp khoá và chứng chỉ.
- Biến
NODE_EXTRA_CA_CERTSđược dùng để thêm một CA tuỳ chỉnh (khi cần trong trường hợp có chứng chỉ tự ký).
5. Kiểm thử cấu hình TLS
Thực thi lệnh cURL sau đây để kiểm thử chế độ thiết lập. Thay thế basepath và khoá API của bạn vào lệnh. Ví dụ sau đây giả định rằng bạn đang ở trong thư mục có chứa
rootca.pemvà proxy mà bạn đã tạo có đường dẫn cơ sở là/hello:curl -v https://localhost:8443/hello --cacert rootca.pem \ -H "x-api-key: Az82fdnfONVCOOE4NKhajxAboDgA3FAo"Đầu ra cURL chi tiết cho thấy từng bước của quá trình bắt tay TLS. Nếu bạn thấy phản hồi HTTP 200, tức là cấu hình đã thành công:
* 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!
Ví dụ: Cách định cấu hình TLS hướng nam
Phần này giải thích cách thiết lập một kết nối TLS chiều nam (đầu ra) giữa máy chủ Edge Microgateway và một ứng dụng đích phụ trợ. Ví dụ bên dưới sử dụng chứng chỉ tự ký.
1. Các bước thiết lập ban đầu
- Xác định vị trí tệp
openssl.cnftrên hệ thống của bạn. Ví dụ:/etc/ssl/openssl.cnf. - Mở tệp
opensssl.cnfđể chỉnh sửa. Đảm bảo rằng
req_extensionscó trong tệp cấu hình của bạn. Ví dụ: bạn nên có thông tin tương tự như sau trong tệp của mình:[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEnciphermentThêm đoạn sau vào
openssl.cnfđể tạo các thuộc tính SNI phù hợp:[ alt_names ] DNS.1 = helloworld DNS.2 = localhost DNS.3 = localhost.localdomain DNS.4 = 127.0.0.1 DNS.5 = ::1 DNS.6 = fe80::1Tệp
opensssl.cnfmẫu:[ 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::1Chạy lệnh
edgemicro configure:edgemicro configure -o your_org -e your_env -u your_username
Để biết thêm thông tin chi tiết về cấu hình, hãy xem Phần 1: Định cấu hình Edge Microgateway.
Sao chép khoá và thông tin xác thực bí mật được trả về từ
edgemicro configure. Bạn sẽ cần những giá trị này để chạy vùng chứa. Ví dụ:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
2. Tạo một ứng dụng đích Node.js
cdthành thư mục.edgemicro.Tạo tập lệnh bash sau. Bạn có thể đặt tên tuỳ ý cho tệp này. Ví dụ:
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
Trong tệp bash, hãy đảm bảo đường dẫn đến tệp
openssl.cnflà chính xác.Thực thi tệp bash. Bạn sẽ được nhắc cung cấp thông tin về chứng chỉ. Hãy nhớ sử dụng
hellworldcho Tên chung.Kiểm tra để đảm bảo bạn đã tạo các tệp sau:
rootca.keyrootca.pemtls.keytls.csrrootca.srltls.crt
Tạo một tệp mới có tên là
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);Tạo một tệp
package.jsontrong cùng thư mục vớiserver.js. Ví dụ:{ "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" } }Chạy
npm installđể lấy các phần phụ thuộc.Tạo một Dockerfile mới trong cùng thư mục với
server.js, trong đóWORKDIRlà đường dẫn đến thư mục gốc của ứng dụng Node.js:FROM node:8-alpine WORKDIR path-to-your-node-app COPY package*.json ./ RUN npm install COPY . . EXPOSE 9443 CMD [ "npm", "start" ]
Tạo hình ảnh Docker:
docker build -t helloworld .Khởi động ứng dụng mẫu:
docker run -P -p 9443:9443 --name helloworld helloworld
3. Tạo thực thể trên Apigee Edge
Tạo một proxy nhận biết Edge Microgateway bằng các chế độ cài đặt này. Để biết thêm thông tin, hãy xem phần Tạo một proxy API có nhận biết Edge Microgateway trên Edge.
- Tên proxy:
edgemicro_local - Bản sửa đổi:
1 - Đường dẫn cơ sở:
/local - Mục tiêu:
https://helloworld:9443
- Tên proxy:
Tạo một sản phẩm API. Để biết thông tin chi tiết, hãy xem bài viết Tạo sản phẩm.
Tạo một nhà phát triển. Để biết thông tin chi tiết, hãy xem bài viết Tạo nhà phát triển.
Tạo một ứng dụng dành cho nhà phát triển. Để biết thông tin chi tiết, hãy xem phần Tạo ứng dụng dành cho nhà phát triển
4. Chạy vùng chứa
Mở tệp cấu hình Edge Micro trong một trình chỉnh sửa. Ví dụ:
vi $HOME/.edgemicro/myorg-test-config.yamlChỉnh sửa khổ thơ
edgemicronhư sau. Lưu ý rằng bạn đang thay đổi các thuộc tínhportvà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: ...Thực thi lệnh sau để mã hoá base64 tệp cấu hình Edge Microgateway nằm trong
$HOME/.edgemicro:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
trong đó
your_orgvàyour_envlà tổ chức và môi trường mà bạn đã sử dụng khi chạy lệnhedgemicro config.Hãy nhớ đặt dấu nháy ngược (`) xung quanh lệnh. Ví dụ:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Chạy lệnh sau để khởi động Edge Microgateway trong vùng chứa 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
5. Kiểm thử cấu hình TLS
Thực thi lệnh cURL sau đây để kiểm thử chế độ thiết lập. Thay thế đường dẫn cơ sở mà bạn đã dùng trong proxy có nhận biết cổng siêu nhỏ và khoá API lấy được từ ứng dụng Nhà phát triển mà bạn đã tạo trên Apigee Edge. Ví dụ:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -vBạn sẽ thấy lỗi này:
... * 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"}Chạy lại Edge Microgateway, nhưng lần này hãy thêm biến
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
Thực thi lệnh cURL sau. Thay thế basepath và khoá API như trước. Ví dụ:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -vKiểm tra kết quả đầu ra. Khi thành công, bạn sẽ nhận được phản hồi trạng thái 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
Thêm một trình bổ trợ tuỳ chỉnh
Bạn có thể thêm các tính năng và chức năng mới vào cổng siêu nhỏ bằng cách viết các trình bổ trợ tuỳ chỉnh. Các trình bổ trợ tuỳ chỉnh cho phép bạn tương tác theo phương thức lập trình với các yêu cầu và phản hồi truyền qua cổng siêu nhỏ.
Bạn có 2 lựa chọn để triển khai các trình bổ trợ cho một phiên bản Edge Microgateway đang chạy trong một vùng chứa Docker:
Phần còn lại của phần này giả định rằng bạn đã quen với việc viết và định cấu hình các trình bổ trợ cho chế độ thiết lập Edge Microgateway tiêu chuẩn. Nếu không, hãy xem phần Phát triển các trình bổ trợ tuỳ chỉnh.
Cách A: Gắn thư mục trình bổ trợ vào một ổ đĩa
(Được thêm trong phiên bản 2.5.27) Các bước thêm trình bổ trợ thông qua một điểm gắn kết ổ đĩa tương tự như các bước cần thiết để thêm bất kỳ trình bổ trợ tuỳ chỉnh nào vào Edge Microgateway. Khi chạy vùng chứa Docker, bạn có thể gắn thư mục trình bổ trợ trên hệ thống cục bộ (ổ đĩa) vào điểm gắn vùng chứa, tức là /opt/apigee/plugins.
Sau đó, bạn chỉ định thư mục ổ đĩa cục bộ trong tệp cấu hình Edge Microgateway.
Các bước sau đây minh hoạ cách sử dụng điểm gắn kết Docker để thêm các trình bổ trợ tuỳ chỉnh.
Dừng Edge Microgateway:
edgemicro stopTạo một thư mục cho các trình bổ trợ tuỳ chỉnh. Ví dụ: tạo
$HOME/edgemicro/custom/pluginsThêm thư mục trình bổ trợ tuỳ chỉnh vào tệp cấu hình Edge Microgateway. Ví dụ:
plugins: dir: $HOME/edgemicro/custom/plugins sequence: - oauth - response-uppercase ````Viết và kiểm thử trình bổ trợ theo hướng dẫn trong phần Viết một trình bổ trợ đơn giản. Hãy nhớ đặt mã trình bổ trợ của bạn trong cấu trúc thư mục thích hợp. Ví dụ:
custom | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsonChạy vùng chứa Docker bằng một lệnh tương tự như sau, trong đó bạn dùng lựa chọn
-vđể gắn thư mục trình bổ trợ trên ổ đĩa Docker. Trong lệnh ví dụ sau, thư mục trình bổ trợ$HOME/edgemicro/custom/plugins(nơi có trình bổ trợ tuỳ chỉnh) được liên kết với điểm gắn kết/opt/apigee/pluginscủa vùng chứa: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:latestGọi API để kiểm thử trình bổ trợ.
Để biết thêm thông tin, hãy xem phần VOLUME [hệ thống tệp được chia sẻ].
Cách B: Tạo các trình bổ trợ trong vùng chứa
Trong lựa chọn này, bạn sẽ tạo các trình bổ trợ vào vùng chứa của mình.
1. Đóng gói trình bổ trợ
Viết và kiểm thử trình bổ trợ theo hướng dẫn trong phần Viết một trình bổ trợ đơn giản.
Đặt mã trình bổ trợ của bạn vào cấu trúc thư mục thích hợp. Các thư mục trình bổ trợ phải tuân theo một cấu trúc nhất định. Ví dụ sau đây cho thấy cấu trúc mà bạn phải tuân theo, trong đó
response-uppercasevàrequest-headerslà tên của các thư mục chứa mã trình bổ trợ tuỳ chỉnh (đây chỉ là ví dụ, tên thư mục của bạn có thể khác):plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsoncdvào thư mụcplugin.Trong thư mục
plugin, hãy nén toàn bộ thư mụcplugins:zip -r plugins.zip plugins/
2. Tạo một hình ảnh Docker
Tiếp theo, hãy tạo một Dockerfile để thêm mã trình bổ trợ vào một hình ảnh Edge Microgateway.
- Trong cùng thư mục chứa tệp zip, hãy tạo một tệp mới có tên
Dockerfile. Thêm đoạn mã sau vào
Dockerfilerồi lưu tệp: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"]Tạo một hình ảnh Docker Edge Microgateway mới bằng các trình bổ trợ của bạn:
docker build -t image-name .Ví dụ:
docker build -t edgemicroplugins .
3. Cập nhật cấu hình Edge Microgateway
Bây giờ, khi các trình bổ trợ đã được đóng gói, bạn cần thêm chúng vào tệp cấu hình Edge Microgateway.
Mở tệp cấu hình Edge Microgateway trong một trình chỉnh sửa:
$HOME/.edgemicro/org-env-config.yaml
Ví dụ:
vi $HOME/.edgemicro/myorg-test-config.yaml
Thêm thư mục trình bổ trợ vào tệp cấu hình. Trong ví dụ sau, thuộc tính
dirchỉ định vị trí của mã trình bổ trợ (mà bạn đã chỉ định trong Dockerfile). Bạn cũng phải chỉ định tên của thư mục trình bổ trợ. Trong ví dụ bên dưới, tên này làresponse-uppercase.edgemicro: ... plugins: dir: /opt/apigee/plugins sequence: - oauth - response-uppercase
4. Khởi động cổng vi mô
Cuối cùng, bạn phải khởi động microgateway trong vùng chứa.
Chạy lệnh sau để mã hoá base64 tệp cấu hình Edge Microgateway nằm trong
$HOME/.edgemicro:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
trong đó
your_orgvàyour_envlà tổ chức và môi trường mà bạn đã sử dụng khi chạy lệnhedgemicro config.Hãy nhớ đặt dấu nháy ngược (`) xung quanh lệnh. Ví dụ:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Chạy Edge Microgateway dưới dạng một vùng chứa. Lệnh này đặt một số biến môi trường mà thời gian chạy vùng chứa dùng để khởi động 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
Ví dụ:
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
Gọi API để kiểm thử trình bổ trợ:
Kiểm thử để đảm bảo mã trình bổ trợ thực thi bằng cách gọi API của bạn và xác minh rằng đầu ra đúng như dự kiến:
curl -i http://localhost:8000/hello -H "x-api-key:apikey"
Ví dụ: trình bổ trợ
response-uppercasecó thể trả về một phản hồi như sau:curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz" HELLO, WORLD!