Các mô hình triển khai VPN client-to-site trong Kubernetes

1. Tổng quan

Trong quá trình triển khai hệ thống Kubernetes, đôi lúc bạn sẽ có nhu cầu mở kênh kết nối VPN kiểu client-to-site, để người dùng từ xa có thể truy cập vào các tài nguyên nội bộ như:

  • Pod, Service trong cluster Kubernetes
  • Các node (master, worker)
  • Mạng nội bộ tại site (VD: 192.168.0.0/24, 10.10.10.0/24, v.v.)

Một giải pháp tưởng như hợp lý là: tạo một Pod trong cluster Kubernetes chạy WireGuard hoặc OpenVPN, từ đó người dùng kết nối vào.

Tuy nhiên, mô hình này thực tế có nhiều giới hạn về mạng mà nếu không hiểu rõ, bạn sẽ gặp khó khăn khi triển khai.

Bài viết này chia sẻ chi tiết:

  • Tại sao VPN client-to-site trong Pod có thể không như bạn kỳ vọng
  • Các mô hình VPN thay thế và cách triển khai phù hợp hơn
  • So sánh ưu/nhược điểm từng mô hình
  • Sơ đồ minh họa cho từng cách làm
  • Lời khuyên thực tiễn

Vấn đề thường gặp khi chạy VPN server trong Pod Kubernetes.

Một số người triển khai VPN server (WireGuard/OpenVPN) trong Pod trong cluster K8s với mục đích như sau:

  • Cho client VPN truy cập vào toàn bộ hệ thống (bao gồm Pod, Service, node và mạng LAN)
  • Tận dụng auto scaling hoặc CI/CD để quản lý VPN server

Nhưng khi client kết nối vào thì… họ chỉ truy cập được IP của Service, còn các tài nguyên khác như:

  • IP Pod
  • IP node (master/worker)
  • IP mạng nội bộ

đều không truy cập được, hoặc rất hạn chế.

2. Các mô hình triển khai VPN client-to-site với Kubernetes

Mô hình 1: VPN server chạy trong Pod Kubernetes (Service IP)

Sơ đồ:

         [Client VPN]
              |
         ~ Internet ~
              |
     [Pod chạy WireGuard/OpenVPN]
              |
        +------------------+
        | Kubernetes       |
        | Cluster          |
        |  ┌────────────┐  |
        |  | Services   | <── Có thể truy cập
        |  └────────────┘  |
        |  ┌────────────┐  |
        |  |   Pods     | <── Có thể không truy cập được
        |  └────────────┘  |
        +------------------+

    [LAN / Node IP: KHÔNG truy cập được]

Ưu điểm:

  • Dễ triển khai
  • Có thể tích hợp vào CI/CD pipeline

Nhược điểm:

  • Client VPN không truy cập được IP node hoặc mạng nội bộ
  • Không truy cập được các tài nguyên bên ngoài Kubernetes
  • Cần hiểu rõ Kubernetes networking để debug

Mô hình 2: VPN server chạy trên VM hoặc máy vật lý ngoài Kubernetes

Sơ đồ:

         [Client VPN]
              |
         ~ Internet ~
              |
       [WireGuard/OpenVPN VM]
              |
         [Site LAN: 192.168.x.x]
              |
        +---------------------+
        |  Kubernetes Cluster |
        | ┌─────────────────┐ |
        | | Nodes (Master...)| <── Truy cập được
        | | Pods / Services | <── Truy cập được (qua routing)
        | └─────────────────┘ |
        +---------------------+

Ưu điểm:

  • Truy cập được tất cả: Pod, node, LAN, DB nội bộ…
  • Không bị giới hạn bởi Kubernetes overlay network
  • Routing dễ cấu hình hơn

Nhược điểm:

  • Cần có một VM/gateway riêng
  • Khó quản lý bằng YAML/Helm (nằm ngoài K8s)

Mô hình 3: VPN server trong Pod (HostNetwork + privileged)

Sơ đồ.

         [Client VPN]
              |
         ~ Internet ~
              |
     [VPN Pod - HostNetwork + Privileged]
              |
         [Node thực (host)]
              |
        +------------------+
        | Kubernetes       |
        | Pods + Services  |
        +------------------+

  [LAN subnet: Có thể truy cập qua NAT & route]

Ưu điểm:

  • VPN server có thể truy cập node IP và LAN nếu cấu hình chuẩn
  • Vẫn nằm trong cluster Kubernetes (quản lý dễ hơn mô hình 2)

Nhược điểm:

  • Phải cấp quyền cao (privileged + hostNetwork)
  • Không dễ scale, chạy đa node phức tạp
  • Phức tạp khi triển khai trong cloud hoặc public cluster

Mô hình 4: VPN server + MetalLB + routing nâng cao (advanced)

Sơ đồ:

         [Client VPN]
              |
         ~ Internet ~
              |
     [VPN Service (MetalLB IP)]
              |
     [Kubernetes Cluster Network]
              |
        ┌──────────────┐
        | WireGuard Pod| <── cần NAT/Forwarding
        └──────────────┘
              |
     [Route đi ra LAN + node qua iptables + router config]

Ưu điểm:

  • Truy cập được Pod, Services, node, LAN nếu cấu hình chuẩn
  • VPN server vẫn nằm trong cluster (quản lý bằng YAML)

Nhược điểm:

  • Phức tạp về routing, iptables, NAT, sysctl…
  • Cần cấu hình route tại router hoặc switch của site
  • Khó mở rộng, khó debug nếu không quen Linux net stack

3. So sánh tổng thể

Mô hìnhQuản lý dễTruy cập PodTruy cập NodeTruy cập LANMức độ phức tạp
1. VPN trong Pod (thường)✅ (hạn chế)Thấp
2. VPN ngoài K8s (VM)Trung bình
3. VPN Pod (hostNetwork)Cao
4. VPN + MetalLB + routingRất cao

4. Ví dụ thực tế mô hình dùng VM làm VPN Gateway

  • Cài WireGuard trên một VM nằm trong mạng 192.168.10.0/24
  • Cấp cho client VPN địa chỉ 10.66.66.2/24
  • Cấu hình AllowedIPs = 0.0.0.0/0 trên client
  • Cấu hình route tại router: vbnetCopyEditDestination: 10.66.66.0/24 Next hop: 192.168.10.10 (IP của VM VPN)

Client VPN sẽ:

  • Truy cập được các IP trong LAN
  • Vào cluster K8s qua IP node hoặc các service đã expose

5. Lời khuyên thực tiễn

  • ✅ Nếu mục tiêu của bạn là cho phép client truy cập toàn bộ hệ thống (K8s + LAN + node IP):
    → Hãy triển khai VPN server ngoài cluster Kubernetes (trên một VM hoặc thiết bị gateway)
  • ⚠️ Chỉ nên dùng mô hình VPN trong Pod nếu:
    • Bạn chỉ cần client truy cập một vài service trong cluster
    • Không cần truy cập LAN hoặc IP node
    • Bạn quen với cấu hình networking Linux (iptables, routing)
  • ❗ Đừng đánh giá thấp việc cấu hình routing, NAT và forwarding nếu bạn chọn giải pháp trong Pod.

6. Kết luận

Việc triển khai VPN client-to-site trong môi trường Kubernetes cần cân nhắc kỹ về kiến trúc mạng. Dù việc đặt VPN server trong một Pod nghe có vẻ hợp lý, nhưng nó không giúp bạn truy cập toàn bộ hệ thống nếu không đi kèm rất nhiều cấu hình phức tạp.

Lựa chọn đơn giản, ổn định và dễ bảo trì nhất chính là: VPN server đặt ngoài cluster Kubernetes, sử dụng một server vật lý hoặc VM trong cùng mạng nội bộ.

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email