+4

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 Tool

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. image.png

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:

image.png

image.png

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

image.png

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ả:

image.png

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

image.png

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

Viblo
Let's register a Viblo Account to get more interesting posts.