配置和使用Pivotal Cloud Foundry中的HAPorxy詳解
Pivotal使用HAProxy作為其訪問入口,當(dāng)然是允許使用其他負(fù)載均衡軟件或硬件進(jìn)行替換的。不過,基于怕麻煩和強迫癥,個人還是用了HAProxy到最終的生產(chǎn)環(huán)境。為了滿足特定的應(yīng)用需求和可靠性需求,對負(fù)載均衡這一層做了一定的配置,本文通過四個案例共享這些經(jīng)驗。
為不同應(yīng)用分配不同的HAProxy
Pivotal Cloud Foundry的配置界面中,HAProxy允許配置多個IP(同時需要在資源尺寸頁配置相同個數(shù)的HAProxy虛擬機),這樣一個CF就擁有了多個入口??梢酝ㄟ^管理員的人腦,對運行在這套CF上不同應(yīng)用按照負(fù)載和安全的考量,分配到不同的HAProxy上。具體實例如下:
假定為PCF配置了兩個HAProxy(10.20.30.40和10.20.30.41),在DNS上,默認(rèn)將*.pcf.mydomain.com子域分配給了這個PCF,指向了10.20.30.40。此時,如果應(yīng)用app1域名為app1.pcf.mydomain.com,則該應(yīng)用的訪問將通過 10.20.30.40進(jìn)入PCF。
這時如果這個應(yīng)用app1需要使用域名app1.mydomain.com,并且負(fù)載很大和/或可靠性要求高,則可以在DNS上將app1.mydomain.com指向10.20.30.41,然后cf create-domain org1 mydomain.com創(chuàng)建域名(如果這個域名整個CF都要用,那就用cf create-shared-domain),然后用cf map-route app1 mydomain.com -n app1為這個應(yīng)用增加一個新的域名。
此時,通過app1.mydomain.com和app1.pcf.mydomain.com都可以訪問這一應(yīng)用,但是前者通過10.20.30.41進(jìn)入PCF,后者通過10.20.30.40進(jìn)入PCF。
為同一HAProxy上的不同域名配置SSL證書并自動訪問https
PCF可以生成個自簽名的域名給分配給自己的子域,但實際生產(chǎn)中使用證書肯定不會是自簽名的,而且多數(shù)也不會是整個子域的域名,而是單獨的域名,還是針對前文的實例,增加如下需求:另一個應(yīng)用app2與app1屬于同一系統(tǒng),需要使用域名 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的界面上找到),進(jìn)行HAProxy配置。
對于自動跳轉(zhuǎn)https的需求,可以通過修改/var/vcap/jobs/haproxy/config/haproxy.config里的http-in完成。
- frontend http-in
- mode http
- bind :80
- option httplog
- option forwardfor
- reqadd X-Forwarded-Proto:\ http
- acl is_app1_mydomain_com hdr(host) -i app1.mydomain.com
- redirect location https://app1.mydomain.com:443 if is_app1_mydomain_co
- acl is_app2_mydomain_com hdr(host) -i app2.mydomain.com
- redirect location https://app2.mydomain.com:443 if is_app2_mydomain_com
- default_backend http-routers
對于多個證書的需求,可以通過修改/var/vcap/jobs/haproxy/config/haproxy.config里的https-in完成。將需要的證書上傳到這臺HAProxy,并在配置文件中添加即可,證書文件支持的格式請參見/var/vcap/jobs/haproxy/config/cert.pem。
- frontend https-in
- mode http
- 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
- option httplog
- option forwardfor
- option http-server-close
- reqadd X-Forwarded-Proto:\ https
- default_backend http-routers
#p#
多層負(fù)載均衡滿足安全需求和業(yè)務(wù)需求
企業(yè)的安全及防火墻策略對PCF來說是個災(zāi)難,當(dāng)然現(xiàn)在的版本已經(jīng)有Availability Zone來覆蓋這一需求,但是下面這種需求還是難以實現(xiàn):PCF部署在生產(chǎn)網(wǎng)絡(luò),但是需要被互聯(lián)網(wǎng)訪問,安全策略僅允許DMZ網(wǎng)絡(luò)對外提供服務(wù),因此需要做個脫褲子放屁的事兒是PCF可以從internet訪問。還以上例為基礎(chǔ),app1和app2均需要互聯(lián)網(wǎng)訪問(將定DMZ網(wǎng)絡(luò)中存在可用的負(fù)載均衡設(shè)備50.60.70.100和50.60.70.101):
首先獲取一個DMZ網(wǎng)段的IP,如50.60.70.80,開通負(fù)載均衡設(shè)備50.60.70.100和50.60.70.101訪問PCF的對外IP的10.20.30.41的80和443端口,將10.20.30.41的80和443端口在DMZ負(fù)載均衡設(shè)備上負(fù)載均衡為50.60.70.80的80和443,將50.60.70.80的80和443端口NAT成公網(wǎng)的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應(yīng)用服務(wù)一塊工作
對于企業(yè)內(nèi)部的私有PaaS來講,PCF中最讓人擔(dān)心的技術(shù)就是PCF的運行環(huán)境架構(gòu)(包含負(fù)載均衡和自動彈性)。下面的方案可以屏蔽使用互聯(lián)網(wǎng)技術(shù)帶來的新技術(shù)不確定性風(fēng)險,使私有PaaS為實時業(yè)務(wù)系統(tǒng)提供服務(wù)成為可能。這個方案通過將應(yīng)用服務(wù)負(fù)載均衡到IaaS資源,確保在PCF的整個運行環(huán)境框架出現(xiàn)問題時,可做到用戶無感知的故障恢復(fù)。具體細(xì)節(jié)如下:
1、在PCF中(比如分配10個應(yīng)用實例,假定應(yīng)用名稱為app1)和使用IaaS虛擬機單獨部署的多個Tomcat節(jié)點(比如2個)中部署相同應(yīng)用代碼。
2、在PaaS中使用如下命令創(chuàng)建域(比如mydomain.com),創(chuàng)建應(yīng)用域名(app1.mydomain.com),綁定應(yīng)用域名(app1.mydomain.com綁定到應(yīng)用app1):
- cf create-domain org1 mydomain.com
- cf map-route app1 mydomain.com -n app1
3、在負(fù)載均衡設(shè)備中配置virtual service(比如50.60.70.80),其對應(yīng)的real service為PaaS環(huán)境的入口IP(比如10.20.30.41)和其他使用IaaS虛擬機單獨部署的多個Tomcat節(jié)點,單獨Tomcat節(jié)點的權(quán)重為1,PaaS入口IP的權(quán)重為其為此應(yīng)用分配的應(yīng)用實例個數(shù)(10)。
4、在DNS中將應(yīng)用域名(app1.mydomain.com)配置為負(fù)載均衡設(shè)備上的virtual service IP(50.60.70.80)。
5、當(dāng)用戶訪問app1.mydomain.com,DNS將解析到負(fù)載均衡設(shè)備,負(fù)載均衡設(shè)備會根據(jù)策略和權(quán)重將請求負(fù)載均衡到單獨的Tomcat或PaaS入口IP上,如果到了PaaS入口IP上,PaaS將根據(jù)客戶端訪問的域名在此進(jìn)行解析,并根據(jù)策略將請求route到應(yīng)用app1的10個應(yīng)用實例上。
博文出處:http://blog.csdn.net/cloudguru/article/details/45054165