Chỉ có một giải pháp từng phần ở đây. Vì vậy, khi đính kèm dịch vụ của bạn vào mạng lưới lớp phủ tùy chỉnh, bạn thực sự có quyền truy cập vào tính năng Khám phá dịch vụ tùy chỉnh của Docker. Tôi sẽ trình bày chi tiết tính năng kết nối mạng của chế độ Docker Swarm, trước khi cố gắng kết nối nó với vấn đề của bạn.
Tôi sẽ sử dụng thuật ngữ khác nhau của dịch vụ và nhiệm vụ, trong đó một dịch vụ có thể là elasticsearch, trong khi một nhiệm vụ là một đơn dụ của dịch vụ elasticsearch.
Docker mạng
Ý tưởng là cho mỗi dịch vụ bạn tạo, Docker gán một IP ảo (VIP), và một bí danh tùy chỉnh dns. Bạn có thể truy xuất VIP này bằng cách sử dụng lệnh docker service inspect myservice
.
Nhưng, có hai chế độ để đính kèm dịch vụ vào mạng lớp phủ dnsrr và VIP. Bạn có thể chọn các tùy chọn này bằng cách sử dụng các tùy chọn --endpoint-mode
của docker service create
.
Chế độ VIP (Tôi tin rằng đây là chế độ mặc định, hoặc ít nhất được sử dụng nhiều nhất), ảnh hưởng đến ip ảo đến bí danh dns của dịch vụ. Điều này có nghĩa rằng việc thực hiện nslookup servicename
sẽ trả lại cho bạn một vip duy nhất, đằng sau hậu trường, sẽ được liên kết với một trong các vùng chứa của bạn theo kiểu vòng tròn. Tuy nhiên, cũng có một bí danh dns đặc biệt cho phép bạn truy cập tất cả các cá thể của bạn ips (tất cả các nhiệm vụ của bạn ips): tasks.myservice
.
Vì vậy, ở chế độ VIP, bạn có thể truy xuất tất cả các tác vụ của mình bằng cách sử dụng một đơn giản nslookup tasks.myservice
, trong đó myservice là tên dịch vụ.
Chế độ khác là dnsrr.Chế độ này chỉ đơn giản là loại bỏ VIP, và kết nối bí danh dns với các nhiệm vụ khác nhau (= trường hợp dịch vụ), theo cách vòng tròn. Bằng cách này, bạn chỉ cần thực hiện một số nslookup myservice
để truy xuất các phiên bản dịch vụ khác nhau ip.
Cụm cụm tìm kiếm
Ok vì vậy trước hết tôi không thực sự quen thuộc với cách elasticsearch cho phép bạn nhóm. Từ những gì tôi hiểu từ câu hỏi của bạn, bạn cần khi chạy nhị phân elasticsearch, tặng nó như một tham số, địa chỉ của tất cả của các nút khác nó cần phải cụm với. Vì vậy, những gì tôi sẽ làm, là tạo ra một hình ảnh Elasticsearch tùy chỉnh, có lẽ dựa trên một thư viện mặc định, mà tôi sẽ thêm một tùy chỉnh Entrypoint
mà trước hết sẽ chạy một kịch bản để lấy các nhiệm vụ khác ip.
Tôi muốn tin rằng ở trong chế độ VIP là thích hợp cho bạn, vì đó là bí danh tasks.myservice
dns. Sau đó, bạn sẽ cần phải phân tích đầu ra để truy xuất các tác vụ ip (và có thể xóa của bạn). Sau đó, bạn sẽ có thể lưu chúng trong một biến môi trường tập tin cấu hình, hoặc sử dụng chúng như là một tùy chọn thời gian chạy cho nhị phân elasticsearch của bạn.
Sửa: Để tạo một mạng overlay tùy chỉnh, bạn sẽ cần phải sử dụng lệnh docker network create
, và sử dụng --network
tùy chọn docker service create
Đây là câu trả lời chủ yếu dựa trên Swarm mode networking documentation
Bên cạnh Lãnh sự có cũng là Zookeeper và Etcd. –
@MattSchuchard Tôi không thể sử dụng cốt lõi của đàn để làm điều này? sao tôi * có * để sử dụng khám phá dịch vụ bên ngoài? –
Không biết; do đó nhận xét và không trả lời. Đừng quan tâm đến Swarm; thích Mesosphere (Zookeeper) hoặc Kubernetes (Consul/Etcd?). Swarm có vẻ quá bị tấn công với nhau. –