Докер-контейнер HAProxy не может загрузить баланс между моими док-контейнерами Cockroach DB с помощью localhost - PullRequest
0 голосов
/ 04 января 2019

У меня есть файл составления Docker, который содержит мой контейнер HAProxy и 3 контейнера Cockroach DB (CKDB).Все они работают с узлом сетевого режима.

Я могу присоединиться к узлам CKDB, используя localhost и связанные с ними порты, но мой контейнер HAProxy не может получить доступ к узлам CKDB, используя " localhost ".Если я использую IP-адрес хост-машины, он работает.

Это ограничение для HAProxy или это может быть что-то не так с моими конфигурациями?

Вот файл конфигурации HAProxy:

global
  maxconn 4096

defaults
    mode                tcp
    timeout connect     10s
    timeout client      1m
    timeout server      1m
    option              clitcpka

frontend ckdb_nodes
    bind *:26257
    option tcplog
    option httpchk GET /health?ready=1
    mode tcp
    use_backend ckdb_nodes

backend ckdb_nodes
    mode tcp
    balance roundrobin
    option ssl-hello-chk
    server cockroach1 localhost:26254 check port 8081
    server cockroach2 localhost:26255 check port 8082
    server cockroach3 localhost:26256 check port 8083

frontend ckdb_admin_ui
    bind *:8080
    option tcplog
    mode tcp
    use_backend ckdb_admin_ui

backend ckdb_admin_ui
    mode tcp
    balance roundrobin
    option ssl-hello-chk
    server cockroach1 localhost:8081 check
    server cockroach2 localhost:8082 check
    server cockroach3 localhost:8083 check

Вот файл составления докера:

services:
  ckdb-e1-haproxy:
    image: ${IMAGE_STAGING_E1_HAPROXY}:${BUILD_VERSION_STATIC}
    ports:
      - ${COCKROACH_E1_HAPROXY_PORT}:${COCKROACH_E1_HAPROXY_PORT}
      - ${COCKROACH_ADMIN_UI_E1_HAPROXY_PORT}:${COCKROACH_ADMIN_UI_E1_HAPROXY_PORT}
    network_mode: "host"
    container_name: ${PROJECT}_ckdb-e1-haproxy
    depends_on:
      - ckdb-e1-node1
      - ckdb-e1-node2
      - ckdb-e1-node3

  ckdb-e1-node1:
    image: cockroachdb/cockroach:${CKDB_VERSION}
    command: start --certs-dir=${CKDB_CONTAINER_HOST_DIR} --port=${STAGING_E1_NODE1_CKDB_APP_PORT} --http-port=${STAGING_E1_NODE1_CKDB_ADMIN_UI_PORT}
    ports:
      - ${STAGING_E1_NODE1_CKDB_APP_PORT}:${STAGING_E1_NODE1_CKDB_APP_PORT}
      - ${STAGING_E1_NODE1_CKDB_ADMIN_UI_PORT}:${STAGING_E1_NODE1_CKDB_ADMIN_UI_PORT}
    volumes:
      - type: bind
        source: ${CKDB_STAGING_E1_CERTS_DIR}
        target: ${CONTAINER_CKDB_CERTS_PATH}
      - type: volume
        source: staging-app-db-data-e1-node1
        target: ${CONTAINER_CKDB_DATA_PATH}
    container_name: ${PROJECT}_ckdb-e1-node1
    network_mode: "host"

  ckdb-e1-node2:
    image: cockroachdb/cockroach:${CKDB_VERSION}
    command: start --certs-dir=${CKDB_CONTAINER_HOST_DIR} --port=${STAGING_E1_NODE2_CKDB_APP_PORT} --http-port=${STAGING_E1_NODE2_CKDB_ADMIN_UI_PORT} --join=localhost:${STAGING_E1_NODE1_CKDB_APP_PORT}
    ports:
      - ${STAGING_E1_NODE2_CKDB_APP_PORT}:${STAGING_E1_NODE2_CKDB_APP_PORT}
      - ${STAGING_E1_NODE2_CKDB_ADMIN_UI_PORT}:${STAGING_E1_NODE2_CKDB_ADMIN_UI_PORT}
    volumes:
      - type: bind
        source: ${CKDB_STAGING_E1_CERTS_DIR}
        target: ${CONTAINER_CKDB_CERTS_PATH}
      - type: volume
        source: staging-app-db-data-e1-node2
        target: ${CONTAINER_CKDB_DATA_PATH}
    container_name: ${PROJECT}_ckdb-e1-node2
    depends_on:
      - ckdb-e1-node1
    network_mode: "host"

  ckdb-e1-node3:
    image: cockroachdb/cockroach:${CKDB_VERSION}
    command: start --certs-dir=${CKDB_CONTAINER_HOST_DIR} --port=${STAGING_E1_NODE3_CKDB_APP_PORT} --http-port=${STAGING_E1_NODE3_CKDB_ADMIN_UI_PORT} --join=localhost:${STAGING_E1_NODE1_CKDB_APP_PORT}
    ports:
      - ${STAGING_E1_NODE3_CKDB_APP_PORT}:${STAGING_E1_NODE3_CKDB_APP_PORT}
      - ${STAGING_E1_NODE3_CKDB_ADMIN_UI_PORT}:${STAGING_E1_NODE3_CKDB_ADMIN_UI_PORT}
    volumes:
      - type: bind
        source: ${CKDB_STAGING_E1_CERTS_DIR}
        target: ${CONTAINER_CKDB_CERTS_PATH}
      - type: volume
        source: staging-app-db-data-e1-node3
        target: ${CONTAINER_CKDB_DATA_PATH}
    container_name: ${PROJECT}_ckdb-e1-node3
    depends_on:
      - ckdb-e1-node1
      - ckdb-e1-node2
    network_mode: "host"

...