Khởi tạo một Private Cluster

Trướ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.

Model

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 4 dịch vụ trên tại Region HCM thì bạn cần add host qua lệnh:

    • Nếu bạn xóa private service endpoint của vCR tại Region HAN 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.

  • Trên VKS, tại mỗi Region HCM hay HAN, domain của vCR để pull/ push image khác nhau. Hãy chú ý khi sử dụng để tránh nhầm lần. Cụ thể:

    • Với Region HCM: dùng domain vcr.vngcloud.vn

    • Với Region HAN: dùng domain vcr-han.vngcloud.vn


Điều kiện cần

Để có thể khởi tạo một ClusterDeploy 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.


Khởi tạo 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 ClusterActive, 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.


Kết nối và kiểm tra thông tin Cluster vừa tạo

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:

  • Nếu trên server của bạn chưa có snap, vui lòng thực hiện cài đặt 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.


Sử dụng Docker để Pull/Push image

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:

Bước 1: Cài đặt Docker

  • Thực hiện cài đặt docker theo hướng dẫn tại đây.

Bước 2: Khởi tạo Public Repository và Repository User trên vContainer Registry Portal:

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ới Region HCM:

  • Với Region HAN:

  • 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ới Region HCM:

  • Với Region HAN:

  • 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ới Region HCM:

  • Với Region HAN:

  • Ví dụ, câu lệnh dưới tôi sử dụng để push image lên demo_repo:


Deploy một Workload

Deploy một Workload và expose service qua vLB Layer 4

Sau đây là hướng dẫn để bạn deploy service nginx và expose service này qua vLB Layer 4 (Network Load Balancer)

Bước 1: Thực hiện tạo file nginx-service-lb4.yaml qua lệnh:

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 expose, 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/ hoặc https://han-1.console.vngcloud.vn/vserver/load-balancer/vlb tùy theo Region mà bạn khởi tạo Cluster.

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/

Deploy một Workload và expose service qua vLB Layer 7

Sau đây là hướng dẫn để bạn deploy service nginx và expose service này qua vLB Layer 7 (Application Load Balancer)

Bước 1: Thực hiện tạo file nginx-service-lb7.yaml qua lệnh:

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.


Bước 3: Thực hiện tạo file nginx-ingress.yaml qua lệnh:

Sau đó, bạn hãy nhập nội dung cho file này như sau:

  • Nhập :wq để lưu tệp tin này.

  • Deploy Ingress này bằng lệch:

Lúc này, hệ thống vLB sẽ khởi tạo môt Application Load Balancer, bạn có thể xem thông tin LB này thông qua portal vLB tại đây.

Bước 4: Để truy cập vào app nginx vừa expose, bạn có thể sử dụng Endpoint của Load Balancer 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/ hoặc https://han-1.console.vngcloud.vn/vserver/load-balancer/vlb tùy theo Region mà bạn khởi tạo Cluster.

Ví dụ, bên dưới tôi đã truy cập thành công vào app nginx với địa chỉ : http://180.93.181.129/

Một vài chú ý khác:

  • Để đả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.

Last updated