Kubernetes Add-on¶
Trong hệ sinh thái Kubernetes (K8s), việc tối ưu hóa và mở rộng hệ thống là vô cùng quan trọng để đáp ứng yêu cầu phức tạp của các ứng dụng hiện đại. Để giải quyết các bài toán này, các add-on cung cấp những tính năng cần thiết nhằm bổ sung, mở rộng khả năng của K8s theo nhiều cách khác nhau. Bài viết này sẽ tham khảo về các add-on phổ biến bao gồm: Kubernetes Dashboard, Nginx Ingress, BlockStore Persistent CSI Drive, Load Balancer Integration và Bastion.
I. Kubernetes Dashboard¶
Kubernetes Dashboard là một giao diện web trực quan cho phép người dùng quản lý, giám sát các thành phần trong cụm K8s một cách dễ dàng. Thay vì chỉ sử dụng dòng lệnh, Dashboard cung cấp giao diện đồ họa, hỗ trợ thao tác nhanh chóng trên các tài nguyên như Pod, Deployment, Service và nhiều tài nguyên khác.
1. Tính năng nổi bật:¶
Quản lý tài nguyên: Người dùng có thể tạo, cập nhật, và xóa các tài nguyên trong cụm thông qua giao diện trực quan.
Giám sát: Hiển thị các thông số chi tiết về trạng thái của từng tài nguyên trong thời gian thực.
Debug nhanh: Dễ dàng kiểm tra log của từng Pod, xem sự phân bố tài nguyên, và phát hiện các vấn đề.
Bảo mật: Cung cấp cách tiếp cận linh hoạt và dễ quản lý quyền truy cập dựa trên vai trò (RBAC).
Với Kubernetes Dashboard, việc giám sát và vận hành cụm K8s trở nên đơn giản hơn, giúp các nhóm phát triển tiết kiệm thời gian và giảm thiểu sai sót.
2. Chi phí¶
Kubernetes Dashboard là một add-on mã nguồn mở. Tuy nhiên, có một số yếu tố có thể ảnh hưởng đến chi phí tổng thể khi sử dụng Dashboard:
Tài nguyên hạ tầng: Kubernetes Dashboard sử dụng CPU và bộ nhớ từ các node trong cụm để chạy ứng dụng web, có thể yêu cầu một lượng tài nguyên đáng kể trong các hệ thống lớn.
Tăng chi phí quản lý: Việc chạy Dashboard yêu cầu một số tác vụ bảo trì và quản lý để đảm bảo tính bảo mật và ổn định của hệ thống, bao gồm việc quản lý chứng chỉ SSL, bảo vệ quyền truy cập, và giám sát các container.
Mặc dù Kubernetes Dashboard bản thân nó không có chi phí trực tiếp, nhưng việc duy trì và sử dụng có thể phát sinh chi phí về tài nguyên hạ tầng và bảo mật.
II. Nginx Ingress¶
Nginx Ingress là một thành phần quan trọng trong K8s giúp quản lý và điều hướng lưu lượng vào các ứng dụng chạy trong cụm. Thay vì cấu hình các Service với loại LoadBalancer hoặc NodePort, Nginx Ingress cung cấp cách tiếp cận mềm dẻo hơn để xử lý các yêu cầu HTTP/HTTPS thông qua một điểm duy nhất.
1. Tính năng nổi bật:¶
Điều hướng thông minh: Hỗ trợ routing yêu cầu dựa trên URL path hoặc host, giúp phân phối đúng dịch vụ ứng với từng yêu cầu.
SSL/TLS termination: Hỗ trợ chấm dứt kết nối HTTPS ở tầng Ingress, giảm bớt tải cho các ứng dụng phía sau.
Load balancing: Phân phối lưu lượng tới các Pod theo cơ chế round-robin, đảm bảo hiệu năng và độ tin cậy của hệ thống.
Tích hợp với Let’s Encrypt: Tự động cấp phát và gia hạn chứng chỉ SSL miễn phí.
Nginx Ingress là một giải pháp tuyệt vời giúp đơn giản hóa việc quản lý lưu lượng, tăng cường khả năng bảo mật và hiệu suất cho hệ thống.
2. Chi phí¶
Nginx Ingress là một add-on mã nguồn mở, nhưng chi phí vận hành nó có thể phụ thuộc vào nhiều yếu tố khác nhau:
Tài nguyên tính toán: Nginx Ingress Controller chạy trên một hoặc nhiều Pod trong cụm, sử dụng tài nguyên như CPU và RAM của các node. Khi lượng lưu lượng truy cập tăng lên, bạn có thể cần tăng số lượng Pod hoặc node để đảm bảo hệ thống hoạt động mượt mà, dẫn đến tăng chi phí sử dụng tài nguyên.
Load Balancer: Nếu sử dụng Nginx Ingress để xử lý các yêu cầu HTTP/HTTPS từ bên ngoài, bạn có thể cần triển khai kèm theo một dịch vụ Load Balancer. Sunteco tính phí cho việc sử dụng Load Balancer này
Chứng chỉ SSL: Để xử lý lưu lượng HTTPS, bạn có thể cần mua chứng chỉ SSL từ các nhà cung cấp chứng chỉ hoặc sử dụng dịch vụ như Let’s Encrypt (miễn phí nhưng cần quản lý). Việc duy trì và quản lý chứng chỉ cũng có thể phát sinh chi phí trong việc đảm bảo chứng chỉ luôn được cập nhật.
Lưu lượng mạng: Nginx Ingress đóng vai trò điều hướng lưu lượng, và lượng dữ liệu truyền qua hệ thống cũng có thể ảnh hưởng đến chi phí.
Mặc dù Nginx Ingress Controller bản thân nó không tốn phí, các yếu tố như tài nguyên hạ tầng, Load Balancer và chi phí quản lý chứng chỉ SSL có thể làm tăng chi phí tổng thể khi vận hành add-on này.
III. BlockStore Persistent CSI Drive¶
BlockStore Persistent CSI Drive là một add-on cung cấp giải pháp lưu trữ block storage bền vững cho các ứng dụng chạy trên K8s. CSI (Container Storage Interface) là một chuẩn để tích hợp lưu trữ ngoài với K8s, giúp quản lý và phân bổ lưu trữ đơn giản hơn.
Tính năng nổi bật:¶
Lưu trữ bền vững: Dữ liệu của ứng dụng sẽ được lưu trữ trên các volume bền vững, không bị mất ngay cả khi Pod bị xóa hoặc khởi động lại.
Dynamic provisioning: Tự động tạo các Persistent Volume (PV) khi cần thiết, giảm thiểu công việc cấu hình thủ công.
Hiệu năng cao: Block storage mang lại tốc độ truy xuất dữ liệu nhanh hơn so với các giải pháp lưu trữ file-based truyền thống.
Khả năng mở rộng: Hỗ trợ mở rộng dung lượng khi nhu cầu lưu trữ tăng cao mà không cần phải tái khởi động ứng dụng.
BlockStore Persistent CSI Drive là giải pháp hoàn hảo cho các ứng dụng yêu cầu khả năng lưu trữ mạnh mẽ và bền vững, đặc biệt là với các hệ thống dữ liệu lớn hoặc cơ sở dữ liệu.
IV. Load Balancer Integration¶
Load Balancer Integration là add-on quan trọng trong việc phân phối lưu lượng đến các ứng dụng bên trong K8s. Nó cung cấp khả năng tích hợp trực tiếp với các dịch vụ load balancer của cloud provider để giúp phân phối lưu lượng truy cập từ bên ngoài vào các Pod trong cụm.
Tính năng nổi bật:¶
Tự động hóa: Load Balancer được tạo tự động khi một Service với loại Load Balancer được khai báo trong Kubernetes.
Phân phối tải tối ưu: Hỗ trợ phân phối tải theo cách thông minh đến các Pod đang chạy, tối ưu hóa việc sử dụng tài nguyên.
Khả năng mở rộng: Hỗ trợ tự động điều chỉnh số lượng backend khi các Pod được thêm hoặc xóa.
Load Balancer Integration giúp tăng cường khả năng mở rộng và độ tin cậy của hệ thống, đảm bảo các ứng dụng luôn sẵn sàng xử lý khối lượng truy cập lớn mà không bị gián đoạn.
V. Bastion¶
Bastion Host là một máy chủ trung gian được triển khai với mục đích bảo mật, đóng vai trò như một “cửa ngõ” an toàn để truy cập vào các tài nguyên bên trong Kubernetes clusters. Trong hệ thống của Sunteco, Bastion Host được đặt trong một public subnet của VPC và chỉ cho phép truy cập đến các tài nguyên trong private subnet hoặc các thành phần khác trong hệ thống mà không cần kết nối trực tiếp từ internet.
Bastion Host trong Sun Kubernetes Service được cung cấp như một add-on nhằm hỗ trợ truy cập tạm thời vào các worker node khi cần thiết và không ảnh hưởng đến hoạt động chính của dịch vụ Managed Kubernetes. Điều này có nghĩa là Managed K8s có thể hoạt động độc lập, không cần Bastion Host để điều hành các node hay hệ thống.
Bastion Host Add-on với Tài nguyên Cố định: Bastion Host với một flavor (cấu hình tài nguyên) cố định và được tính chi phí theo giờ. Điều này có nghĩa là người dùng không thể tùy chỉnh CPU, RAM, hoặc dung lượng đĩa cho Bastion Host mà sẽ sử dụng cấu hình chuẩn được xác định bởi nhà cung cấp.
Bastion Host trong trường hợp này được thiết lập với chính sách bảo mật tối đa, chỉ cho phép truy cập bằng SSH thông qua Public Key và không có bất kỳ cơ chế khôi phục hoặc bảo lưu nào. Điều này có nghĩa là việc truy cập Bastion chỉ có thể thực hiện qua SSH sử dụng cặp public/private key và không có phương thức khác để đăng nhập hay khôi phục quyền truy cập. Các yêu cầu duy trì hoặc cập nhật cấu hình cũng sẽ không được hỗ trợ, giữ cho Bastion luôn ở trạng thái tạm thời và an toàn. Cụ thể:
1. Truy cập bằng SSH Public Key¶
Người dùng chỉ có thể truy cập vào Bastion Host thông qua cặp khóa SSH đã được cấu hình khi khởi tạo.
Không hỗ trợ bất kỳ phương thức đăng nhập nào khác (như mật khẩu) để đảm bảo tính bảo mật.
Quá trình truy cập diễn ra như sau:
Người dùng tạo một cặp SSH Key (public/private) trên máy cá nhân hoặc trên hệ thống của Sunteco sau đó tải về Private Key.
Public Key sẽ được tải lên và cấu hình trong Bastion khi khởi tạo.
Người dùng sử dụng Private Key trên máy cá nhân để kết nối đến Bastion qua SSH. Không sử dụng mật khẩu mà chỉ cho phép truy cập qua SSH keys, giúp bảo vệ hệ thống khỏi các cuộc tấn công brute-force qua password.
Tài khoản
gardenerlà tài khoản duy nhất được cung cấp để truy cập Bastion Host và người dùng sẽ không thể thay đổi tài khoản này hoặc tạo thêm tài khoản mới.Port 22 sử dụng cho giao thức SSH, vì vậy người dùng không cần phải cấu hình thêm gì đặc biệt khi sử dụng Bastion Host.
Ví dụ lệnh SSH khi kết nối tới Bastion:
ssh -i /path/to/private_key gardener@<bastion_ip>
2. Không có cơ chế khôi phục¶
Nếu người dùng mất Private Key hoặc xảy ra vấn đề với kết nối SSH, sẽ không có cách nào để khôi phục lại quyền truy cập vào Bastion Host.
Điều này là để đảm bảo rằng các hệ thống tạm thời hoặc bảo mật cao không lưu giữ bất kỳ thông tin nào có thể bị lạm dụng sau này.
Khi mất private key, giải pháp duy nhất là tạo lại Bastion với cặp khóa mới.