Не удается пропинговать контейнер на другом хосте с помощью Docker Consul

У меня есть 3 машины CentoS 7. Я попытался настроить кластер cassandra. Узел cassandra может обнаружить все другие узлы, если они находятся в одной сети, поэтому я искал способ настроить 2 контейнера на разных хостах, но при этом заставить их работать так, как будто они находятся в одной сети.

Я попытался сделать это с помощью консула, выполнив следующие шаги:

  1. Создание контейнера консула на машине 0:

    docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

  2. Добавление конфигурации консула в /lib/systemd/system/docker.service на машине1 и машине2:

    -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://*machine0-external-ip*:8500/network --cluster-advertise=machine0-external-ip:2375 --userland-proxy=false \

  3. Создание оверлейной сети docker network create -d overlay --subnet=10.10.10.0/24 testNetwork

  4. Создание контейнеров busybox на компьютере1 и компьютере2 с моей тестовой сетью машина1- docker run -itd --name container1 --net testNetwork busybox машина2- docker run -itd --name container2 --net testNetwork busybox

  5. С любой машины (1 или 2) я мог видеть контейнеры в сети с помощью этой команды docker network inspect testNetwork, в результате чего:

    {
    "Name": "testNetwork",
    "Id": "12020d9c66762dcf4db74cb44ffed2fe8f9e3eb531fe5e4e3f16640185154447",
    "Scope": "global",
    "Driver": "overlay",
    "EnableIPv6": false,
    "IPAM": {
        "Driver": "default",
        "Options": {},
        "Config": [
            {
                "Subnet": "10.10.10.0/24"
            }
        ]
    },
    "Internal": false,
    "Containers": {
        "c704cdedf845507891ea25ece4536e35a8984ffc98850d44fd6520e1954a203a": {
            "Name": "container1",
            "EndpointID": "345a3895f6480eecaa3e03f83ff021197a3241ebedca5cb635c06f8a83d259d6",
            "MacAddress": "02:42:0a:0a:0a:02",
            "IPv4Address": "10.10.10.2/24",
            "IPv6Address": ""
        },
        "ep-c507d3c94db20b519da28319bcb07e63297d2f2c12c0fdd52e88807bbb255743": {
            "Name": "container2",
            "EndpointID": "c507d3c94db20b519da28319bcb07e63297d2f2c12c0fdd52e88807bbb255743",
            "MacAddress": "02:42:0a:0a:0a:03",
            "IPv4Address": "10.10.10.3/24",
            "IPv6Address": ""
        }
    },
    "Options": {},
    "Labels": {}
    

    }

  6. Попытка пропинговать контейнер2 изнутри контейнера1 docker exec container1 ping -w 3 container2. Это приводит к

    PING container2 (10.10.10.3): 56 data bytes
    
    --- container2 ping statistics --- 3 packets transmitted, 0 packets 
    received, 100% packet loss
    

Вы можете видеть, что пинг идет на адрес подсети (10.10.10.3), чего я и хочу.

Что я делаю не так?

Насколько я понимаю, контейнер должен проходить через автоматически созданную сеть docker_gwbridge. Чтобы узнать, где находится эта подсеть на самом деле (которая находится на другой машине), я запустил анализатор пакетов, и оказалось, что контейнер просто ищет этот адрес в своей внутренней сети и даже не проходит через docker_gwbridge. ...

Если у кого-то есть другой подход или предложения по моей проблеме, я хотел бы услышать это!

Заранее спасибо!


person sharon gur    schedule 17.05.2017    source источник


Ответы (1)


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

Нужен ли моим образам докеров собственный консул экземпляры клиента?

Надеюсь, это внесет некоторую ясность.

person Jagatveer Singh    schedule 12.07.2017