Multiple container services and call internal/external endpoints

Bài viết sau sẽ hướng dẫn cấu hình các Container Service kết nối với nhau thông qua cả internal endpoint và public endpoint.

Mô hình hệ thống cơ bản bao gồm:

  • Một client web, hai backend application.

  • Hệ thống có một backend đã được expose ra ngoài internet (public domain), còn một backend không yêu cầu public (internal service).

  • Flow dữ liệu: client web => backend 1 => backend 2.

Image

Cụ thể:

  • Client-app: Sử dụng công nghệ front-end NextJs để render ra HTML.

  • User-app: Sử dụng công nghệ back-end Java Spring boot lưu trữ thông tin của các user (name, location…).

  • Weather-app: Sử dụng công nghệ backend Nodejs Express cung cấp ra thông tin thời tiết của khu vực theo location.

Pre-condition

  • Java app Image (Backend 1)

  • NodeJs app Image (Backend 2)

  • NextJs app Image (Client Web)

  • Expose internal endpoint

  • Expose public domain

Các bước thực hiện

Bước 1. Deploy Nodejs App

Deploy một nodejs application và lưu lại internal link của service. Ở đây chúng ta có internal link là nodejsapp-4729-service.sunteco-oahi.svc:3000.

Image

Bước 2. Deploy Java app và cấu hình environment

  • Deploy một java app, ở bước này quan trọng nhất là config đúng đường dẫn url của nodejs app để 2 services có thể liên lạc với nhau.

Image
  • Thêm biến môi trường cho cho java app. SERVICE_NODEJS = nodejsapp-4729-service.sunteco-oahi.svc:3000

Note

Biến môi trường này được tạo ra và đặt tên theo mỗi developer. Chúng ta cần điền chính xác key/value của nodejs service endpoint.

  • Tạo một public endpoint cho java service để client có thể kết nối được.

  • Sau khi lưu lại thay đổi, hệ thống sẽ redeploy lại container services để apply biến môi trường mới (Trường hợp edit).

  • Test public endpoint cho java-app bằng trình duyệt hoặc postman.

Image

Bước 3. Deploy Nextjs app

  • Vì ứng dụng client web chạy trên trình duyệt của người dùng nên nếu framwork của client web thuộc dạng client side rendering thì cần sửa backend public endpoint trong code của client web trước khi build. Sau khi publish backend service người dùng mới có public endpoint này.

  • Deploy nextjs app để render client page.

  • Config BE public link để gọi về server (Incase server-side rendering).

  • Tạo một link public cho client web để truy cập.

Image

Result:

Đã public được một website và 2 microservices bằng các ngôn ngữ khác nhau, kết nối thông qua internal link và public link.

Image