0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Thiết lập Kubernetes với Tailscale: Giải pháp mạng hoàn hảo

Đăng vào 1 tháng trước

• 5 phút đọc

Giới thiệu

Khi nói đến việc thiết lập một cụm Kubernetes, mạng có thể trở thành cơn ác mộng nếu không được quản lý đúng cách. Trong phần trước, tôi đã chia sẻ về quá trình tìm lỗi trong việc thiết lập cụm Kubernetes giữa lab tại nhà và một máy ảo Azure. Hôm nay, tôi sẽ hướng dẫn bạn cách thiết lập Kubernetes với Tailscale — một giải pháp mạng đơn giản nhưng mạnh mẽ.

Tóm tắt vấn đề

Khi tôi cố gắng thiết lập một cụm Kubernetes với hai nút: một tại nhà và một trên Azure, tôi đã gặp phải vấn đề lớn với kết nối mạng. Mạng tại nhà của tôi sử dụng dải IP 192.168.1.x, trong khi Azure sử dụng dải IP 172.16.0.x. Điều này dẫn đến việc hai nút không thể giao tiếp với nhau mặc dù tôi đã mở các cổng tường lửa và cấu hình bảng định tuyến.

Khoảnh khắc bừng sáng: Tailscale

Thay vì tiếp tục chiến đấu với các vấn đề mạng, tôi đã quyết định sử dụng Tailscale, một giải pháp mạng overlay. Tailscale cho phép các thiết bị trên các mạng khác nhau kết nối với nhau mà không cần cấu hình phức tạp.

Kế hoạch của tôi rất đơn giản:

  1. Cài đặt Tailscale trên máy ảo Azure.
  2. Sử dụng IP Tailscale cho tất cả các giao tiếp Kubernetes.
  3. Để Tailscale quản lý sự phức tạp của mạng.

Cài đặt Tailscale trên máy ảo Azure

Bước 1: Cấu hình Nhóm Bảo mật Mạng cho Tailscale

Đây là bước quan trọng để đảm bảo Tailscale hoạt động trên máy ảo Azure:

  • Quy tắc: Cho phép UDP của Tailscale
  • Cổng: 41641 (cổng UDP mặc định của Tailscale)
  • Giao thức: UDP
  • Nguồn: Bất kỳ
  • Đích: Bất kỳ
  • Hành động: Cho phép

Nếu không có quy tắc bảo mật mạng này, Tailscale sẽ không thể thiết lập kết nối qua tường lửa của Azure.

Bước 2: Tạo máy ảo với Lưu trữ Đúng cách

Tôi đã thiết lập máy ảo Azure với:

  • Ubuntu 24.04 LTS
  • SSD bổ sung cho lưu trữ container
  • Cài đặt mạng ảo mặc định
  • Áp dụng nhóm bảo mật Tailscale từ bước 1.
bash Copy
# Định dạng lưu trữ bổ sung
sudo fdisk /dev/sdb  # Tạo phân vùng
sudo mkfs.ext4 /dev/sdb1  # Định dạng
sudo mkdir /mnt/data  # Điểm gắn
sudo mount /dev/sdb1 /mnt/data
echo '/dev/sdb1 /mnt/data ext4 defaults 0 0' | sudo tee -a /etc/fstab

Bước 3: Cài đặt Tailscale với Pre-Auth

Thay vì cài đặt Tailscale thông thường, tôi đã sử dụng script đã được cấu hình sẵn từ bảng điều khiển Tailscale:

bash Copy
# SSH vào máy ảo Azure
ssh username@vm-public-ip

# Chạy script cài đặt cụ thể cho tài khoản (từ bảng điều khiển Tailscale)
curl -fsSL https://tailscale.com/install.sh | sh -s -- --authkey=tskey-auth-xxxxx

Lợi ích của phương pháp này

  • Không cần xác thực thủ công: Máy ảo tự động tham gia mạng của tôi.
  • Kết nối ngay lập tức: Xuất hiện trong bảng điều khiển ngay lập tức.
  • Đã được cấu hình sẵn: Bao gồm các thẻ thiết bị hoặc chính sách tôi đã thiết lập.

Khoảnh khắc kỳ diệu

Sau khi hoàn tất cài đặt, tôi đã thử nghiệm mà trước đó đã thất bại:

bash Copy
# Từ máy ảo Azure, ping IP Tailscale của tháp tại nhà
ping 100.64.x.x  # IP Tailscale của tháp

NGAY LẬP TỨC - các phản hồi ping bắt đầu xuất hiện:

bash Copy
64 bytes from 100.64.x.x: icmp_seq=1 ttl=64 time=12.3 ms
64 bytes from 100.64.x.x: icmp_seq=2 ttl=64 time=11.8 ms
64 bytes from 100.64.x.x: icmp_seq=3 ttl=64 time=12.1 ms

Tại sao phương pháp này lại hiệu quả đến vậy

Tailscale loại bỏ sự phức tạp của mạng:

  • Không cần định tuyến subnet: Cả hai máy đều xuất hiện trên cùng một mạng ảo.
  • Không cần cấu hình tường lửa: Tailscale tự động xử lý NAT traversal.
  • Không cần chuyển tiếp cổng: Giao tiếp trực tiếp giữa máy với máy.
  • Mã hóa mặc định: Bảo mật giao tiếp qua internet.
  • Hoạt động ở bất kỳ đâu: Mạng tại nhà, nhà cung cấp đám mây, thiết bị di động.

Đặc biệt cho Kubernetes:

  • Nút điều khiển và nút làm việc có thể giao tiếp trực tiếp.
  • Không cần mở cổng API server ra internet.
  • Mạng pod-to-pod hoạt động liền mạch giữa các vị trí.
  • Có thể dễ dàng thêm nhiều nút từ bất kỳ đâu.

Điểm khác biệt rõ rệt

Trước khi có Tailscale (Mạng cục bộ):

bash Copy
# Từ máy ảo Azure
ping 192.168.1.244
# Kết quả: Mạng không thể truy cập

telnet 192.168.1.244 6443
# Kết quả: Kết nối đã hết thời gian

Sau khi có Tailscale:

bash Copy
# Từ máy ảo Azure
ping 100.64.x.x
# Kết quả: Phản hồi ngay lập tức

telnet 100.64.x.x 6443
# Kết quả: Kết nối ngay lập tức

Những điều cần lưu ý cho các cụm Kubernetes Hybrid

  1. Đừng chống lại mạng - sử dụng các giải pháp overlay cho các thiết lập qua môi trường khác nhau.
  2. Tailscale hoàn hảo cho đám mây hybrid - kết nối liền mạch giữa tài nguyên tại chỗ và đám mây.
  3. Bắt đầu với mạng trước - đảm bảo kết nối hoạt động trước khi đi vào cấu hình Kubernetes.
  4. Cài đặt đã được xác thực - sử dụng các script cụ thể cho tài khoản để tự động hóa thiết lập.
  5. Đôi khi bắt đầu lại là nhanh nhất - đừng ngại xây dựng lại với những bài học đã học.

Bước tiếp theo

Giờ đây, khi đã có mạng ổn định giữa lab tại nhà và máy ảo Azure, tôi có thể tập trung vào việc học quản lý cụm Kubernetes. Ngày mai, tôi sẽ:

  1. Chạy kubeadm init trên tháp tại nhà sử dụng IP Tailscale.
  2. Tham gia máy ảo Azure như một nút làm việc.
  3. Triển khai một số ứng dụng thử nghiệm giữa hai nút.
  4. Khám phá lên lịch pod, ổ đĩa bền và phát hiện dịch vụ.

Điều tuyệt nhất? Tất cả sẽ diễn ra qua các kết nối an toàn, được mã hóa của Tailscale mà không cần cấu hình mạng bổ sung.

Kết luận

Đôi khi giải pháp không phải là khắc phục các phương pháp hiện có - mà là lùi lại và chọn một công cụ tốt hơn cho công việc. Tailscale đã biến cơn ác mộng mạng của tôi thành một thiết lập chỉ mất 5 phút với kết nối ngay lập tức.

Nếu bạn đang xây dựng các cụm Kubernetes hybrid hoặc chỉ cần kết nối các tài nguyên qua các mạng khác nhau, đừng chống lại các subnet và tường lửa. Hãy sử dụng Tailscale và tập trung vào những vấn đề bạn thực sự muốn giải quyết.


Phần tiếp theo: Thiết lập cụm Kubernetes khi các máy đã có thể giao tiếp với nhau! Theo dõi phần 3, nơi chúng ta sẽ thực hiện các lệnh kubectl.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào