Khởi tạo một Private Cluster
Last updated
Last updated
Địa chỉ
VNG CorporationTrước đây, các public cluster trên VKS đang sử dụng địa chỉ Public IP để giao tiếp giữa nodes và control plane. Để nâng cao bảo mật cho cluster của bạn, chúng tôi đã cho ra mắt mô hình private cluster. Tính năng Private Cluster giúp cho cụm K8S của bạn được bảo mật nhất có thể, mọi kết nối hoàn toàn là private từ kết nối giữa nodes tới control plane, kết nối từ client tới control plane, hay kết nối từ nodes tới các sản phẩm dịch vụ khác trong VNG Cloud như: vStorage, vCR, vMonitor, VNGCloud APIs,...Private Cluster là lựa chọn lý tưởng cho các dịch vụ yêu cầu kiểm soát truy cập chặt chẽ, đảm bảo tuân thủ các quy định về bảo mật và quyền riêng tư dữ liệu.
Thành phần
Control plane: Được quản lý bởi VNG Cloud, chịu trách nhiệm điều phối và quản lý toàn bộ cluster.
Nodes: Các Node trong Cluster khi được tạo ra sẽ chỉ có internal IP và không thể đi ra public internet. Nếu muốn node truy cập được internet, bạn cần sử dụng NAT Gateway. Chi tiết tham khảo thêm tại đây.
Private Load Balancer: Được quản lý bởi VNG Cloud, chịu trách nhiệm giúp các Private Node giao tiếp với Control Plane.
Private Service Endpoint: Khi bạn tạo một private cluster, hệ thống tự động tạo 4 endpoints giúp kết nối với các dịch vụ khác trên VNG Cloud bao gồm:
Endpoint để kết nối tới dịch vụ IAM (Endpoint Name: vks-iam-endpoint-...)
Endpoint để kết nối tới dịch vụ vCR (Endpoint Name: vks-vcr-endpoint-...)
Endpoint để kết nối tới dịch vụ vServer (Endpoint Name: vks-vserver-endpoint-...)
Endpoint để kết nối tới dịch vụ vStorage (Endpoint Name: vks-vstorage-endpoint-...)
Bạn có thể xem thông tin 4 private service endpoint thông qua portal vServer theo đường dẫn tại đây.
Warning:
Không xóa Private Service Endpoint: Để đảm bảo hoạt động ổn định của cluster, bạn không nên xóa 4 service endpoint đã được tạo sẵn. Nếu vô tình xóa hoặc chỉnh sửa 4 endpoint này, trong vòng tối đa 5 phút, hệ thống sẽ tự động tạo lại nhưng có thể gây gián đoạn đến các dịch vụ đang chạy. Lúc này, do service endpoint tạo lại có thể đã thay đổi Endpoint IP so với ban đầu nên để cluster hoạt động được, bạn cần thực hiện thêm Endpoint IP một cách thủ công cho những server đang chạy trước đó thông qua câu lệnh:
Ví dụ, nếu bạn xóa private service endpoint của vCR thì bạn cần add host qua lệnh:
Tái sử dụng Private Service Endpoint: Các service endpoint có thể được nhiều private cluster cùng sử dụng. Khi các private cluster chung VPC thì chúng tôi sẽ tái sử dụng chúng cho các cluster này.
Xóa Private Service Endpoint tự động: Khi bạn xóa cluster, nếu không còn cluster nào tái sử dụng các service endpoint này, hệ thống sẽ tự động xóa chúng.
Chi phí sử dụng Private Service Endpoint: Việc sử dụng private cluster sẽ phát sinh thêm chi phí cho 4 private service endpoint, nhưng nó mang lại nhiều lợi ích về bảo mật cho dự án của bạn. Bạn hãy cân nhắc kỹ lưỡng các yếu tố để đưa ra quyết định sử dụng public hay private cho cluster của mình.
Để có thể khởi tạo một Cluster và Deploy một Workload, bạn cần:
Có ít nhất 1 VPC và 1 Subnet đang ở trạng thái ACTIVE. Nếu bạn chưa có VPC, Subnet nào, vui lòng khởi tạo VPC, Subnet theo hướng dẫn tại đây.
Có ít nhất 1 SSH key đang ở trạng thái ACTIVE. Nếu bạn chưa có SSH key nào, vui lòng khởi tạo SSH key theo hướng dẫn tại đây.
Đã cài đặt và cấu hình kubectl trên thiết bị của bạn. vui lòng tham khảo tại đây nếu bạn chưa rõ cách cài đặt và sử dụng kuberctl. Ngoài ra, bạn không nên sử dụng phiên bản kubectl quá cũ, chúng tôi khuyến cáo bạn nên sử dụng phiên bản kubectl sai lệch không quá một phiên bản với version của cluster.
Cluster trong Kubernetes là một tập hợp gồm một hoặc nhiều máy ảo (VM) được kết nối lại với nhau để chạy các ứng dụng được đóng gói dạng container. Cluster cung cấp một môi trường thống nhất để triển khai, quản lý và vận hành các container trên quy mô lớn.
Để khởi tạo một Cluster, hãy làm theo các bước bên dưới:
Bước 1: Truy cập vào https://vks.console.vngcloud.vn/overview
Bước 2: Tại màn hình Overview, chọn Activate.
Bước 3: Chờ đợi tới khi chúng tôi khởi tạo thành công tài khoản VKS của bạn. Sau khi Activate thành công, bạn hãy chọn Create a Cluster
Bước 4: Tại màn hình khởi tạo Cluster, chúng tôi đã thiết lập thông tin cho Cluster và một Default Node Group cho bạn, bạn có thể giữ các giá trị mặc định này hoặc điều chỉnh các thông số mong muốn cho Cluster và Node Group của bạn tại Cluster Configuration, Default Node Group Configuration, Plugin.
Bước 5: Chọn Create Kubernetes cluster. Hãy chờ vài phút để chúng tôi khởi tạo Cluster của bạn, trạng thái của Cluster lúc này là Creating.
Bước 6: Khi trạng thái Cluster là Active, bạn có thể xem thông tin Cluster, thông tin Node Group bằng cách chọn vào Cluster Name tại cột Name.
Warning:
Một Cluster có thể có nhiều Node Group, mỗi Node Group có thể hoạt động ở mode Public/ Private tùy theo nhu cầu của bạn.
Do Cluster của bạn được khởi tạo ở chế độ Private, để có thể truy cập vào kube-api của Control Plane thì bạn cần đứng trong VPC mà bạn chọn sử dụng cho Cluster của bạn.
Sau khi Cluster được khởi tạo thành công, bạn có thể thực hiện kết nối và kiểm tra thông tin Cluster vừa tạo theo các bước:
Bước 1: Truy cập vào https://vks.console.vngcloud.vn/k8s-cluster
Bước 2: Danh sách Cluster được hiển thị, chọn biểu tượng Download và chọn Download config file để thực hiện tải xuống file kubeconfig. File này sẽ giúp bạn có toàn quyền truy cập vào Cluster của bạn.
Bước 3: Đổi tên file này thành config và lưu nó vào thư mục ~/.kube/config
Bước 4: Do Cluster của bạn được khởi tạo ở chế độ Private, để có thể truy cập vào kube-api, bạn cần đứng trong VPC mà bạn đã chọn sử dụng cho Cluster của bạn. Ví dụ, khi bạn không đứng ở VPC và thực hiện get nodes, kết quả sẽ hiển thị như sau:
Trong ví dụ bên dưới tôi sẽ đứng tại một server có VPC cùng với VPC được sử dụng cho Cluster. Bạn có thể thực hiện SSH vào server theo hướng dẫn tại đây. Sau khi SSH vào server, hãy cài đặt kubectl theo hướng dẫn tại đây.
Ví dụ, tôi đang sử dụng một server linux để thực hiện get nodes, tôi có thể cài đặt kubectl qua lệnh:
Sau đó, tôi kiểm tra kubectl qua lệnh:
Tạo thư mục .kube
qua lệnh:
Sau đó, bạn hãy nhập file kubeconfig qua lệnh:
Sau đó, bạn nhập :wq để lưu file kubeconfig và thoát vim.
Chạy câu lệnh sau đây để kiểm tra cluster
Bạn sẽ thấy kết quả trả về tương tự sau:
Chạy câu lệnh sau đây để kiểm tra node
Nếu kết quả trả về như bên dưới tức là bạn Cluster của bạn được khởi tạo thành công với 1 node như bên dưới.
Do Private Cluster chỉ có thể kết nối private tới hệ thống vContainer Registry (vCR) và không thể kết nối ra các Container Registry khác ngoài internet, nên bạn cần pull/ push image về vCR để sử dụng theo hướng dẫn sau đây:
Thực hiện cài đặt docker theo hướng dẫn tại đây.
Đăng nhập portal vCR tại đường dẫn: https://vcr.console.vngcloud.vn/list
Thực hiện khởi tạo Repositoryvà Repository theo hướng dẫn tại đây. Ví dụ trong hình dưới, tôi đã khởi tạo demo_repo với demo_user có thể pull/ push image:
Warning:
Nếu bạn mong muốn khởi tạo Private Reposity, để pull image từ Private Reposity, bạn cần tạo secret key theo hướng dẫn tại đây.
Bước 3: Thực hiện pull image nginx về theo lệnh:
Bươc 4: Thực hiện login vào vCR qua lệnh:
Ví dụ, câu lệnh dưới tôi sử dụng để login vào repo demo:
Bước 5: Gán tag cho image nginx
Ví dụ, câu lệnh dưới tôi sử dụng để gán tag cho image nginx:
Bước 6: Thực hiện push image lên repo qua lệnh:
Ví dụ, câu lệnh dưới tôi sử dụng để push image lên demo_repo:
Sau đây là hướng dẫn để bạn deploy service nginx và expose service này qua Network Load Balancer
Sau đó, bạn hãy nhập nội dung cho file này như sau: bạn cần thay image bằng đường dẫn image lưu trên vCR mà bạn đã push ở bước bên trên:
Nhập :wq để lưu tệp tin này.
Deploy Deployment này bằng lệch:
Bước 2: Kiểm tra thông tin Deployment, Service trước khi expose ra Internet.
Chạy câu lệnh sau đây để kiểm tra Deployment
Nếu kết quả trả về như bên dưới tức là bạn đã deploy service nginx thành công.
Lúc này, hệ thống vLB sẽ khởi tạo môt Network Load Balancer, bạn có thể xem thông tin LB này thông qua portal vLB tại đây.
Bước 3: Để truy cập vào app nginx vừa export, bạn có thể sử dụng Endpoint của Load Balancer URL với định dạng:
Bạn có thể lấy thông tin Public Endpoint của Load Balancer tại giao diện vLB. Cụ thể truy cập tại https://hcm-3.console.vngcloud.vn/vserver/load-balancer/vlb/
Ví dụ, bên dưới tôi đã truy cập thành công vào app nginx với địa chỉ : http://116.118.88.236/
Một vài chú ý khác:
Bên trên là ví dụ hướng dẫn bạn thực hiện expose một service thông qua vLB Layer 4, bạn có thể thực hiện expose service thông qua vLB Layer 7 theo hướng dẫn tại đây.
Để đảm bảo private cluster hoạt động hiệu quả, chúng tôi đã tự động thêm Subnet mà bạn chọn sử dụng cho Cluster vào danh sách Whitelist của cụm. Bạn có thể sử dụng tính năng Whitelist để giới hạn các Subnet trong VPC có quyền truy cập vào kube-api. Chi tiết cách sử dụng tính năng Whitelist vui lòng tham khảo tại đây.