阿里云VPC多可用區(qū)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計

網(wǎng)絡(luò)架構(gòu)綜述

安全性是架構(gòu)設(shè)計考慮的重點(diǎn)头遭,所以必須要求所有的機(jī)器都放置在VPC當(dāng)中,而且在VPC當(dāng)中還需要將不同的部門的不同功能的機(jī)器(如應(yīng)用機(jī)器产喉,Web服務(wù)器析珊,RDS)劃分成不用的子網(wǎng)進(jìn)行單獨(dú)管理。

總原則:

  • 安全原則:所有的機(jī)器都必須放在在VPC當(dāng)中蜈块,以部門和機(jī)器功能再細(xì)分子網(wǎng)鉴腻,部門之間以及不同功能的服務(wù)器之間訪問都是采取最小訪問原則。
  • 可用原則:生產(chǎn)系統(tǒng)都采取多可用區(qū)部署百揭,保證在出現(xiàn)整個機(jī)房故障的時候業(yè)務(wù)系統(tǒng)也能正常運(yùn)行

VPC設(shè)計

在VPC設(shè)計上面所遵循的原則是一個區(qū)域一個VPC爽哎,而不是多個VPC存在于一個區(qū)域,目的是為了減少網(wǎng)絡(luò)的復(fù)雜性器一,但是為了保證VPC內(nèi)部的機(jī)器 還具有更靈活的安全管理课锌,我們需要根據(jù)部門、服務(wù)器業(yè)務(wù)類型或者功能的不同在劃分子網(wǎng)絡(luò)進(jìn)行管理祈秕,同時用安全組來保證每一類服務(wù)器都能擁有我們想要的安全 策略渺贤。

另外訪問安全的角度來說雏胃,測試系統(tǒng)會開放較大的權(quán)限,也就是說開發(fā)人員需要有完全的測試系統(tǒng)的登錄權(quán)限以方便系統(tǒng)開發(fā)志鞍,所以在設(shè)計上同一個區(qū)域至少會存在2個VPC丑掺,一個生產(chǎn)系統(tǒng)用,另外一個測試系統(tǒng)用述雾。

考慮到各個區(qū)域可能在以后可能會有互通的需求街州,因此在VPC的CIDR設(shè)計上也要能區(qū)分開來,以保證互通之后不會出現(xiàn)IP地址沖突的情形玻孟,根據(jù)目前區(qū)域情況分配如下:

網(wǎng)絡(luò)拓?fù)?/h2>
+ - - - - - - - - -+             +- - - - - - - - - +
' Infra            '             ' Prod             '
'                  '             '                  '
' +--------------+ '             ' +--------------+ '
' | 10.25.0.0/16 | ' ----------> ' | 10.20.0.0/16 | '
' +--------------+ '             ' +--------------+ '
'                  '             '                  '
+ - - - - - - - - -+             +- - - - - - - - - +
    |                                ^
    |                                |
    |                                |
    v                                |
+ - - - - - - - - -+                 |
' NonProd          '                 |
'                  '                 |
' +--------------+ '       Deny      |
' | 10.21.0.0/16 | ' <---------------+
' +--------------+ '
'                  '
+ - - - - - - - - -+

阿里云

  • 10.20.0.0/16 生產(chǎn)系統(tǒng), 生產(chǎn)環(huán)境相關(guān)的服務(wù)部署網(wǎng)段
  • 10.21.0.0/16 非生產(chǎn)系統(tǒng)唆缴, 開發(fā)、測試相關(guān)服務(wù)部署網(wǎng)段
  • 10.25.0.0/16 基礎(chǔ)設(shè)施黍翎, 運(yùn)維基礎(chǔ)服務(wù)部署網(wǎng)段

VPC 可用區(qū)

考慮北京早期的可用區(qū)機(jī)房比較老可選擇的主機(jī)類型不多面徽,所以選取H、G匣掸、F三個可用區(qū)趟紊, 多可用區(qū)的設(shè)計是為了防止 阿里云單獨(dú)可用區(qū)故障時其它可用區(qū)的主機(jī)可以正常的對外提供服務(wù)

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
' DMZ                                                          '
'                                                              '
' +------------------++------------------++------------------+ '
' | dmz-cn-beijing-h || dmz-cn-beijing-g || dmz-cn-beijing-f | '
' +------------------++------------------++------------------+ '
'                                                              '
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
                                            |
                                            |
                                            |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
' Applicaiton                                                  '
'                                                              '
' +------------------++------------------++------------------+ '
' | app-cn-beijing-h || app-cn-beijing-g || app-cn-beijing-f | '
' +------------------++------------------++------------------+ '
'                                                              '
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
                                            |
                                            |
                                            |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
' Database                                                     '
'                                                              '
' +------------------++------------------++------------------+ '
' | db-cn-beijing-g  || db-cn-beijing-h  || db-cn-beijing-f  | '
' +------------------++------------------++------------------+ '
'                                                              '
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+

+-----+     +-------------+     +----------+
| DMZ | --> | Application | --> | Database |
+-----+     +-------------+     +----------+
  • DMZ類:DMZ區(qū)放置的是所有需要直接對外提供服務(wù)的機(jī)器,也就是說需要直接分配外部IP的碰酝,另外諸如NAT霎匈、VPN等機(jī)器劃分到另外一個功能的DMZ區(qū)。
  • 部門業(yè)務(wù)類:每個業(yè)務(wù)部門都按照Application送爸、database功能來劃分子網(wǎng)铛嘱,同一部門的子網(wǎng)之間權(quán)限限制更寬松,部門之間的訪問遵循最小訪問原則袭厂。
  • 公共業(yè)務(wù)類:對于運(yùn)維部署的運(yùn)維監(jiān)控等公共服務(wù)的機(jī)器單獨(dú)劃分不同的VPC墨吓。

子網(wǎng)CIDR分配方案

使用部門+功能來進(jìn)行子網(wǎng)劃分會導(dǎo)致子網(wǎng)的數(shù)據(jù)變得很龐大,所以在確定子網(wǎng)CIDR的時候要確保有足夠的子網(wǎng)的數(shù)量纹磺。

  • 使用10.20.0.0/20作為子網(wǎng)CIDR
  • 總子網(wǎng)數(shù)量2^(20-16)=128
  • 每個子網(wǎng)可用的IP數(shù)量2^(32-20)-2=4094

詳細(xì)設(shè)計

VPC內(nèi)機(jī)器訪問模式及應(yīng)對方法

部門內(nèi)部分層訪問

訪問情景:

+ - - - - - -+     +- - - - - - - - - - - - - - - - - - - - - - - -+
' Internet   '     ' Aliyun                                        '
'            '     '                                               '
' +--------+ '     ' +----------+     +---------+     +----------+ '
' |  user  | ' --> ' | Frontend | --> | Backend | --> | Database | '
' +--------+ '     ' +----------+     +---------+     +----------+ '
'            '     '                                               '
+ - - - - - -+     +- - - - - - - - - - - - - - - - - - - - - - - -+
  • 同部門前端對于后端的訪問
  • 同部門后端對于數(shù)據(jù)庫的訪問

應(yīng)對方案:

  • 子網(wǎng)內(nèi)部自由訪問
  • 同部門子網(wǎng)之間只開放必要的端口

部門之間訪問

訪問情景:

+-------------+  API Access         +-------------+
| departmentA |  Database Access    | departmentB |
|             | <-----------------> |             |
+-------------+                     +-------------+
  • 存在數(shù)據(jù)庫被別的部門調(diào)用的情況
  • 部門之間API調(diào)用的情況

應(yīng)對方案:

  • 在實踐當(dāng)中推廣部門之間走API訪問而不是直接做數(shù)據(jù)庫調(diào)用
  • 部門之間的API調(diào)用通過防火墻限定訪問源和目的帖烘,防止濫用的情況發(fā)生

運(yùn)維部門管理機(jī)器訪問

訪問情景:

  • 運(yùn)維人員登錄機(jī)器進(jìn)行系統(tǒng)安裝配置等操作
  • 部分開發(fā)人員自己維護(hù)的機(jī)器需要分配給開發(fā)人員登錄的權(quán)限

應(yīng)對方案:

  1. 通過堡壘機(jī)做跳板再登錄相應(yīng)的機(jī)器進(jìn)行訪問
  2. 通過連接VPN之后再登錄相應(yīng)的機(jī)器進(jìn)行訪問

對外提供服務(wù)訪問

訪問情景:對外提供的Web服務(wù),對外提供的API服務(wù)橄杨。

+ - - - - - -+        + - - - - - - - - - - - - - - -+
' Internet   '        ' Aliyun                       '
'            '        '                              '
' +--------+ '  Api   ' +------+     +-------------+ '
' |  User  | '  Web   ' | SLB  |     | Real Server | '
' |        | ' -----> ' |      | --> |             | '
' +--------+ '        ' +------+     +-------------+ '
'            '        '                              '
+ - - - - - -+        + - - - - - - - - - - - - - - -+

應(yīng)對方案:所有對外的服務(wù)原則上都是使用SLB來提供服務(wù)秘症,而不是單獨(dú)分配外部IP出網(wǎng),這樣提供服務(wù)的服務(wù)器將不需要放置在DMZ讥珍,而是放在私網(wǎng)區(qū)历极,可以加強(qiáng)保障;另外SLB的使用可以很方便的擴(kuò)展或者遷移提供服務(wù)的服務(wù)器衷佃,提高整個系統(tǒng)的可用性和安全性趟卸。

對內(nèi)提供服務(wù)訪問

訪問情景:

              VPN
             ----->

+ - - - - -+        + - - - - - - - - - - - - - - -+
' Office   '        ' Aliyun                       '
'          '        '                              '
' +------+ '  Api   ' +------+     +-------------+ '
' | User | '  Web   ' | SLB  |     | Real Server | '
' |      | ' -----> ' |      | --> |             | '
' +------+ '        ' +------+     +-------------+ '
'          '        '                              '
+ - - - - -+        + - - - - - - - - - - - - - - -+
  • 供公司員工使用的部署在VPC內(nèi)部的管理系統(tǒng)
  • Jenkins、gitlab、監(jiān)控等系統(tǒng)的內(nèi)部訪問

應(yīng)對方案:需要使用相應(yīng)服務(wù)的人員在登錄VPN之后可以自由的訪問到相應(yīng)的系統(tǒng)锄列,原則上開發(fā)給公司內(nèi)部人員的系統(tǒng)也是要使用最小訪問原則:只開放哪些需要開放的IP及端口图云。

使用terraform初始化

目錄結(jié)構(gòu)

.
├── infra.tf
├── non-prod.tf
├── prod.tf
└── provider.tf

0 directories, 7 files

provider.tf

provider "alicloud" {
  access_key = ""
  secret_key = ""
  region     = "cn-beijing"
}

prod.tf

這部分是生成生產(chǎn)環(huán)境的terraform腳本,Nonprod和Infra按照下面的腳本修改對應(yīng)的信息即可

resource "alicloud_vpc" "prod_vpc" {
  name        = "生產(chǎn)"
  cidr_block  = "10.20.0.0/16"
  description = "VPC for production environment"
}

resource "alicloud_vswitch" "vsw_prod_dmz_f" {
  name              = "生產(chǎn)-DMZ-F"
  vpc_id            = "${alicloud_vpc.prod_vpc.id}"
  cidr_block        = "10.20.0.0/20"
  availability_zone = "cn-beijing-f"
}

resource "alicloud_vswitch" "vsw_prod_dmz_g" {
  name              = "生產(chǎn)-DMZ-G"
  vpc_id            = "${alicloud_vpc.prod_vpc.id}"
  cidr_block        = "10.20.16.0/20"
  availability_zone = "cn-beijing-g"
}

resource "alicloud_vswitch" "vsw_prod_dmz_h" {
  name              = "生產(chǎn)-DMZ-H"
  vpc_id            = "${alicloud_vpc.prod_vpc.id}"
  cidr_block        = "10.20.32.0/20"
  availability_zone = "cn-beijing-h"
}

resource "alicloud_vswitch" "vsw_prod_application_f" {
  name              = "生產(chǎn)-應(yīng)用-F"
  vpc_id            = "${alicloud_vpc.prod_vpc.id}"
  cidr_block        = "10.20.48.0/20"
  availability_zone = "cn-beijing-f"
}

resource "alicloud_vswitch" "vsw_prod_application_g" {
  name              = "生產(chǎn)-應(yīng)用-G"
  vpc_id            = "${alicloud_vpc.prod_vpc.id}"
  cidr_block        = "10.20.64.0/20"
  availability_zone = "cn-beijing-g"
}

resource "alicloud_vswitch" "vsw_prod_application_h" {
  name              = "生產(chǎn)-應(yīng)用-H"
  vpc_id            = "${alicloud_vpc.prod_vpc.id}"
  cidr_block        = "10.20.80.0/20"
  availability_zone = "cn-beijing-h"
}

resource "alicloud_vswitch" "vsw_prod_database_f" {
  name              = "生產(chǎn)-數(shù)據(jù)庫-F"
  vpc_id            = "${alicloud_vpc.prod_vpc.id}"
  cidr_block        = "10.20.96.0/20"
  availability_zone = "cn-beijing-f"
}

resource "alicloud_vswitch" "vsw_prod_database_g" {
  name              = "生產(chǎn)-數(shù)據(jù)庫-G"
  vpc_id            = "${alicloud_vpc.prod_vpc.id}"
  cidr_block        = "10.20.112.0/20"
  availability_zone = "cn-beijing-g"
}

resource "alicloud_vswitch" "vsw_prod_database_h" {
  name              = "生產(chǎn)-數(shù)據(jù)庫-H"
  vpc_id            = "${alicloud_vpc.prod_vpc.id}"
  cidr_block        = "10.20.128.0/20"
  availability_zone = "cn-beijing-h"
}

resource "alicloud_nat_gateway" "prod_nat_gateway" {
  vpc_id        = "${alicloud_vpc.prod_vpc.id}"
  specification = "Small"
  name          = "生產(chǎn)-NAT"

  # bandwidth_packages = [
  # {
  #   ip_count = 1
  #   bandwidth = 5
  #   # internet_charge_type = "PayByTraffic"
  # }
  # ]
  depends_on = [
    "alicloud_vswitch.vsw_prod_dmz_f",
    "alicloud_vswitch.vsw_prod_dmz_g",
    "alicloud_vswitch.vsw_prod_dmz_h",
    "alicloud_vswitch.vsw_prod_application_f",
    "alicloud_vswitch.vsw_prod_application_g",
    "alicloud_vswitch.vsw_prod_application_h",
    "alicloud_vswitch.vsw_prod_database_f",
    "alicloud_vswitch.vsw_prod_database_g",
    "alicloud_vswitch.vsw_prod_database_h",
 ]
}

resource "alicloud_hip" "prod_nat" {
  bandwidth = 30
}

resource "alicloud_hip" "prod_host_gcal-tnkt" {
  bandwidth =5
}

resource "alicloud_hip_association" "prod_nat" {
  allocation_id = "${alicloud_hip.prod_nat.id}"
  instance_id   = "${alicloudHnat_gateway.prod_nat_gateway.id}"
}

resource "alicloud_hip_association" "prod_host_gcal-tnkt" {
  allocation_id = "${alicloud_hip.prod_host_gcal-tnkt.id}"
  instance_id   = "${alicloudHinstance.gcal-tnkt.id}"
}

resource "alicloud_snat_hntry" "snat_prod_application_f" {
  snat_table_id     = "${alicloud_nat_gateway.prod_nat_gateway.snat_table_ids}"
  source_vswitch_id = "${alicloud_vswitch.vsw_prod_application_f.id}"
  snat_ip           = "${alicloud_hip.prod_nat.ip_address}"

resource "alicloud_snat_hntry" "snat_prod_application_g" {
  snat_table_id     = "H{alicloud_nat_gateway.prod_nat_gateway.snat_table_ids}"
  source_vswitch_id = "${alicloud_vswitch.vsw_prod_application_g.id}"
  snat_ip           = "${alicloud_hip.prod_nat.ip_address}"

resource "alicloud_snat_hntry" "snat_prod_application_h" {
  snat_table_id     = "H{alicloud_nat_gateway.prod_nat_gateway.snat_table_ids}"
  source_vswitch_id = "${alicloud_vswitch.vsw_prod_application_h.id}"
  snat_ip           = "${alicloud_hip.prod_nat.ip_addressH"

resource "alicloud_snat_hntry" "snat_prod_database_f" {
  snat_table_id     = "H{alicloud_nat_gateway.prod_nat_gateway.snat_table_ids}"
  source_vswitch_id = "${alicloud_vswitch.vsw_prod_database_f.id}"
  snat_ip           = "${alicloud_hip.prod_nat.ip_address}"

resource "alicloud_snat_hntry" "snat_prod_database_g" {
  snat_table_id     = "H{alicloud_nat_gateway.prod_nat_gateway.snat_table_ids}"
  source_vswitch_id = "${alicloud_vswitch.vsw_prod_database_g.id}"
  snat_ip           = "${alicloud_hip.prod_nat.ip_address}"

resource "alicloud_snat_hntry" "snat_prod_database_h" {
  snat_table_id     = "H{alicloud_nat_gateway.prodnat_gateway.snat_table_ids}"
  source_vswitch_id = "${alicloud_vswitch.vsw_prod_database_h.id}"
  snat_ip           = "${alicloud_hip.prod_nat.ip_address}"

resource "alicloud_snat_hntry" "snat_prod_dmz_f" {
  snat_table_id     = "H{alicloud_nat_gateway.prod_nat_gateway.snat_table_ids}"
  source_vswitch_id = "${alicloud_vswitch.vsw_prod_dmz_f.id}"
  snat_ip           = "${alicloud_hip.prod_nat.ip_address}"

resource "alicloud_snat_hntry" "snat_prod_dmz_g" {
  snat_table_id     = "H{alicloud_nat_gateway.prod_nat_gateway.snat_table_ids}"
  source_vswitch_id = "${alicloud_vswitch.vsw_prod_dmz_g.id}"
  snat_ip           = "${alicloud_hip.prod_nat.ip_address}"

resource "alicloud_snat_hntry" "snat_prod_dmz_h" {
  snat_table_id     = "H{alicloud_nat_gateway.prodnat_gateway.snat_table_ids}"
  source_vswitch_id = "${alicloud_vswitch.vsw_prod_dmz_h.id}"
  snat_ip           = "${alicloud_hip.prod_nat.ip_address}"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邻邮,一起剝皮案震驚了整個濱河市竣况,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筒严,老刑警劉巖丹泉,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸭蛙,居然都是意外死亡摹恨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門娶视,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晒哄,“玉大人,你說我怎么就攤上這事肪获∏蘖瑁” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵孝赫,是天一觀的道長较木。 經(jīng)常有香客問我,道長寒锚,這世上最難降的妖魔是什么劫映? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮刹前,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雌桑。我一直安慰自己喇喉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布校坑。 她就那樣靜靜地躺著拣技,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耍目。 梳的紋絲不亂的頭發(fā)上膏斤,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音邪驮,去河邊找鬼莫辨。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沮榜。 我是一名探鬼主播盘榨,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蟆融!你這毒婦竟也來了草巡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤型酥,失蹤者是張志新(化名)和其女友劉穎山憨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弥喉,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萍歉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了档桃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枪孩。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖藻肄,靈堂內(nèi)的尸體忽然破棺而出蔑舞,到底是詐尸還是另有隱情,我是刑警寧澤嘹屯,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布攻询,位于F島的核電站,受9級特大地震影響州弟,放射性物質(zhì)發(fā)生泄漏钧栖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一婆翔、第九天 我趴在偏房一處隱蔽的房頂上張望拯杠。 院中可真熱鬧,春花似錦啃奴、人聲如沸潭陪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽依溯。三九已至,卻和暖如春瘟则,著一層夾襖步出監(jiān)牢的瞬間黎炉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工醋拧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慷嗜,地道東北人淀弹。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像洪添,于是被迫代替她去往敵國和親垦页。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容