Không có gì sai với ứng dụng và không có gì sai với đường hầm, nhưng bảng điều khiển vẫn không tải. Khi một dịch vụ chạy với network_mode: service:vpn, nó chia sẻ không gian tên mạng của vùng chứa VPN, nghĩa là trình lắng nghe và các cổng được công bố thuộc về không gian tên đó chứ không thuộc về dịch vụ. Ba quyết định rút ra từ đó: ứng dụng gắn ở đâu, vùng chứa nào công bố cổng và đường quản trị hẹp đến mức nào. Đặt chúng sai thứ tự và mọi thiết lập riêng lẻ trông đúng trong khi tổ hợp không thể hoạt động.

Ai sở hữu không gian tên của cổng

Trong không gian tên dùng chung, thêm một mục ports: vào dịch vụ phụ thuộc không làm được gì hữu ích, và một số tùy chọn mạng không được hỗ trợ cho nó theo thiết kế. Thay vào đó hãy công bố trên vùng chứa sở hữu không gian tên. Vùng chứa đó cũng là vùng chứa có địa chỉ xuất hiện trên máy chủ, nên ánh xạ được đọc như một mục chứ không phải một mục cho mỗi dịch vụ.

services:
  vpn:
    image: vpn-client-image
    cap_add: [NET_ADMIN]
    ports:
      - "127.0.0.1:8080:8080"
  app:
    network_mode: "service:vpn"

Hãy chú ý địa chỉ ở bên trái của ánh xạ. Gắn vào 127.0.0.1 giữ cổng được công bố trên loopback của máy chủ, điều mà một giao diện quản trị thường muốn. Gắn vào 0.0.0.0 phơi nó ra trên mọi giao diện của máy chủ, và đó là một quyết định bảo mật khác, không phải sự tiện lợi.

Cho ứng dụng lắng nghe ở nơi không gian tên mong đợi

Một trình lắng nghe gắn vào 127.0.0.1 bên trong không gian tên chỉ truy cập được từ bên trong không gian đó. Các cổng máy chủ được công bố đến từ bên ngoài, nên ứng dụng phải gắn một địa chỉ rộng hơn để ánh xạ hoạt động. Đây là thay đổi một dòng trên hầu hết máy chủ, và chính bước này bị bỏ qua sau khi sao chép một hướng dẫn tăng cường viết cho triển khai không dùng vùng chứa.

docker compose exec app ss -lntp
docker port vpn
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/

Danh sách trình lắng nghe bên trong ứng dụng nói sự thật về địa chỉ gắn kết, và docker port cho biết chủ sở hữu thực sự đã công bố gì. Nếu cái đầu tiên hiển thị 127.0.0.1 và cái thứ hai hiển thị ánh xạ trên máy chủ, bạn đã tìm ra sự không khớp mà không chạm vào cấu hình VPN.

Chọn cách đường quản trị đi vào

Có ba cách sắp xếp hợp lý. Công bố trên vùng chứa VPN và truy cập từ máy chủ hoặc từ mạng cục bộ. Đặt một proxy ngược trước không gian tên và cho proxy cổng được phơi ra duy nhất. Hoặc giữ bảng điều khiển chỉ truy cập được từ bên trong không gian tên qua phiên exec hoặc đường hầm SSH, đó là mức phơi ra nhỏ nhất và ít tiện lợi nhất.

Cái nào phù hợp phụ thuộc vào việc ai cần giao diện và từ đâu. Một quản trị viên duy nhất trên cùng máy chủ chỉ cần gắn vào loopback. Một nhóm truy cập qua VPN cần một đường đi có chủ đích và một chủ sở hữu được nêu tên. Chọn phương án proxy mang lại TLS và nhật ký truy cập, đổi lại là một thành phần nữa phải được cập nhật.

Mở cổng quản trị mà không mở mọi thứ

Chính sách truy cập cục bộ hoặc khóa của ứng dụng khách VPN có thể loại bỏ một yêu cầu quản trị đi vào ngay cả khi đường hầm đi ra hoạt động hoàn hảo. Cho phép một ngoại lệ được ghi lại cho nguồn và cổng dự kiến, rồi xác nhận rằng sự bảo vệ thông thường của đường hầm không thay đổi. Tắt công tắc an toàn để bảng điều khiển tải được là đánh đổi một kiểm soát thực sự lấy một tab trình duyệt.

Hãy để xác thực của chính ứng dụng bật. Ở bên trong một ngăn xếp kết nối VPN không cấp quyền cho mọi người dùng cục bộ hay mọi thiết bị có thể chạm tới máy chủ, và một bảng quản trị không xác thực sau đường hầm vẫn là bảng quản trị không xác thực.

Xác minh từ thiết bị quản trị, rồi xác minh lại sau đó

Hãy thử từ máy sẽ thực sự quản lý dịch vụ, không phải từ máy chủ, sau đó xác minh riêng đường internet mà ứng dụng cần. Thành công trong quản trị chứng minh một hướng và không nói gì về lưu lượng đi ra.

Thử lại sau khi ngăn xếp được tạo lại. Một chủ sở hữu mạng bị thay thế sẽ đổi không gian tên mà ứng dụng gắn vào, và một URL từng hoạt động trước bản cập nhật có thể không trỏ tới đâu sau đó. Ghi lại ánh xạ đã công bố và địa chỉ gắn kết để lần dựng lại tiếp theo là một lần kiểm tra hai phút thay vì một cuộc điều tra lặp lại.

Bài viết liên quan