寫在前面~~
在這之前推一個在寫文章的時候找到的好資料尺借,點(diǎn)擊圖中的圖標(biāo)還有詳細(xì)的描述哦恰画。
https://lucid.app/lucidchart/703f6119-4838-4bbb-bc7e-be2fb75e89e5/view?page=eNbqbEM6f5NI#
1.VPC(Virtual Private Cloud)是什么
可以簡單地理解為一個VPC就是一個虛擬的數(shù)據(jù)中心,在這個虛擬數(shù)據(jù)中心內(nèi)我們可以創(chuàng)建不同的子網(wǎng)(公有網(wǎng)絡(luò)和私有網(wǎng)絡(luò))烈菌,搭建我們的網(wǎng)頁服務(wù)器费彼,應(yīng)用服務(wù)器削咆,數(shù)據(jù)庫服務(wù)器等等服務(wù)。
如下圖所示杖剪,互聯(lián)網(wǎng)的流量想進(jìn)到VPC里來時冻押,首先就需要經(jīng)過Internet Gateway,然后再通過與Internet Gateway綁定的路由表來轉(zhuǎn)發(fā)到對應(yīng)的子網(wǎng)(subnet)摘盆,每個子網(wǎng)有不同的NACL(Network Access Control List)翼雀,通過這些NACL來判斷流量是否被允許進(jìn)入,最后轉(zhuǎn)發(fā)到對應(yīng)的機(jī)器上孩擂。上述的一些概念我們會在下面一一介紹狼渊。
需要注意的是:
VPC內(nèi)可以創(chuàng)建多個子網(wǎng),一個VPC可以跨越多個可用區(qū)(AZ)
一個路由表可以對應(yīng)多個子網(wǎng),
每一個子網(wǎng)上可以分配自己規(guī)劃的IP地址狈邑,我們可以在選擇的子網(wǎng)上啟動EC2實(shí)例城须,一個子網(wǎng)只能在一個可用區(qū)(AZ)內(nèi)
創(chuàng)建一個Internet Gateway并且綁定到VPC上,讓EC2實(shí)例可以訪問互聯(lián)網(wǎng)
安全組(Security Group)用來針對實(shí)例
網(wǎng)絡(luò)控制列表(Network Access Control List)用來針對子網(wǎng)
-
安全組(Security Group)是有狀態(tài)的米苹,而網(wǎng)絡(luò)控制列表(Network Access Control List)是無狀態(tài)的
有狀態(tài):如果入向流量被允許糕伐,則出向的響應(yīng)流量會被自動允許
無狀態(tài):入向規(guī)則和出向規(guī)則需要分別單獨(dú)配置,互不影響
2.互聯(lián)網(wǎng)網(wǎng)關(guān)(Internet gateway)
互聯(lián)網(wǎng)網(wǎng)關(guān)是一種橫向擴(kuò)展蘸嘶、支持冗余且高度可用的 VPC 組件良瞧,可實(shí)現(xiàn) VPC 與互聯(lián)網(wǎng)之間的通信。
3.路由表(route table)
我們的 VPC 中的每個子網(wǎng)必須與一個路由表關(guān)聯(lián)训唱,而一個路由表可以關(guān)聯(lián)多個子網(wǎng)褥蚯,路由表用來控制子網(wǎng)的路由。
一個VPC下只能有一個主路由表况增,當(dāng)一個子網(wǎng)沒有顯式地與路由表關(guān)聯(lián)時赞庶,它默認(rèn)會隱式地與主路由表關(guān)聯(lián)。
路由表中的路由可以指向很多目標(biāo)澳骤,比如下圖歧强,我們可以指定0.0.0.0/0,目標(biāo)為Internet Gateway为肮,這表示所有指向互聯(lián)網(wǎng)的流量都轉(zhuǎn)發(fā)到Internet Gateway上摊册,當(dāng)然我們也可以指定其他的AWS 服務(wù),如下圖選項(xiàng)所示弥锄。
local表示一個用于在 VPC 內(nèi)部通信的本地路由丧靡,比如同一個VPC下且配置了這個路由表的EC2要跟另一臺EC2通信,就可以通過這個來轉(zhuǎn)發(fā)而不用走互聯(lián)網(wǎng)籽暇。
4.子網(wǎng)(subnet)
我們需要在指定的VPC下指定子網(wǎng)温治,如下圖,每個VPC有關(guān)聯(lián)的CIDR戒悠,意味著我們在這個VPC下熬荆,可以分配給該VPC下服務(wù)這個范圍內(nèi)的IP地址,這一部分算是計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)就不在此贅述绸狐,簡單的介紹可以看下面兩個鏈接卤恳。
需要注意的是VPC下的子網(wǎng)CIDR范圍不能超過VPC的CIDR大小,且子網(wǎng)的IPv4 塊的大小必須介于 /16 網(wǎng)絡(luò)掩碼和 /28 網(wǎng)絡(luò)掩碼之間寒矿。
4.1如何區(qū)分私有子網(wǎng)和公共子網(wǎng)突琳?
公共子網(wǎng)指的是該子網(wǎng)綁定的路由表中,0.0.0.0/0指向的目標(biāo)可以直接訪問互聯(lián)網(wǎng)符相,比如指向一個Internet gateway拆融,那么這個子網(wǎng)就是一個公共子網(wǎng)蠢琳。
相對的,0.0.0.0/0指向的目標(biāo)不能直接訪問互聯(lián)網(wǎng)镜豹,比如這個子網(wǎng)的路由表沒有配置0.0.0.0/0傲须,或者只能間接地訪問互聯(lián)網(wǎng),比如0.0.0.0/0指向的是NAT Gateway/Instance趟脂, 那么這個子網(wǎng)就是私有子網(wǎng)泰讽。
5.彈性IP(Elastic IP)
這個概念在EC2一章已經(jīng)介紹過啦,今天再來復(fù)習(xí)一遍昔期。
默認(rèn)情況下已卸,AWS分配的公網(wǎng)IP地址都是浮動的,這意味著如果關(guān)閉再啟動EC2實(shí)例镇眷,這個地址也會被釋放并且重新分配咬最。但是彈性IP地址是和我們的AWS賬號綁定的,除非手動釋放掉這個地址欠动,否則這個地址可以一直擁有這個賬號。
6.終端節(jié)點(diǎn)(Endpoints)
終端節(jié)點(diǎn)(Endpoints)是虛擬設(shè)備惑申,它是以能夠自動水平擴(kuò)展具伍、高度冗余、高度可用的VPC組件設(shè)計(jì)而成圈驼,不需要為它的帶寬限制和故障而有任何擔(dān)憂人芽。
接口終端節(jié)點(diǎn)由 PrivateLink 提供支持,它使用彈性網(wǎng)絡(luò)接口 (ENI) 作為發(fā)往服務(wù)的流量的入口點(diǎn)绩脆。 網(wǎng)關(guān)終端節(jié)點(diǎn)充當(dāng)路由表中路由的目標(biāo)萤厅,用于處理以服務(wù)為目標(biāo)的流量。 網(wǎng)關(guān)僅支持Amazon S3 和Dynamo DB
VPC終端節(jié)點(diǎn)能建立VPC和一些AWS服務(wù)之間的高速靴迫、私密的“專線”惕味。這個專線叫做PrivateLink,使用了這個技術(shù)玉锌,你無需再使用Internet網(wǎng)關(guān)名挥、NAT網(wǎng)關(guān)、VPN或AWS Direct Connect連接就可以訪問到一些AWS資源了主守!
舉個例子:VPC內(nèi)的服務(wù)(比如EC2)需要訪問S3的資源禀倔,只需要通過VPC終端節(jié)點(diǎn)和更改路由表,就可以通過AWS內(nèi)網(wǎng)訪問到這些服務(wù)参淫。在這個情況下救湖,VPC內(nèi)的服務(wù)(EC2)甚至不需要連接任何外網(wǎng)。如下圖所示
7.NAT網(wǎng)關(guān)/實(shí)例
NAT的全程是“Network Address Translation”涎才,中文解釋是“網(wǎng)絡(luò)地址轉(zhuǎn)換”鞋既,它可以讓整個機(jī)構(gòu)只使用一個公有的IP地址出現(xiàn)在Internet上。
NAT是一種把內(nèi)部私有地址(192.168.1.x,10.x.x.x等)轉(zhuǎn)換為Internet公有地址的協(xié)議涛救,它一定程度上解決了公網(wǎng)地址不足的問題畏邢。
7.1 NAT Instance
在實(shí)際的場景下,我們經(jīng)常需要將數(shù)據(jù)庫检吆、EC2放到私網(wǎng)舒萎,但是實(shí)例中的服務(wù)又必須要訪問互聯(lián)網(wǎng),這個時候NAT Instance就可以幫我們解決這個問題蹭沛,以私有子網(wǎng)內(nèi)的EC2請求互聯(lián)網(wǎng)為例臂寝,我們的請求會被先被路由表路由到公共子網(wǎng)內(nèi)的NAT Instance中,然后通過NAT Instance服務(wù)來訪問互聯(lián)網(wǎng)摊灭。
每項(xiàng) EC2 實(shí)例都會默認(rèn)執(zhí)行源/目標(biāo)檢查咆贬。這意味著實(shí)例必須為其發(fā)送或接收的數(shù)據(jù)流的源頭或目標(biāo)。但是帚呼,NAT 實(shí)例必須能夠在源或目標(biāo)并非其本身時發(fā)送和接收數(shù)據(jù)流掏缎。因此,創(chuàng)建NAT實(shí)例之后煤杀,一定要關(guān)閉源/目標(biāo)檢查(Source/Destination Check)
NAT實(shí)例需要創(chuàng)建在公有子網(wǎng)內(nèi)
私有子網(wǎng)需要創(chuàng)建一條默認(rèn)路由(0.0.0.0/0)眷蜈,指到NAT實(shí)例
NAT實(shí)例的瓶頸在于實(shí)例的大小,需要自己創(chuàng)建彈性伸縮組(Auto Scaling Group)沈自,自定義腳本來達(dá)到NAT實(shí)例的高可用(比如部署在多個可用區(qū))
-
我們更推薦使用NAT Gateway的形式來實(shí)現(xiàn)功能酌儒,如果我們真的想要使用NAT Instance,可以在社區(qū)AMI來搜索它枯途。
截屏2021-02-28 下午5.38.36
7.2 NAT Gateway
當(dāng)我們使用忌怎,就不用再創(chuàng)建NAT Instance了,也就沒有實(shí)例大小的煩惱酪夷,NAT Gateway會自動擴(kuò)容榴啸。
NAT Gateway需要關(guān)聯(lián)到公共子網(wǎng),它自動分配一個公網(wǎng)IP地址(EIP)
私有子網(wǎng)需要創(chuàng)建一條默認(rèn)路由(0.0.0.0/0)到NAT網(wǎng)關(guān)
不需要更改源/目標(biāo)檢查(Source/Destination Check)
7.3 堡壘機(jī)
堡壘機(jī)(Bastion Host)又叫做跳板機(jī)(Jump Box)捶索,主要用于運(yùn)維人員遠(yuǎn)程登陸服務(wù)器的集中管理插掂。運(yùn)維人員首先登陸到這臺堡壘機(jī)(公網(wǎng)),然后再通過堡壘機(jī)管理位于內(nèi)網(wǎng)的所有服務(wù)器腥例。
需要與NAT Instance區(qū)分辅甥,私有子網(wǎng)中的流量會發(fā)送到NAT Instance里,而堡壘機(jī)只是用來登錄燎竖、管理璃弄。
8. 對等連接(Peering)和Transit Gateway
8.1 Peering Connect
VPC對等連接(VPC Peering)是兩個VPC之間的連接,通過VPC Peering构回,我們就可以使用私有地址讓兩個VPC之間相互通信夏块,就像它們在同一個VPC內(nèi)一樣疏咐。
我們可以給自己、其他AWS賬號的VPC脐供、不同區(qū)域的VPC來建立Peering Connect.
如下圖所示浑塞,VPC A和VPC B之間建立了對等連接,那么VPC A中網(wǎng)段10.0.0.0/16內(nèi)的實(shí)例就可以和VPC B中網(wǎng)段172.31.0.0/16內(nèi)的實(shí)例進(jìn)行互相通信政己,仿佛它們是處于同一個內(nèi)網(wǎng)一樣酌壕。
如果兩個VPC出現(xiàn)了地址覆蓋/重復(fù),那么這兩個VPC不能做Peering
例如10.0.0.0/16的VPC與10.0.0.0/24的VPC是不能做對等連接的
-
VPC Peering沒有傳遞性
即如果VPC A與VPC B進(jìn)行了對等連接
VPC B與VPC C進(jìn)行了對等連接
VPC A是不能與VPC C進(jìn)行直接通信的歇由,必須再建立VPC A和VPC C的對等連接才可以
8.2 Transit Gateway
我們先來看一個情況卵牍,當(dāng)我們需要創(chuàng)建多個VPC之間的連接時,需要非常多的Peering沦泌,Transit Gateway就是為了解決這一個問題糊昙。
需要注意的是,Transit Gateway 需要保證所有的VPC在一個region下面谢谦。
通過Transit Gateway释牺,我們就可以簡單地來管理多個VPC啦。
9.Network ACLs與Security Group
在你的默認(rèn)VPC內(nèi)會有一個默認(rèn)的網(wǎng)絡(luò)ACL(NACL)回挽,它會允許所有入向和出向的流量
對于所有VPC內(nèi)的子網(wǎng)船侧,每一個子網(wǎng)都需要關(guān)聯(lián)一個網(wǎng)絡(luò)ACL。如果沒有關(guān)聯(lián)任何網(wǎng)絡(luò)ACL厅各,那么子網(wǎng)會關(guān)聯(lián)默認(rèn)的網(wǎng)絡(luò)ACL
一個網(wǎng)絡(luò)ACL可以關(guān)聯(lián)多個子網(wǎng),但一個子網(wǎng)只能關(guān)聯(lián)一個網(wǎng)絡(luò)ACL
網(wǎng)絡(luò)ACL包含了一系列(允許或拒絕)的規(guī)則预柒,網(wǎng)絡(luò)ACL會按順序執(zhí)行队塘,一旦匹配就結(jié)束,不會再繼續(xù)往下匹配
網(wǎng)絡(luò)ACL有入向和出向的規(guī)則宜鸯,每一條規(guī)則都可以配置允許或者拒絕, 還記得我們的安全組嗎憔古,它只支持顯式的允許。
-
網(wǎng)絡(luò)ACL是無狀態(tài)的(安全組是有狀態(tài)的)
被允許的入向流量的響應(yīng)流量必須被精準(zhǔn)的出向規(guī)則所允許(反之亦然)
一般至少需要允許臨時端口(TCP 1024-65535)
臨時端口
對客戶端來說淋袖,每次發(fā)起 TCP 連接請求時鸿市,都需要分配一個空閑的本地端口(臨時端口),去連接遠(yuǎn)端的服務(wù)器即碗。由于這個本地端口是獨(dú)占的焰情,所以客戶端最多只能發(fā)起 65535 個連接。
對服務(wù)器端來說剥懒,其通常監(jiān)聽在固定端口上(比如 80 端口)内舟,等待客戶端的連接。根據(jù)五元組(源IP地址初橘、目的IP地址验游、協(xié)議號充岛、源端口、目的端口)結(jié)構(gòu)耕蝉,我們知道崔梗,客戶端的 IP 和端口都是可變的。如果不考慮 IP 地址分類以及資源限制垒在,服務(wù)器端的理論最大連接數(shù)蒜魄,可以達(dá)到 2 的 48 次方(IP 為 32 位,端口號為 16 位)爪膊,遠(yuǎn)大于 65535权悟。
所以,綜合來看推盛,客戶端最大支持 65535 個連接峦阁,而服務(wù)器端可支持的連接數(shù)是海量的。