配置和使用Pivotal Cloud Foundry中的HAPorxy详解

云计算
Pivotal使用HAProxy作为其访问入口,当然是允许使用其他负载均衡软件或硬件进行替换的。不过,基于怕麻烦和强迫症,个人还是用了HAProxy到最终的生产环境。为了满足特定的应用需求和可靠性需求,对负载均衡这一层做了一定的配置,本文通过四个案例共享这些经验。

Pivotal使用HAProxy作为其访问入口,当然是允许使用其他负载均衡软件或硬件进行替换的。不过,基于怕麻烦和强迫症,个人还是用了HAProxy到最终的生产环境。为了满足特定的应用需求和可靠性需求,对负载均衡这一层做了一定的配置,本文通过四个案例共享这些经验。

如何配置和使用Pivotal Cloud Foundry里的HAPorxy

为不同应用分配不同的HAProxy

Pivotal Cloud Foundry的配置界面中,HAProxy允许配置多个IP(同时需要在资源尺寸页配置相同个数的HAProxy虚拟机),这样一个CF就拥有了多个入口。可以通过管理员的人脑,对运行在这套CF上不同应用按照负载和安全的考量,分配到不同的HAProxy上。具体实例如下:

假定为PCF配置了两个HAProxy(10.20.30.40和10.20.30.41),在DNS上,默认将*.pcf.mydomain.com子域分配给了这个PCF,指向了10.20.30.40。此时,如果应用app1域名为app1.pcf.mydomain.com,则该应用的访问将通过 10.20.30.40进入PCF。

这时如果这个应用app1需要使用域名app1.mydomain.com,并且负载很大和/或可靠性要求高,则可以在DNS上将app1.mydomain.com指向10.20.30.41,然后cf create-domain org1 mydomain.com创建域名(如果这个域名整个CF都要用,那就用cf create-shared-domain),然后用cf map-route app1 mydomain.com -n app1为这个应用增加一个新的域名。

此时,通过app1.mydomain.com和app1.pcf.mydomain.com都可以访问这一应用,但是前者通过10.20.30.41进入PCF,后者通过10.20.30.40进入PCF。

为同一HAProxy上的不同域名配置SSL证书并自动访问https

PCF可以生成个自签名的域名给分配给自己的子域,但实际生产中使用证书肯定不会是自签名的,而且多数也不会是整个子域的域名,而是单独的域名,还是针对前文的实例,增加如下需求:另一个应用app2与app1属于同一系统,需要使用域名 app2.mydomain.com,app1.mydomain.com和app2.mydomain.com均有各自的SSL证书,同时二者均要求禁止http访问。

此时可以将DNS上app2.mydomain.com指向10.20.30.41,然后登陆10.20.30.41这个HAProxy的OS(用户名为vcap,密码可以在Pivotal Operation Manager的界面上找到),进行HAProxy配置。

对于自动跳转https的需求,可以通过修改/var/vcap/jobs/haproxy/config/haproxy.config里的http-in完成。

  1. frontend http-in 
  2.     mode http 
  3.     bind :80 
  4.     option httplog 
  5.     option forwardfor 
  6.     reqadd X-Forwarded-Proto:\ http 
  7.     acl is_app1_mydomain_com hdr(host) -i app1.mydomain.com 
  8.     redirect location https://app1.mydomain.com:443 if is_app1_mydomain_co 
  9.     acl is_app2_mydomain_com hdr(host) -i app2.mydomain.com 
  10.     redirect location https://app2.mydomain.com:443 if is_app2_mydomain_com 
  11.     default_backend http-routers 

对于多个证书的需求,可以通过修改/var/vcap/jobs/haproxy/config/haproxy.config里的https-in完成。将需要的证书上传到这台HAProxy,并在配置文件中添加即可,证书文件支持的格式请参见/var/vcap/jobs/haproxy/config/cert.pem。

  1. frontend https-in 
  2.     mode http 
  3.     bind :443 ssl crt /var/vcap/jobs/haproxy/config/cert.pem crt /var/vcap/jobs/haproxy/config/app1.mydomain.com.pem crt /var/vcap/jobs/haproxy/config/app2.mydomain.com.pem 
  4.     option httplog 
  5.     option forwardfor 
  6.     option http-server-close 
  7.     reqadd X-Forwarded-Proto:\ https 
  8.     default_backend http-routers 

#p#

多层负载均衡满足安全需求和业务需求

企业的安全及防火墙策略对PCF来说是个灾难,当然现在的版本已经有Availability Zone来覆盖这一需求,但是下面这种需求还是难以实现:PCF部署在生产网络,但是需要被互联网访问,安全策略仅允许DMZ网络对外提供服务,因此需要做个脱裤子放屁的事儿是PCF可以从internet访问。还以上例为基础,app1和app2均需要互联网访问(将定DMZ网络中存在可用的负载均衡设备50.60.70.100和50.60.70.101):

首先获取一个DMZ网段的IP,如50.60.70.80,开通负载均衡设备50.60.70.100和50.60.70.101访问PCF的对外IP的10.20.30.41的80和443端口,将10.20.30.41的80和443端口在DMZ负载均衡设备上负载均衡为50.60.70.80的80和443,将50.60.70.80的80和443端口NAT成公网的80和443,并返回需要的域名(比如app1.bjsdns.mydomain.com、app2.bjsdns.mydomain.com等),在DNS中把app1.bjsdns.mydomain.com、app2.bjsdns.mydomain.com做别名成app1.mydomain.com和app2.mydomain.com,就大功告成了。

让CF与普通Tomcat应用服务一块工作

对于企业内部的私有PaaS来讲,PCF中最让人担心的技术就是PCF的运行环境架构(包含负载均衡和自动弹性)。下面的方案可以屏蔽使用互联网技术带来的新技术不确定性风险,使私有PaaS为实时业务系统提供服务成为可能。这个方案通过将应用服务负载均衡到IaaS资源,确保在PCF的整个运行环境框架出现问题时,可做到用户无感知的故障恢复。具体细节如下:

1、在PCF中(比如分配10个应用实例,假定应用名称为app1)和使用IaaS虚拟机单独部署的多个Tomcat节点(比如2个)中部署相同应用代码。

2、在PaaS中使用如下命令创建域(比如mydomain.com),创建应用域名(app1.mydomain.com),绑定应用域名(app1.mydomain.com绑定到应用app1):

  1. cf create-domain org1 mydomain.com 
  2. cf map-route app1 mydomain.com -n app1 

3、在负载均衡设备中配置virtual service(比如50.60.70.80),其对应的real service为PaaS环境的入口IP(比如10.20.30.41)和其他使用IaaS虚拟机单独部署的多个Tomcat节点,单独Tomcat节点的权重为1,PaaS入口IP的权重为其为此应用分配的应用实例个数(10)。

4、在DNS中将应用域名(app1.mydomain.com)配置为负载均衡设备上的virtual service IP(50.60.70.80)。

5、当用户访问app1.mydomain.com,DNS将解析到负载均衡设备,负载均衡设备会根据策略和权重将请求负载均衡到单独的Tomcat或PaaS入口IP上,如果到了PaaS入口IP上,PaaS将根据客户端访问的域名在此进行解析,并根据策略将请求route到应用app1的10个应用实例上。

博文出处:http://blog.csdn.net/cloudguru/article/details/45054165

责任编辑:Ophira 来源: 云计算实务博客
相关推荐

2013-04-26 17:38:52

大数据全球技术峰会

2011-04-22 10:13:42

Cloud FoundAzure

2012-07-19 09:13:40

VMware云计算Cloud Found

2012-03-27 11:40:55

vmwareCloud Found

2012-05-14 10:39:19

2012-12-07 10:00:25

SpringOneCloud FoundVMware

2012-05-14 10:49:25

Cloud Found

2014-03-07 09:26:46

PaaSCloud Found

2015-12-16 11:11:52

Cloud FoundSpring云计算

2015-04-24 09:33:11

Cloud Found组件分析PaaS

2015-06-02 11:42:00

Cloud FoundAzure

2012-08-02 09:15:16

PAASOpenShiftCloud Found

2012-11-29 10:37:39

VMwarePaaSCloud Found

2011-04-15 11:07:20

VMwarePaaS平台Cloud Found

2018-10-20 16:19:45

Cloud FoundKubernetes云计算

2012-03-27 11:49:41

vmwareCloud Found

2020-11-27 10:29:02

云计算

2015-03-30 15:15:00

CloudFoundrPaaS开源

2015-06-09 10:36:13

Cloud FoundAzurePaaS

2012-04-19 11:14:48

PaaSCloud FoundVMware
点赞
收藏

51CTO技术栈公众号