(spinner/reference/app-publishing-v2)=
# App publishing
Sunteco Cloud cung cấp dịch vụ hỗ trợ triển khai ứng dụng một cách đơn giản và nhanh chóng. Với Sun Container Spinner, khi triển khai dịch vụ ứng dụng người dùng có thể *publish* ứng dụng với các lựa chọn phù hợp với mô hình triển khai dịch vụ đang thiết kế.
*App publish* là việc cấu hình các thông tin cần thiết giúp xuất bản dịch vụ, đưa ứng dụng vào trong các network có thể truy cập được từ các ứng dụng hoặc hệ thống khác.
## Service Port Mapping
Ứng dụng chạy trên từng container cũng tương tự cách ứng dụng chạy trên môi trường native(server), mỗi ứng dụng chạy trên một cổng(port) xác định. *Service port mapping* là module dùng để định nghĩa ứng dụng trong các container chạy trên port nào và cấu hình đi kèm. Cấu hình này đóng vai trò quan trọng, làm chỉ dẫn cho các phương thức publish ứng dụng.
```{note}
Sun Container Spinner có thể lấy được địa chỉ Port và tạo ra sẵn một Service Port Mapping cho người dùng nếu như *Port Mapping được định nghĩa trong thông tin của Image*
```
```{thumbnail} ../../../_static/img/spinner/reference/app_publishing_1a.png
:width: 60 %
:alt: Picture
:align: center
```
```{thumbnail} ../../../_static/img/spinner/reference/app_publishing_1b.png
:width: 60 %
:alt: Picture
:align: center
```
Các thuộc tính của Port Mapping
| Name | Type | Description |
| ---- | ---- | ----------- |
| Port Name | String | Name của port mapping |
| Port | Integer | Port đang mở. Range [1-65536] |
| Protocol | String | Giao thức của ứng dụng đang chạy. Default TCP |
| Container | String | Container name được chỉ định trong spinner |
| Cluster's location | String | Địa chỉ truy cập của ứng dụng gen sẵn, định dạng \:\ |
| Alias host name | String | Địa chỉ truy cập của ứng dụng gen sẵn, định dạng \:\ |
Xem thêm {ref}`Service Port Mapping`.
(spinner/reference/app-publishing-v2/internal-publish)=
## Internal Publish (publish nội bộ)
Publish ứng dụng với mục đích dùng để giao tiếp nội bộ giữa các Spinner với nhau. Option này được mặc định cung cấp cùng với Spinner.
Có hai cách để giao tiếp internal:
* **Cluster IP**: IP nội bộ của Spinner
* **Host Name**: Host Name nội bộ, Host Name này kết thúc bằng đuôi ".svc"
```{note}
Phạm vi truy cập của Cluster IP và Host Name là trong cùng một Workspace và giữa các Spinner với nhau.
```
```{thumbnail} ../../../_static/img/spinner/reference/app_publishing_2.png
:width: 80 %
:alt: Picture
:align: center
```
```{note}
Kết hợp Cluster IP hoặc Host Name với các port đã được expose sẽ tạo ra địa chỉ truy cập của ứng dụng trong Spinner. Người dùng có thể sử dụng địa chỉ này để cấu hình giao tiếp giữa các dịch vụ, giúp tối ưu về tốc độ giao tiếp khi không phải đi ra ngoài internet.
```
## Quản lý certificate
Chức năng quản lý certificate cho phép quản lý các SSL ceritifcate được gắn vào các domain, phục vụ cho quá trình bảo mật truyền dẫn thông tin.
Xem thêm {ref}`Chức năng quản lý SSL certificate`.
(spinner/reference/app-publishing-v2/internet-publish-sd-sunteco-domain)=
## Internet Publish (publish ra mạng Internet) - sử dụng Sunteco Domain
Với người dùng muốn publish ứng dụng ra mạng Internet mà chưa sở hữu tên miền riêng, Sun Container Spinner hỗ trợ tính năng publish nhanh ứng dụng qua Sunteco Domain. Ứng dụng của người dùng sẽ được publish dưới dạng sub-domain của một domain mà Sunteco Cloud sở hữu.
Để sử dụng chức năng này, người dùng cần định nghĩa Route. Việc tạo Route sẽ cấu hình định tuyến các request từ mạng internet tới các container trong Spinner.
```{thumbnail} ../../../_static/img/spinner/reference/app_publishing_3.png
:width: 60 %
:alt: Picture
:align: center
```
Các thuộc tính của Route
| Name | Type | Description |
| -----| ---- | ----------- |
| Route Name | String | Tên của route, phần này sẽ quyết định subdomain của người dùng như thế nào \. |
| Path | String | *Optional*, Phần url ngay sau domain nếu như ứng dụng trong Spinner có định nghĩa thêm root path. |
| Port Name | String | Tham chiếu đến phần *Service Port Mapping* đã được định nghĩa. |
| Location | String | Output sau khi ứng dụng đã được publish, đây là sự kết hợp của Route Name, Sunteco Domain và Path
Định dạng Endpoint cuối cùng của Route: \.\/\ |
Xem thêm {ref}`Hướng dẫn publish ứng dụng bằng Sunteco Domain`
## Internet Publish (publish ra mạng Internet) - sử dụng Domain của người dùng
Sunteco cung cấp phương pháp xuất bản dịch vụ dùng domain cá nhân. Để sử dụng được loại hình này người quản trị cần chuẩn bị các thành phần sau:
+ Một domain được cung cấp bởi các domain provider
+ Chứng chỉ bảo mật (SSL) còn hạn đi kèm. Nếu không có sẵn Certificate riêng User có thể sử dụng SSL certificate được tạo tự động bởi Sunteco.
**Các thuộc tính cấu hình expose service.**
* Route Name: Tên phục vụ cho mục đích quản lý
* Host Name: Tên miền sẽ áp dụng cho việc publish dịch vụ
* Wildcard Subdomain policy:
- None: Chỉ có Host Name được chỉ định ở trên có thể truy cập được vào route này
- SubDomain: Cả Hostname(Domain) và Subdomain có thể access vào route này
* Domain:
- Hệ thống liệt kê các Domain của người dùng đã ủy quyền Quản lý DNS Record sang cho Sunteco Cloud. Các Domain này đã được cài đặt nameserver sang nameserver mà Sunteco Cloud hướng dẫn. Để có thể ủy quyền cho Sunteco Cloud quản lý bản ghi DNS làm theo {ref}`hướng dẫn Tạo certificate` với loại Let's encrypt.
- Nếu người dùng tự quản lý các bản ghi DNS record trên trang quản lý Domain, để trống trường này. Nhưng bên cạnh đó, người dùng cần cấu hình DNS record để mapping Domain của người dùng tới địa chỉ của Sunteco tại IP 103.9.211.244. Xem thêm {ref}`Hướng dẫn thay đổi cài đặt DNS`.
* Path: *Optional*, Phần url ngay sau domain nếu như ứng dụng có định nghĩa thêm root path của ứng dụng.
* Secure Route: Enable/Disable secure route. Nếu disable phần này, ứng dụng sẽ được expose ra dưới dạng unsecure route(Http)
* Port Name: Tham chiếu đến phần Service Port Mapping đã được định nghĩa.
* SSL: Chọn Certificate ứng với Domain của khách hàng, nếu certificate không chính xác, Domain sẽ không thể publish được dưới dạng Https. Xem thêm {ref}`Quản lý SSL`
* Insecure trafic
- 1. **Allow**: Cho phép giao thức http đi qua để mở link bằng http : default chọn với route unsecured.
Khi Insecure traffic: được thiết lập thành "Allow" trong một tài nguyên Route của Sun Container Spinner, có nghĩa là tài nguyên Route sẽ chấp nhận kết nối không an toàn (HTTP) từ các máy khách.
- 2. **Redirect**: Chuyển hướng http sang https
Khi Insecure traffic được thiết lập thành "Redirect" trong một tài nguyên Route , có nghĩa là tài nguyên Route sẽ tự động chuyển hướng (redirect) các kết nối không an toàn (HTTP) sang kết nối an toàn (HTTPS).
Khi một yêu cầu HTTP được gửi đến tài nguyên Route, nếu Insecure trafdefic được thiết lập thành "Redirect", tài nguyên Route sẽ tự động tạo một phản hồi chuyển hướng (HTTP 301 Redirect) và yêu cầu gửi lại yêu cầu qua kết nối an toàn (HTTPS). Điều này đảm bảo rằng tất cả giao tiếp giữa máy khách và ứng dụng sẽ sử dụng kết nối an toàn, bảo vệ thông tin và đáp ứng các yêu cầu bảo mật.
Tùy chọn "Redirect" trong Insecure traffic là một cách để đảm bảo rằng tất cả kết nối không an toàn sẽ được chuyển hướng sang kết nối an toàn mà không cho phép giao tiếp không an toàn. Điều này giúp tăng cường tính bảo mật và tuân thủ các quy định bảo mật.
- 3. **None**: Từ chối mọi gói tin http.
Khi insecure traffic được thiết lập thành "None" trong một tài nguyên Route, có nghĩa là tài nguyên Route sẽ không chấp nhận kết nối không an toàn (HTTP) từ các máy khách và chỉ chấp nhận kết nối an toàn (HTTPS).
Khi insecure traffic được thiết lập thành "None", bất kỳ yêu cầu HTTP nào được gửi đến tài nguyên Route sẽ bị từ chối và trả về một lỗi hoặc thông báo không chấp nhận kết nối không an toàn. Điều này yêu cầu máy khách sử dụng kết nối an toàn (HTTPS) để tương tác với tài nguyên Route.
Thiết lập insecure traffic thành "None" là một cách để bắt buộc việc sử dụng kết nối an toàn (HTTPS) và từ chối tất cả các kết nối không an toàn (HTTP). Điều này giúp đảm bảo tính bảo mật và tuân thủ các yêu cầu bảo mật, đặc biệt khi làm việc với dữ liệu nhạy cảm hoặc khi tuân thủ các chuẩn mực bảo mật như PCI DSS hay HIPAA.
## Rate Limit
Rate limit trong Sun Container Spinner giúp bảo vệ và duy trì sự ổn định của hệ thống bằng cách đảm bảo rằng tài nguyên được sử dụng một cách hợp lý và không bị quá tải. Nó cũng có thể giúp ngăn chặn các cuộc tấn công từ người dùng hay bot không đáng tin cậy, như các cuộc tấn công DDoS hay lạm dụng tài nguyên.
Sunteco cung cấp các tính năng và công cụ để thực hiện rate limit trên các ứng dụng và dịch vụ được triển khai trên nền tảng Sun Container Spinner.
## Timeout
Cài đặt timeout cho phép người dùng thay đổi thời gian chờ của route đang được xuất bản. Tính năng này thường được sử dụng trong trường hợp hệ thống có những API hoặc chức năng mất nhiều thời gian xử lý.
Mặc định thời gian chờ của hệ thống đang là 30s. Việc tăng timeout có thể đáp ứng các chức năng nghiệp vụ như các query database mất nhiều thời gian, xuất báo cáo...