Docker Swarm Overlay Network не работает между узлами

Я пытаюсь соединить мои докерские службы вместе в Docker Swarm.

сеть состоит из 2-х малиновых пи.

я могу создать оверлейную сеть под названием test-overlay и я вижу, что сервисы на любом узле raspberry pi могут подключаться к сети.

моя проблема:

я не могу связываться со службами между узлами с оверлейной сетью.

учитывая следующую конфигурацию узлов и сервисов, service1 можете использовать адрес http://service2 подключиться к service2, но это не работает для http://service3, тем не мение http://service3 доступен из service4,

node1:
  - service1
  - service2
node2:
  - service3
  - service4

Я новичок в Docker Swarm, и любая помощь приветствуется.

проверка наложения

я выполнил команду sudo docker inspect network test-overlay на обоих узлах.

на главном узле это возвращает следующее:

[
    {
        "Name": "test-overlay",
        "Id": "skxhz8sb3f82dhh9jt9t3j5yl",
        "Created": "2018-04-15T20:31:20.629719732Z",
        "Scope": "swarm",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.0.0.0/24",
                    "Gateway": "10.0.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "3acb436a0cc9a4d584d537edb1546988d334afa4793cc4fae4dd6ac9b48828ea": {
                "Name": "docker-registry.1.la1myuodpkq0x5h39pqo6lt7f",
                "EndpointID": "66887fb1f5f253c6cbec149aa51ab85168903fdd2290719f26d2bcd8d6c68dc8",
                "MacAddress": "02:42:0a:00:00:04",
                "IPv4Address": "10.0.0.4/24",
                "IPv6Address": ""
            },
            "786e1fee538f81fe41ccd082800c646a0e191b0fd912e5c15530e61c248e81ac": {
                "Name": "portainer.1.qyvvlcdqo5sewuku3eiykaplz",
                "EndpointID": "0d29e5452c208ed637ae2e7dcec026f39d2431e8e0e20765a9e0e6d6dfdc60ca",
                "MacAddress": "02:42:0a:00:00:15",
                "IPv4Address": "10.0.0.21/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list": "4101"
        },
        "Labels": {},
        "Peers": [
            {
                "Name": "d049fc8f8ae1",
                "IP": "192.168.1.2"
            },
            {
                "Name": "6c0da128f308",
                "IP": "192.168.1.3"
            }
        ]
    }
]

на рабочем узле это возвращает следующее:

[
    {
        "Name": "test-overlay",
        "Id": "skxhz8sb3f82dhh9jt9t3j5yl",
        "Created": "2018-04-20T14:04:57.870696195Z",
        "Scope": "swarm",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.0.0.0/24",
                    "Gateway": "10.0.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "4cb50161119e4b58a472e1b5c380c301bbb00a23fc99fc2e0712a8c4bde6d9d4": {
                "Name": "minio.1.fo2su2quv8herbmnxqfi3g8w2",
                "EndpointID": "3e85786304ed08f02c09b8e1ed6a153a3b4c2ef7afe503a1b0ca6cf341521645",
                "MacAddress": "02:42:0a:00:00:d6",
                "IPv4Address": "10.0.0.214/24",
                "IPv6Address": ""
            },
            "ce99b3788a4f9438e276e0f52a8f4d29fa09179e3e93b31b14f45339ce3c5315": {
                "Name": "load-balancer.1.j64h1eecsc05b7d397ejvedv3",
                "EndpointID": "3b7e73d27fe30151f2dc2a0ba8a5afc7f74fd283159a03a592be10e297f58d51",
                "MacAddress": "02:42:0a:00:00:d0",
                "IPv4Address": "10.0.0.208/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list": "4101"
        },
        "Labels": {},
        "Peers": [
            {
                "Name": "d049fc8f8ae1",
                "IP": "192.168.1.2"
            },
            {
                "Name": "6c0da128f308",
                "IP": "192.168.1.3"
            }
        ]
    }
]

2 ответа

Решение

Кажется, эта проблема была из-за того, что узлы не могли подключаться друг к другу на требуемых портах.

TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
UDP port 4789 for overlay network traffic

прежде чем открыть эти порты.

Лучшее и более простое решение - использовать образ докера portainer/agent, как говорится в документации,

The Portainer Agent is a workaround for a Docker API limitation when using the Docker API to manage a Docker environment.

https://portainer.readthedocs.io/en/stable/agent.html

Я надеюсь, что это помогает всем, кто испытывает эту проблему.

Я пока не могу оставить комментарий, но мне удалось решить эту проблему с помощью решения, предоставленного X0r0N, и я оставляю этот комментарий, чтобы помочь людям в моем положении найти решение в будущем.

Я развертывал 10 капель в DigitalOcean, используя образ Docker по умолчанию, предоставленный Docker. В описании сказано, что закрываются все порты, кроме Docker. Это явно не входит в варианты использования Swarm.

После разрешения портов 2377, 4789 и 7946 в ufw Docker Swarm теперь работает должным образом.

Чтобы этот ответ стоял сам по себе, порты соответствуют следующим функциям:

TCP-порт 2377: обмен данными при управлении кластером TCP и UDP-порт 7649: обмен данными между узлами UDP-порт 4789: наложение сетевого трафика

Убедитесь, что ваши узлы имеют порты, которые необходимо для правильной работы роя, открыто, как описано здесь https://docs.docker.com/network/overlay/ в "Предварительных условиях":

TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
UDP port 4789 for overlay network traffic
Другие вопросы по тегам