Tôi đang làm việc trên một dự án mà tôi đang chạy một bộ chứa Nginx (bộ cân bằng tải) với các cổng 80 và 443 được xuất bản lên máy chủ và một vài bộ chứa Nginx ứng dụng khác có các cổng chưa được xuất bản. Cả ba đều là một phần của mạng cầu nối tùy chỉnh trong Docker và có thể giao tiếp với nhau bằng tên vùng chứa của chúng.
Tôi tin rằng điều này xảy ra nhờ DNS nội bộ của Docker chạy trên 127.0.0.11. Tuy nhiên, một điều tôi nhận thấy là bất cứ điều gì tôi đặt FQDN của mình vào /etc/hosts của hệ thống máy chủ và phân giải nó thành 127.0.0.1 (hoặc 127.0.1.1), nó cũng khiến các bộ chứa phân giải FQDN này thành địa chỉ IP cục bộ .
Điều đó tốt cho bộ cân bằng tải - nó sẽ tự đạt được. Nó cũng tốt cho hệ thống máy chủ vì các cổng của bộ cân bằng tải được xuất bản lên hệ thống máy chủ. Nhưng nó bị hỏng trên các vùng chứa ứng dụng khiến FQDN không thể tiếp cận bộ cân bằng tải nữa vì nó đang tự giải quyết.
Đây là docker-compose.yaml mẫu của tôi:
phiên bản: "3.9"
dịch vụ:
lb:
hình ảnh: "bitnami/nginx: mới nhất"
ứng dụng1:
hình ảnh: "bitnami/nginx: mới nhất"
ứng dụng2:
hình ảnh: "bitnami/nginx: mới nhất"
/etc/hosts của máy chủ lưu trữ của tôi:
127.0.0.1 thử nghiệm.org
Sau đó, bên trong một trong các vùng chứa ứng dụng:
# con mèo /etc/resolv.conf
máy chủ định danh 127.0.0.11
Tệp máy chủ vùng chứa:
# mèo /etc/hosts
127.0.0.1 máy chủ cục bộ
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.23.0.2 67d3aaa71abb
Và độ phân giải:
# đào thử nghiệm.org
;; PHẦN TRẢ LỜI:
thử nghiệm.org. 0 TRONG MỘT 127.0.0.1
;; MÁY CHỦ: 127.0.0.11#53(127.0.0.11)
Tôi đoán đây chủ yếu là hành vi dự định, nhưng tôi không thể tìm thấy nhiều tùy chọn để kiểm soát điều này.
Tôi có thể xóa mục nhập trong tệp /etc/hosts của máy chủ, trong trường hợp đó, các máy chủ DNS thực sẽ giải quyết FQDN bên trong các vùng chứa, cũng như máy chủ. Bên cạnh đó, tôi không phải là người đặt nó ở đó ngay từ đầu, nó được thực hiện bởi nhà cung cấp đám mây của tôi thông qua cloud-init, tôi đoán vậy, không chắc vì lý do gì.
Tôi có thể thêm các mục máy chủ rõ ràng vào từng vùng chứa bằng FQDN, trỏ đến một IP công cộng hoặc có thể là IP nội bộ của bộ cân bằng tải hoặc IP nội bộ của máy chủ lưu trữ. Điều này nghe giống như một cơn ác mộng để duy trì.
Tôi cũng không thể sử dụng dịch vụ DNS của Docker, trong trường hợp đó, tôi sẽ mất khả năng tham chiếu các vùng chứa được liên kết theo tên của chúng bên trong vùng chứa, đây là một tính năng thực sự tuyệt vời mà tôi không muốn mất.
Có sự lựa chọn nào khác không? Tui bỏ lỡ điều gì vậy? Docker phiên bản 20.10.9, soạn phiên bản 1.29.2. Máy chủ Ubuntu 20.04.
Tái bút Không, testing.org không thực sự phân giải thành 127.0.0.1, mặc dù vậy, bạn cũng nên thử.
Cảm ơn.