Keepalived / Haproxy docker-compose连接被拒绝

时间:2017-03-14 19:18:27

标签: docker docker-compose dockerfile haproxy keep-alive

Docker版本:版本17.03.0-ce-mac2(15654)
操作系统: macOS Sierra

我正在尝试使用docker-compose设置HA环境。快速概述拓扑可能是什么样的,我将至少有两个keepalived和haproxy运行实例,haproxy将在多个服务器前面。但是,在这篇文章中,为了简化,我只引用了一个keepalived,haproxy和server实例。

我现在遇到的问题是我无法将流量定向到我分配给keepalived的虚拟IP地址。为了在我的docker compose文件中进行测试,我有一个尝试使用VIP进行通信的客户端,它会导致连接被拒绝错误。

dial tcp 192.168.99.120:80: getsockopt: connection refused

但是,如果我直接与haproxy联系,则没有连接问题。此外,我可以直接与主机的haproxy通信,但不能保持原状。

我觉得这与网络如何在docker中工作有关,但我很擅长使用docker并且无法追踪问题。任何帮助将不胜感激。

我的配置文件都包含在下面。

搬运工-compose.yml:

version: '2'

services:
keepalived1:
  image: neoassist/docker-keepalived:latest
  container_name: keepalived1
  volumes:
    - "./keepalived.conf:/etc/keepalived/keepalived.conf"
  environment:
    - VIRTUAL_IP=192.168.99.120
    - VIRTUAL_MASK=24
    - VRID=1
    - CHECK_IP=any
    - CHECK_PORT=80
    - INTERFACE=eth0
  entrypoint: sh -c 'sleep 4;/usr/bin/keepalived.sh'
  network_mode: "host"
  cap_drop:
    - NET_ADMIN
  privileged: true

haproxy1:
  image: haproxy:latest
  container_name: haproxy1
  ports:
    - 7054:7054
  volumes:
    - "./haproxy1.cfg:/usr/local/etc/haproxy/haproxy.cfg"
  environment:
    - EXPOSE=7054
  links:
    - fabric-ca-server1:fabric-ca-server1

fabric-ca-server1:
  image: hyperledger/fabric-ca
  container_name: fabric-ca-server1
  ports:
    - 7051:7054
  environment:
    - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
  volumes:
    - "./fabric-ca-server:/etc/hyperledger/fabric-ca-server"
  command: sh -c "fabric-ca-server start -d -b admin:adminpw"

admin-client:
  image: hyperledger/fabric-ca
  container_name: admin-client
  network_mode: "host"
  command: sh -c "sleep 14;fabric-ca-client enroll -d -u http://admin:adminpw@192.168.99.120"

haproxy.cfg

global
  maxconn 4096

defaults
  mode http
  maxconn 2000
  timeout connect 5000
  timeout client 50000
  timeout server 50000

frontend server
  bind *:7054
  mode tcp
  default_backend server_cluster

backend server_cluster
  balance source
  mode tcp
  option tcpka
  server server1 fabric-ca-server1:7054

keepalived.conf

vrrp_script haproxy {
 script "pidof haproxy"
 interval 2
 weight 2
}

vrrp_instance haproxy_1 {
 virtual_router_id 1
 advert_int 1
 interface eth0
 nopreempt
 state BACKUP
 virtual_ipaddress {
  192.168.99.120/24 dev eth0
 }

 track_script {
  haproxy
 }
}

来自我的mac的ifconfig有:

vboxnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 0a:00:27:00:00:00 
inet 192.168.99.1 netmask 0xffffff00 broadcast 192.168.99.255

1 个答案:

答案 0 :(得分:0)

我不认为这将适用于Docker for Mac,因为它实际上使用了一个虚拟机来运行你的Docker容器。如果您尝试使用主机网络而不是桥接网络,则此应该在具有本机Docker支持的系统上工作。

我的建议是查看Docker swarm模式(不是独立的Docker swarm)或Kubernetes,它们都提供扩展服务的机制,并通过单个地址提供跨平台的负载平衡