Sprint vừa rồi team mình có deploy một service mới trên EKS, vì mục đích ban đầu là deploy POC và công ty mình đang trong giai đoạn cut off chi phí nên team cũng ko config Cloudwatch, và Splunk thì công ty sắp deprecated để chuyển sang 3rd party mới nên team mình quyết đinh check log "chay" trong EKS POD luôn chứ k export logs đi đâu cả.
Thông thường nếu check logs trong EKD POD có thể dùng nhiều tool như Lens, ELK nhưng vì tính chất công ty của mình làm về domain banking nên việc xài các 3rd party tool mà không nằm trong hệ sinh thái của công ty là một việc rất hạn chế và không khuyến khích.
Vậy nên các dev hay devops sẽ check logs sử dụng một container được tạo từ K9s-cli image build-in của công ty. Tuy nhiên mình lại không có “cảm tình” với GUI màu mè xanh tím vàng của K9s CLI, và việc thao tác trên GUI cũng khiến mình cảm thấy mất nhiều thời gian và bị rối mắt mỗi khi cần check logs vì service của mình chạy rất nhiều cron job nên logs quá trời logs cùng một lúc!
Vì vậy nên mình đã thử xài 1 trick lỏ để có thể sử dụng kubectl - CLI của K8s để có thể check logs dễ dàng và nhanh chóng thông qua các alias mà mình sẽ config phía bên dưới.
Đâu tiên, để truy cập đến các private resource trên AWS các công ty thường sẽ sử dụng một Jumpbox(Bastion host) đóng vai trò như là một turnel giúp các developer có thể truy cập và các private resource cũng như ngăn chặn các truy cập từ các public access bên ngoài, chi tiết làm thế nào để tạo một Jumpbox các bạn xem tại đây nhé:
Bảo mật EC2 instance với Bastion Host Viblo
Creating Bastion Host on AWS EC2 Medium
Giả sử team mình đang có một jumpbox ở địa chỉ: nonprod.bastion.testing.aws.com.au
Và server endpoint của EKS Cluster là: B2BB654X8J95V5679B5G9091078JB7C.gr3.ap-southeast-2.eks.amazonaws.com
đầu tiên các bạn cần thiết lập một ssh connection từ port 8443 trên local host forward tới port HTTPS 443 trên EKS API SERVER
|
|
Sau khi đã thiết lập ssh connection, các bạn cần log in vào AWS console thông qua CLI:
|
|
sau khi đã đăng nhập vào AWS thành công các bạn chỉ cần run command bên dưới để update kubeconfig trên local để có thể giao tiếp với EKS mà không cần phải verify ssl:
|
|
cuối cùng các bạn chỉ cần run kubectl config conmmand để có thể map EKS cluster trên AWS tới local thông qua SSH turnel port 8443:
|
|
DONE! vậy là các bạn đã hoàn thành việc map EKS cluster config tới local thông qua SSH HTTPS PORT rồi đó, bây giờ có thể sử dụng kubectl tẹt ga để thao tác với EKS cluster dưới terminal rồi!!!!
để cho tiện việc truy cập mình sẽ nhét tất cả các command vào một file ví dụ eks-local-config.sh
|
|
vì namespace mặc định sẽ là ‘default’ nên mình cần có 1 file để swap namespace cho Cluster nữa, ví dụ eks-swap-namespace.sh
|
|
Tuy nhiên vì muốn nhanh gọn nên mình sẽ config một vài alias cho các command thông dụng, các bạn có thể tham khảo nhé:
|
|
Bây giờ ở terminal cá nhân các bạn chỉ cần gõ vài command là có thể check logs của EKS POD được rồi:
|
|
Okay việc check logs dưới terminal là dễ phải không nào? Tuy nhiên vì đây vẫn là trick lỏ nên mình không khuyến khích các bạn lạm dụng nhé, vì khi mất quyền kiểm soát hoặc port local trên máy bị expost ra bên ngoài rất nguy hiểm cho EKS cluster và các private resource của các bạn. Hackers có thể tận dùng SSH TURNEL PORT để dùng vào các mục đích xấu nên nếu xài xong vui lòng kill port 8443 liền nha.
Cảm ơn mọi người đã đọc và nếu có thắc mắc hoặc góp ý nào vui lòng cho mình biết nhé :D :D :D :D
HAPPY CODING!