Mở đầu
Ngày nay cùng với sự phát triển không ngừng của phần mềm, sự ra đời của Cloud, SASS, BigData việc phát triển ứng dụng dựa trên kiến trúc micorservice ngày càng được quan tâm nhiều hơn. Để quản lý và phát triển các microservice được dễ dàng hơn, một ứng dụng không thể thiếu đó là Kubernetes và NGINX Service Mesh.
What NGINX Service Mesh
NGINX Service Mesh (NSM) là một tập hợp đầy đủ các service để quản lý luồng xử lý, giao tiếp của các micorservice trên môi trường Kubernetes và được cung cấp bới Nginx Plus. NSM hiện đang cung cấp miễn phí và download tại đây.
Benefit NSM
Việc áp dụng microservices vào dự án đi kèm với những thách thức khi việc triển khai và mở rộng trở nên phức tạp hơn. Giao tiếp giữa các dịch vụ rất phức tạp, việc gỡ lỗi cũng khó hơn và nhiều dịch vụ hơn đồng nghĩa với việc quản lý nhiều tài nguyên hơn.
NSM giải quyết tất cả các vấn đề trên bằng cách giải quyết các vấn đề sau:
- Security - Bảo mật luôn là vấn đề quan trọng nhất. Việc dữ liệu bị mất mát có thể làm cho các tổ chụcw thiệt hại hàng triệu đô doanh thu mỗi năm cùng với đó danh tiếng và lượng khách hàng. NSM đảm bảo tất các dữ liệu đều được mã hóa mTLS (1 dạng mã hóa với độ bảo mật rất cao) để đảm bảo dữ liệu nhạy cảm không bị tin tặc đánh cắp. "Access control" cho phép bạn đặt ra các policies cho các service được phép giao tiếp với nhau.
- Traffic management - Khi bạn deploy một tính năng mới, ban đầu có thể bạn sẽ muốn giới hạn dung lượng mà hệ thống của mình nhận được. NSM cung cấp tính năng cho bạn có thể config limit traffic và có thể tăng dần traffic theo thời gian. Bên cạnh đó NSM còn cung cấp chức năng giới hạn tốc độ, ngắt kết nối từng đương truyền
- Visualization - Thử hình dung khi bạn phải quản lý hàng nghìn service đó thật là một cơn ác mộng để quản lý và debug. NSM cung cấp 1 bảng hiển thị Grafana có đầy đủ dữ liệu mà bạn mong muốn (cả tổng quan lẫn chi tiết đến từng service)
- Hybrid deployments - Nếu các service của hệ thống bạn không phải chỉ có trên Kubernetes mà còn ở bên ngoài. NSM cung cấp 1 tính năng là NGINX Ingress Controller để đảm bảo các mesh service (trong Kubernetes) có thể giao tiếp với các service bên ngoài và ngược lại
NSM Architecture
Kiến trúc của hệ thống NSM sẽ được mô tả như sau
Về cơ bản NSM sẽ gồm các thành phần cơ bản sau:
- Grafana – Trực quan hóa Prometheus metrics - bảng điều khiển NSM
- Kubernetes Ingress controller - Quản lý traffic vào và ra
- PIRE - Quản lý các quyền và đảm bảo quyền cho mesh
- NATS – Nơi quản lý các message của hệ thống mesh
- Open Tracing – Hệ thống ghi log phân tán (Zipkin and Jaeger)
- Prometheus – Thu thập và lưu trữ các metrics từ Nginx plus như số lượng request, kết nối v..v...
Features and Components
- Mutual TLS (mTLS) authentication
- Load balancing
- High availability
- Limiting
- Ngắt kết nối
- Blue‑green and canary deployments (B/G deploy và canary deploy - deploy từng phần
Getting Started with NSM
- Truy câp hệ thống có cài mội trường Kubernetes (Amazon Elastic Container Service for Kubernetes (EKS), the Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), VMware vSpher)
- Cài đặt kubectl commands trên máy đã cái NSM
- Truy cập vào hệ thống NSM, các pacakge bao gốm NSM image phải được đẩy vào các private cointainer mà Kubernetes có thể truy cập
- Deploy NSM
$ DOCKER_REGISTRY=your-Docker-registry ; MESH_VER=0.6.0 ; \ ./nginx-meshctl deploy \ --nginx-mesh-api-image "${DOCKER_REGISTRY}/nginx-mesh-api:${MESH_VER}" \ --nginx-mesh-sidecar-image "${DOCKER_REGISTRY}/nginx-mesh-sidecar:${MESH_VER}" \ --nginx-mesh-init-image "${DOCKER_REGISTRY}/nginx-mesh-init:${MESH_VER}" \ --nginx-mesh-metrics-image "${DOCKER_REGISTRY}/nginx-mesh-metrics:${MESH_VER}"
Created namespace "nginx-mesh".
Created SpiffeID CRD.
Waiting for Spire pods to be running...done.
Deployed Spire.
Deployed NATS server.
Created traffic policy CRDs.
Deployed Mesh API.
Deployed Metrics API Server.
Deployed Prometheus Server nginx-mesh/prometheus-server.
Deployed Grafana nginx-mesh/grafana.
Deployed tracing server nginx-mesh/zipkin.
All resources created. Testing the connection to the Service Mesh API Server... Connected to the NGINX Service Mesh API successfully.
NGINX Service Mesh is running.
- Verify xem các thành phần của NSM đã được chạy chưa
$ kubectl get pods –n nginx-mesh
NAME READY STATUS RESTARTS AGE
grafana-6cc6958cd9-dccj6 1/1 Running 0 2d19h
mesh-api-6b95576c46-8npkb 1/1 Running 0 2d19h
nats-server-6d5c57f894-225qn 1/1 Running 0 2d19h
prometheus-server-65c95b788b-zkt95 1/1 Running 0 2d19h
smi-metrics-5986dfb8d5-q6gfj 1/1 Running 0 2d19h
spire-agent-5cf87 1/1 Running 0 2d19h
spire-agent-rr2tt 1/1 Running 0 2d19h
spire-agent-vwjbv 1/1 Running 0 2d19h
spire-server-0 2/2 Running 0 2d19h
zipkin-6f7cbf5467-ns6wc 1/1 Running 0 2d19h
- Ví dụ chúng ta đã chạy ứng dụng test, để kiểm tra xem ứng dụng test đang chạy trên cointaner nào
$ kubectl apply –f test.yaml
$ kubectl get pods –n default
NAME READY STATUS RESTARTS AGE
test-674f75ff4d-gxjf2 2/2 Running 0 5h23m
- Ta cũng có thể monitor ứng dụng test bằng cách gõ command
kubectl port-forward test-674f75ff4d-gxjf2 8080:8886
- Sau đó truy cập http://localhost:8080/dashboard.html để kiểm tra ứng dụng test
Summary
Bên cạnh NGINX Service Mesh còn nhiều công cụ khác để quản lý, theo dõi và debug các microservices nhưng đa số chúng đều mất phí. NSM hiện đang miễn phí download, mình nghĩ các bạn nên thử để cho công việc được dễ dàng và thuận tiện hơn