2017-01-11 1 views
1

У меня есть кластер, управляемый DC/OS и докционированный сервис, который я хочу развернуть через Marathon. У меня уже есть марафон-фунт, который используется для обнаружения сервисов и балансировки нагрузки других существующих служб. Все эти службы развернуты с использованием сети BRIDGE.Как настроить Marathon-lb для загрузки баланса, запущенного в сети HOST?

Новая услуга предоставляет более одного порта. Порт A предназначен для связи между экземплярами службы, а порт B - для приема запросов от мира. Я хочу использовать сеть HOST (а не BRIGE) для развертывания службы.

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

Я уже пробовал различные сценарии и конфигурацию, но никто не работал. Json, который я построил, ниже.

{ 
    "id": "/cassandra-seed", 
    "cpus": 1.5, 
    "mem": 8192, 
    "disk": 0, 
    "instances": 1, 
    "container": { 
    "type": "DOCKER", 
    "docker": { 
     "image": "cassandra:2.2.3", 
     "network": "HOST", 
     "requirePorts": true, 
     "privileged": true, 
     "forcePullImage": false  
    } 
    }, 
    "constraints": [["hostname","UNIQUE"]], 
    "labels": { 
    "HAPROXY_GROUP": "external" 
    }, 
    "portDefinitions": [ 
    { "port": portA,"protocol": "tcp"}, 
    { "port": portB,"protocol": "tcp"} 
    ] 
} 

В Marathon documentation указывается, что с помощью явного определения порта B в portDefitions и настройки requirePorts истина, порты службы равны хост-порт. Кроме того, я развернул новую версию марафона-lb, где порт B является его секцией portDefinitions (нарушая диапазон по умолчанию 10000-10100).

Таким образом, я предположил, что, предоставив метку HAPROXY_GROUP в сервисе json, марафон-lb будет отображать порт B по желанию. Однако, похоже, это не так. Если я развожу службу и curl http://marathon-lb.marathon.mesos:portB, ответ будет «Пустое сообщение от сервера». Однако, если я curl http://physicalNodeIP:portB, я могу подключиться к экземпляру службы.

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

+0

Этот вопрос кажется подозрительно похожим http://stackoverflow.com/q/41586960/1305344. Любой, кто имеет больше опыта работы в DC/OS и Marathon, может прокомментировать их сходство и отметить один дубликат, если они дублируются? –

+0

С моей точки зрения, это разные вопросы. Это относится к конфигурации, необходимой для любого обслуживания, чтобы балансировать нагрузку с помощью Marathon-lb при развертывании в сетевом режиме HOST. В stackoverflow.com/q/41586960/1305344 конкретно ссылаются на службу Cassandra, IP-адреса, назначенные контейнеру и службе, в режиме HOST и BRIDGE, и как два узла Cassandra могут сплетничать в каждом случае. – Manolis

ответ

1

Похоже, у вас есть requirePorts в неправильном разделе определения приложения. Это должно быть на самом высоком уровне, как это:

{ 
    "id": "/cassandra-seed", 
    "cpus": 1.5, 
    "mem": 8192, 
    "disk": 0, 
    "instances": 1, 
    "container": { 
    "type": "DOCKER", 
    "docker": { 
     "image": "cassandra:2.2.3", 
     "network": "HOST", 
     "privileged": true, 
     "forcePullImage": false  
    } 
    }, 
    "constraints": [["hostname","UNIQUE"]], 
    "labels": { 
    "HAPROXY_GROUP": "external" 
    }, 
    "requirePorts": true, 
    "portDefinitions": [ 
    { "port": portA,"protocol": "tcp"}, 
    { "port": portB,"protocol": "tcp"} 
    ] 
} 

Как Замечание, вы должны рассмотреть возможность использования рамки Кассандры, в отличие от запуска Кассандры на марафоне.

Смежные вопросы