使用HAProxy和Docker进行动态DNS解析
问题描述:
我试图在Docker主机中设置HAProxy。使用HAProxy和Docker进行动态DNS解析
使用HAProxy的1.7和码头工人1.12
我haproxy.cfg样子:
# Simple configuration for an HTTP proxy listening on port 81 on all
# interfaces and forwarding requests to a single backend "servers" with a
# single server "server1" listening on 127.0.0.1:8000
global
daemon
maxconn 256
resolvers docker
# nameserver dnsmasq 127.0.0.1:53
nameserver dns 127.0.0.1:53
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
default-server init-addr none
frontend http-in
bind *:80
default_backend www_somedomain1_com
# Define hosts
acl host_www_somedomain1_com hdr(host) -i somedomain1.com
acl host_www_somedomain1_com hdr(host) -i www.somedomain1.com
acl host_www_somedomain2_com hdr(host) -i www.somedomain2.com
## figure out which one to use
use_backend www_somedomain1_com if host_www_somedomain1_com
use_backend www_somedomain2_com if host_www_somedomain2_com
backend www_somedomain1_com
# Utilizing the Docker DNS to resolve below host
# server server1 www-somedomain1-com maxconn 32 check port 80
server server1 www-somedomain1-com resolvers docker check maxconn 32
backend www_somedomain2_com
# Utilizing the Docker DNS to resolve below host
# server server1 www-somedomain2-com maxconn 32 check resolvers docker resolve-prefer ipv4
server server1 www-somedomain2-com maxconn 32 check port 80
我想用多克的嵌入式DNS系统 - 这,在我的理解,只使用一个用户时启用定义网络。
所以我创建了一个网络(使用默认的桥式驱动器)
docker network create mynetwork
当我跑我的两个命名泊坞窗的容器,(我-HAProxy的和WWW-somedomain1-COM),我将它们添加到网络--net标志。
泊坞窗运行命令:
docker run --name myhaproxy --net mynetwork -p 80:80 -d haproxy
docker run --name www-somedomain1-com --net mynetwork -d nginx
我知道泊坞DNS是功能性的,因为我可以从一个容器解析到其他的时候我在bash shell上他们跳。我无法在HAProxy中获得正确的组合/配置以启用动态DNS解析。
HAProxy的统计页面始终显示下游后端为棕色/解析问题....
一些事情帮助: - “默认服务器的init-地址无”有助于通过HAProxy的配置检查启动。
任何指导非常感谢!
答
我也在项目中使用nginx和haproxy。既然你可能会开始使用docker-compose,我想我会为此发布我的docker-compose.yaml。
version: "2"
networks:
main:
volumes:
jsdoc-data:
driver: local
coverage-data:
driver: local
services:
nginx:
build: ../nginx
depends_on:
- haproxy
networks:
- main
ports:
- 80:80
- 443:443
volumes:
- jsdoc-data:/www/jsdoc
- coverage-data:/www/coverage
haproxy:
image: dockercloud/haproxy:1.5.3
ports:
- 80
- 1936:1936
links:
- app
networks:
- main
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- MODE=http
- STATS_PORT=1936
- STATS_AUTH=username:password
答
我觉得你的问题是,你正在使用127.0.0.1:53
为您解析DNS,当它需要127.0.0.11:53
为泊坞窗桥接网络。
这里是我的dev的搬运工东西HAProxy的设置:
global
quiet
defaults
log global
mode http
option forwardfor
timeout connect 60s
timeout client 60s
timeout server 60s
default-server init-addr none
resolvers docker_resolver
nameserver dns 127.0.0.11:53
frontend https-proxy
bind 0.0.0.0:80
bind 0.0.0.0:443 ssl crt /usr/local/etc/haproxy/dev_server.pem
redirect scheme https if !{ ssl_fc }
acl is_api_server hdr(host) -i mywebsite
use_backend api_server if is_api_server
backend api_server
server haproxyapi api-server-dev:80 check inter 10s resolvers docker_resolver resolve-prefer ipv4
您可以发布您'泊坞窗run'命令?任何你没有使用docker-compose这个环境的理由? – jmiraglia
你可以在容器内运行dig/nslookup吗? – Baptiste
你也可以在套接字上发布“show stat resolvers”以获得DNS解析统计信息的转储,我们可以看到报告了哪种类型的errros – Baptiste