KubeVPN công cụ giúp debug trên môi trường Kubernetes nhanh chóng và hiệu quả hơn
KubeVPN là gì?
KubeVPN là một công cụ cho phép bạn truy cập vào nội bộ (local) của cụm Kubernetes từ đó bạn có thể truy cập vào các tài nguyên trong cụm K8s đó như pod, service,... thông qua IP local của các tài nguyên đó. Chúng ta có thể tưởng tượng nếu VPN bình thường sẽ giúp chúng ta truy cập vào 1dải mạng private thì KubeVPN cũng vậy, KubeVPN giúp chúng ta truy cập vào dải mạng private của Kubernetes thông qua tunnel. Ngoài ra KubeVPN cung cấp 1 vài tính năng khác như:
- Cho phép bắt lưu lượng traffic vào các resource trên Kubernetes
- Cho phép chạy Kubenetes Workload (Pods, Deployment,...) tại docker trên máy local
- Copy file từ trong container ra máy local (cái này kubectl cũng làm được tuy nhiên kubevpn hỗ trợ copy thông qua 1 bastion host)
Cài đặt KubeVPN
Link repo github KubeVPN: https://github.com/KubeNetworks/kubevpn
KubeVPN hiện hỗ trợ khá đầy đủ các nền tảng: MacOS, Linux, Windows.
Vì mình dùng Ubuntu nên trong bài này mình sẽ hướng dẫn cách cài đặt cho Ubuntu. Để cài đặt các bạn vào phần release (https://github.com/KubeNetworks/kubevpn/releases) của KubeVPN trên Github và tải về đúng phiên bản mình cần. Đối với Linux/Ubuntu các bạn có thể thực hiện như sau:
# Tải về file nén
curl -L -O https://github.com/KubeNetworks/kubevpn/releases/download/v1.1.35/kubevpn_v1.1.35_linux_amd64.zip
# Giải nén bằng unzip
unzip kubevpn_v1.1.35_linux_amd64.zip
Sau khi giải nén xong bạn có thể sử dụng command sau để kiểm tra đã giải nén thành công hay chưa
./bin/kubevpn
Output trả về thế này là thành công.
Sử dụng KubeVPN để truy cập mạng private Kubernetes
Tất nhiên để kết nối đến cụm K8s ta cần có Kubeconfig, mặc định KubeVPN sẽ lấy kubeconfig tại path mặc định ~/.kube/config
trong môi trường thử nghiệm mình sẽ kết nối thử vào cụm K8s chạy thông qua minikube.
Để tạo kết nối đến cụm K8s ta sử dụng câu lệnh:
./bin/kubevpn connect
Khi thực hiện kết nối bạn sẽ thấy có deployment có tên kubevpn-traffic-manager sẽ được tạo trong cụm K8s dùng để mở tunnel giữa máy local và cụm K8s.
Output:
Nó kêu Enjoy it là được rồi nha! 🤣🤣🤣
Để test mình sẽ deploy thử 1 pod chạy nginx để xem có truy cập được qua IP Local K8s hay không, sử dụng câu lệnh sau để tạo pod:
#Chạy pod có tên nginx sử dụng image nginx:latest
kubectl run nginx --image=nginx
Ta thấy pod nginx có IP 10.244.0.5, tiến hành truy cập thử trên broswer ta có kết quả:
Như vậy giờ ta có thể truy cập vào các Pods, Services trong K8s trực tiếp thông qua IP và port để debug hay kiểm thử dễ dàng hơn rất nhiều.
Kết nối đến mạng K8s thông qua bastion host
Ngoài ra KubeVPN còn hỗ trợ bạn kết nối thông qua một hoặc nhiều bastion host, mô hình sẽ có dạng
Ví dụ để kết nối đến cụm k8s mà chỉ có thể truy cập được từ bastion host, câu lệnh sẽ có dạng như sau:
./bin/kubevpn connect --ssh-addr 172.16.5.29:22 --ssh-username viet --ssh-keyfile /home/hoangviet/.ssh/id_rsa
Trong đó 172.16.5.29:22 là địa chỉ IP và SSH Port của bastion host
viet là username
/home/hoangviet/.ssh/id_rsa là đường dẫn tới ssh private key
Kết
Hy vọng bài viết đã cung cấp được thêm một công cụ giúp các bạn thuận tiện hơn trong quá trình làm việc với Kubernetes. Nếu thấy bài viết bổ ích và muốn tìm hiểu thêm nhiều công cụ DevOps khác thì cho mình 1 Upvote và Follow nhé! Thank all. 😁
All Rights Reserved