HAProxy将前端绑定到单个IP上的多个端口

时间:2018-10-01 11:55:10

标签: port config openstack haproxy

我有多个OpenStack环境。我有一套用于DEV环境的web / ftp / db服务器,另一套用于QC环境的web / ftp / db服务器。我有两个内部DNS条目,每个环境一个:

dev-foo.this.net
qc-foo.this.net

这些DNS条目每个都指向OpenStack中的VIP(浮动IP?):

dev-vip.this.net (10.240.38.117) <- dev-foo.this.net (10.240.38.117)
qc-vip.this.net (10.240.38.192) <- qc-foo.this.net (10.240.38.192)

这些VIP目前未映射到任何固定IP。

我有两个HAProxy服务器设置为使用心跳在故障转移配置中,以在当前主节点消失时自动故障转移到其他服务器:

proxy1.this.net (10.240.38.68)
proxy2.this.net (10.240.38.69)

看来,其中的哪一个是当前的主节点(因此是唯一的活动主节点)都被分配了两个VIP 1.0.0.240和1.0.0.241。这些是VIPS(我认为VIP在这里是正确的术语),我在主服务器上运行ifconfig时会看到。

eth0: inet 1.0.0.19
eth0:0: inet 1.0.0.240
eth0:1: inet 1.0.0.241

我想/需要做的是:

1> Have HAProxy take ALL traffic requests for dev-foo.this.net and send it to the DEV environment servers.
2> Have HAProxy take ALL traffic requests for qc-foo.this.net and send it to the QC environment servers.
3> Have the SSL requests SSL terminated at the proxy so I can examine the request and change it. This is because I need to translate some URLs to different URLs.
4> Have the request re-encrypted and forwarded on to the backend servers.

这么多问题:

1> Can I bind the same IP to multiple ports on the same front end? 
   For instance bind 80, 443 and 22 on 1.0.0.240 in a single front end definition.
2> What causes the request traffic for dev-foo.this.net to get picked up by a specific VIP on the proxy server? 
   How do I know dev-foo.this.net requests will go to 1.0.0.240 on the proxy servers?
3> How do I get SSL requests re-encrypted and forwarded on to the backend servers?
4> Can I assume that the VIPs (1.0.0.240, 1.0.0.241) on the proxy servers will be the same when a fail over from one to the other happens?
   I don't know how these get associated to the proxy machines.

让我说我不是网络人士,所以我可能没有正确询问。忍受我。我以为我可以在haproxy.cfg中执行类似的操作,但是我很困惑,需要一些指导:

# -----------------------------------------
# web server stuff for DEV environment
# -----------------------------------------
frontend dev-app
    mode http
    bind 1.0.0.240:80
    bind 1.0.0.240:443 ssl crt /etc/haproxy/ssl.pem/star.this.net.pem
    option http-tunnel
    option forwardfor
    reqadd X-Forwarded-Proto:\ https if { ssl_fc }
    use_backend dev-app-backend

backend dev-app-backend
    mode http
    balance roundrobin
    cookie SERVERID insert indirect nocache
    option forwardfor
    option httplog
    option httpchk HEAD /
    option http-tunnel
    http-check expect status 200
    server www01 dweb200.this.net:443 check ssl verify none cookie www01
    server www02 dweb201.this.net:443 check ssl verify none cookie www02

# -----------------------------------------
# web server stuff for QC environment
# -----------------------------------------
frontend qc-app
    mode http
    bind 1.0.0.241:80
    bind 1.0.0.241:443 ssl crt /etc/haproxy/ssl.pem/star.this.net.pem
    option http-tunnel
    option forwardfor
    reqadd X-Forwarded-Proto:\ https if { ssl_fc }
    use_backend qc-app-backend

backend qc-app-backend
    mode http
    balance roundrobin
    cookie SERVERID insert indirect nocache
    option forwardfor
    option httplog
    option httpchk HEAD /
    option http-tunnel
    http-check expect status 200
    server www01 qweb200.this.net:443 check ssl verify none cookie www01
    server www02 qweb201.this.net:443 check ssl verify none cookie www02

# -----------------------------------------
# sftp server stuff for DEV environment
# -----------------------------------------
frontend dev-sftp
    mode tcp
    bind 1.0.0.240:22
    option tcplog
    default_backend dev-sftp-backend

backend dev-sftp-backend
    mode tcp
    balance roundrobin
    option tcplog
    server ftp01 dftp200.this.net:22
    server ftp02 dftp201.this.net:22

# -----------------------------------------
# sftp server stuff for QC environment
# -----------------------------------------
frontend qc-sftp
    mode tcp
    bind 1.0.0.241:22
    option tcplog
    default_backend qc-sftp-backend

backend qc-sftp-backend
    mode tcp
    balance roundrobin
    option tcplog
    server ftp01 qftp200.this.net:22
    server ftp02 qftp201.this.net:22

*编辑*

问题1。 我确实看到了this post,这似乎表明您可以像我想的那样绑定到多个端口,但其余问题仍未解决。

问题3。 进一步看,似乎re-encryption happens是由于后端服务器行上的“ ssl”参数所致。粘性会话是由cookie参数引起的。

问题2。 我想我需要以某种方式配置DNS IP以绑定到代理服务器上的VIP。在OpenStack Web UI中,两个浮动IP:

dev-vip.this.net(10.240.38.117) qc-vip.this.net(10.240.38.192)

没有映射到任何固定IP地址,我认为应该分别将它们映射到代理服务器上的1.0.0.240和1.0.0.241地址。这将导致正确的流量流向正确的后端环境QC / DEV。至少我是这样认为的。不过,我不确定该怎么做,可能是shown here我仍在尝试理解这一部分。

*进一步编辑*

对于问题2,我found this基本上是我要尝试做的,似乎我需要执行步骤6和7。

*进一步编辑* 注意:这是用于在Windows上运行OpenStack CLI。

好吧,将浮动IP(dev-vip.this.net 10.240.38.117,qc-vip.this.net 10.240.38.192)“绑定”到代理(1.0.0.240和1.0.0.241),则必须安装OpenStack CLI。显然,您无法通过网络客户端执行此操作。

这将替换您将在网上看到的所有其他命令,例如中子和新星。您必须安装python(版本3之前的版本)。我安装了2.7.1

一旦安装了python,请将python主文件夹和python \ scripts文件夹放入路径中。

现在,您需要安装pip,下载install script并将其放在python \ scripts文件夹中。

打开命令行,并使用以下命令运行脚本“ python d:\ python27 \ scripts \ get-pip.py”。

现在确保使用此命令“ python -m pip install --upgrade pip setuptools wheel”也安装了setuptools和wheel软件包。

最后,您可以使用“ pip install python-openstackclient”命令安装openstack CLI。

要使openstack CLI工作,您需要设置某些环境变量。登录到您的机器/ ip所在区域的openstack Web仪表板。打开“项目”选项卡,打开“计算”选项卡,然后单击“访问和安全性”。在“ API访问”选项卡上,单击下载OpenStack RC文件并保存该文件。这是一个unix shell脚本,您需要将其转换为Windows cmd文件并更改一些内容,最终看起来应该像这样:

set OS_IDENTITY_API_VERSION=3
set OS_AUTH_URL=http://someip:5000/v3
set OS_TENANT_ID=<<your tenant id>>
set OS_TENANT_NAME=<<your tenant name>>
set OS_PROJECT_NAME=<< your project name >>
set OS_REGION_NAME=us-east-1a
set OS_USERNAME=<< YOUR USER NAME >>
set OS_PASSWORD=<< YOUR PASSWORD >>

请注意,我必须将值中的引号删除才能使工作正常。如果您将域用作身份验证的一部分,则还必须添加DOMAIN设置之一。

打开一个新的命令提示符并运行此cmd文件以设置环境变量。现在,您应该能够在命令提示符下运行“ openstack”命令。如果可行,您将得到一个类似于“(openstack)”的提示,其后是光标。然后,您可以运行以下命令,以确保openstack CLI“网络列表”中的所有内容均正常运行。如果您得到的东西列表而不是身份验证错误,那您就走了。

*进一步的进一步编辑*

确保将网站的pfx证书文件安装到后端的IIS服务器中,以便它们可以处理来自代理的重新加密的流量。我仍在尝试使流量通过代理服务器路由,因此距离越来越近。我尚未能够将浮动IP绑定到代理VIP上,我很确定那是让我无法通过代理路由流量的原因。

...所以看来我剩下的其他问题都是由于防火墙和其他网络问题引起的。我们中的一位为我修复了这部分内容,因此我真的不知道这笔交易是什么。在错误的后端服务器上使用FQDN的位置,因为那不能解析为这些计算机上的1.0.0.X地址。

*最后编辑* 哦,我很喜欢。

我发现代理配置文件的后端定义中有httpchk行。这就是导致HAProxy认为Web服务器已关闭的原因,因此它不会向它们发送流量。我取出来,并在后端服务器行中添加了“ ca-file /etc/ssl/certs/ca-bundle.crt”,因此它将知道可以在哪里找到CA。而且BLAMM-O,Web服务器现在在代理统计信息页面中显示为活动状态,并且在两种环境中我都可以同时点击https和http。

还请注意,我必须将IIS中的绑定更改为未设置主机名。

0 个答案:

没有答案