4. Virtual Private Cloud (VPC)



Ở bài trước, mình đã trình bày về hạ tầng toàn cầu của AWS. Tiếp theo, như đã đề cập, ta sẽ tìm hiểu về dịch vụ quan trọng bậc nhất của AWS: Virtual Private Cloud (VPC). Nhưng trước đó, hãy xem chúng ta kết nối tới các dịch vụ AWS như thế nào.

Trong bài này:

1. Kết nối tới AWS

Dưới góc độ kết nối mạng, có thể phân loại các dịch vụ AWS trong 2 vùng chính:

Public vs Private AWS Network

1.1. Public Network

Đây là vùng mạng có kết nối với Internet. Các dịch vụ trong vùng này có public endpoint và DNS, có thể truy cập từ Internet. Ví dụ: S3 (lưu trữ), API Gateway (quản lý API), CloudFront (CDN), sẽ được trình bày trong các bài sau.

Lưu ý rằng, mặc dù gọi là “public” (mang ý nghĩa có kết nối với mạng Internet công khai), nhưng chỉ các danh tính được cấp quyền mới có thể truy cập (xem lại bài IAM).

1.2. Private Network

Đây là vùng mạng chính thường được sử dụng trong AWS, bao gồm một hoặc nhiều mạng nội bộ ảo của AWS, gọi là VPC (Virtual Private Cloud).

Mặc định, một VPC không có bất cứ kết nối gì với các VPC khác (kể cả của cùng một tài khoản và trong cùng một vùng). Chúng cũng hoàn toàn cô lập với bên ngoài, trừ khi được gán thêm Internet Gateway và cấu hình định tuyến phù hợp để kết nối với các dịch vụ trong Public Network và Internet. Nó giống như việc bạn có thể thiết lập một mạng nội bộ kết nối các thiết bị tại nhà, nhưng để kết nối với Internet, bạn cần Modem của nhà cung cấp dịch vụ Internet, và Router để gán địa chỉ IP và định tuyến đến các thiết bị.

Các dịch vụ trong một VPC chỉ có thể truy cập từ các dịch vụ khác trong cùng VPC, trong một mạng khác kết nối với VPC đó (có thể là một VPC khác hoặc từ mạng on-premise kết nối với VPC bằng VPN hoặc AWS Direct Connect).

2. Các khái niệm liên quan về mạng máy tính

Vậy là ta đã biết vị trí của VPC trong bức tranh tổng thể, trước khi đi vào chi tiết hơn, hãy cùng ôn lại một số khái niệm mạng máy tính quan trọng có liên quan.

2.1. CIDR

CIDR (Classless Inter-Domain Routing, tạm dịch “Định tuyến liên miền không phân lớp”, phiên âm /ˈsaɪdər, ˈsɪ-/, việt hoá đọc là sai-đơ) là một phương pháp phân phối địa chỉ IP hiệu quả.

Công thức tính số địa chỉ IP trong một cụm CIDR là: \(2^{32 - \text{prefix}}\)

Với prefix là số sau dấu /. Ví dụ, với CIDR sau:

172.31.0.0/8

Phần trước dấu / (tức 172.31.0.0) là địa chỉ bắt đầu của cụm CIDR. Mỗi chữ số trong địa chỉ IP gồm 8 bit, có giá trị từ 0 đến 255, cách nhau bằng dấu chấm. Địa chỉ IP gồm 4 phần như vậy, tổng cộng 32 bit.

Phần /8 gọi là tiền tố (prefix), cho biết số bit cố định từ bên trái của địa chỉ IP, phần còn lại có thể thay đổi để tạo ra các địa chỉ IP khác trong cụm CIDR đó. Trong ví dụ này, /8 nghĩa là 8 bit đầu tiên cố định (172 = 10101100), còn lại (32 - 8 = 24) bit có thể thay đổi (từ 0.0.0 đến 255.255.255, thay toàn bộ bit 0 bằng bit 1).

24 bit có thể thay đổi, mỗi bit có hai giá trị khả dĩ là 0 hoặc 1, nên tổng số địa chỉ IP trong cụm CIDR này là 2^24 = 16 777 216 địa chỉ IP, từ 172.0.0.0 đến 172.255.255.255.

Dựa vào tiền tố, ta có thể xác định kích thước của cụm CIDR. Tiền tố càng lớn, số bit cố định càng nhiều, cũng tức là số bit có thể thay đổi càng ít, dẫn đến số địa chỉ IP càng ít.

2.2. Subnet

Subnet (subnetwork, tạm dịch “mạng con”) là một phân đoạn mạng nhỏ hơn được chia từ một mạng lớn hơn. Mỗi subnet được xác định bởi một cụm CIDR con (sub-CIDR) của cụm CIDR lớn hơn. Ví dụ, từ cụm CIDR 172.31.0.0/16, nếu muốn chia thành các subnet nhỏ hơn với kích thước mỗi subnet là 256 địa chỉ IP, tương ứng với CIDR con có tiền tố là /24 (vì 256 = 2^8, ta cần 8 bit thay đổi, tức 32 - 8 = 24 bit cố định), ta có thể tạo ra tối đa 2^(24-16) = 256 subnet con như sau:

  • Subnet 1: 172.31.0.0/24
  • Subnet 2: 172.31.1.0/24
  • Subnet 3: 172.31.2.0/24
  • Subnet 256: 172.31.255.0/24

Mỗi subnet sẽ có 256 địa chỉ IP khả dụng (từ 172.31.x.0 đến 172.31.x.255).

Giờ hãy quay lại tìm hiểu kỹ hơn về VPC.

3. Virtual Private Cloud (VPC)

VPC là dịch vụ mạng ảo trong AWS. Mỗi VPC thuộc về một tài khoản AWS và một Region, tách biệt khỏi môi trường bên ngoài trừ khi được cấu hình cho phép kết nối. Đây là dịch vụ có mức độ phục hồi Region Resilience.

3.1. VPC Mặc định

Trong mỗi Region ở mỗi tài khoản AWS, có sẵn một VPC mặc định (default VPC), có thể xoá và tạo lại. CIDR của VPC mặc định luôn luôn là 172.31.0.0/16, giống nhau ở tất cả các tài khoản và tất cả các Region.

Nếu bạn thắc mắc liệu có thể có xung đột địa chỉ IP không thì câu trả lời là không, vì như đã đề cập phía trên, các VPC hoàn toàn cô lập với nhau, VPC mặc định cũng vậy. Điều này giống với kết nối mạng nội bộ trong gia đình thường có dải CIDR 192.168.1.0/24. Vấn đề chỉ phát sinh khi kết nối 2 VPC với nhau, khi này bạn cần đảm bảo không có sự trùng lặp CIDR giữa các VPC được kết nối.

Cũng vì lý do này, ta không thể kết nối 2 VPC mặc định với nhau! Khi đó, cần tự thiết kế VPC với CIDR riêng biệt, gọi là VPC tùy chỉnh (custom VPC), sẽ được trình bày trong bài sau. AWS đã cấu hình sẵn VPC mặc định với public subnet, Internet Gateway, bảng định tuyến (route table), Security Group và Network access control list (ACL), để người dùng có thể nhanh chóng bắt đầu với các ứng dụng đơn giản.

Hình dưới đây minh hoạ cấu trúc của VPC mặc định, ví dụ ở Region us-east-2.

Default VPC

Region này gồm 3 AZ: us-east-2a, us-east-2b, us-east-2c. Trong VPC mặc định, AWS tạo sẵn một public subnet trong mỗi AZ, với CIDR con /20, chia CIDR lớn /16 của VPC mặc định thành 3 subnet con:

  • Subnet 1: 172.31.0.0/20
  • Subnet 2: 172.31.16.0/20
  • Subnet 3: 172.31.32.0/20

3.2. VPC Subnet

Phía trên ta đã đề cập đến subnet trong VPC mặc định. Hãy tìm hiểu tổng quát hơn về subnet trong VPC.

Mỗi VPC (mặc định hoặc tùy chỉnh) có thể được chia thành nhiều subnet. Mỗi subnet thuộc về một AZ trong Region của VPC đó, và có mức độ phục hồi AZ Resilience.

CIDR của mỗi subnet là tập con trong CIDR của VPC, nhưng không thể trùng lặp với CIDR của subnet khác trong cùng VPC, do các subnet trong cùng VPC có thể giao tiếp với nhau, nên cần dùng CIDR con khác nhau để tránh xung đột địa chỉ IP.

Trong mỗi subnet, có 5 IP không thể sử dụng, là 4 IP đầu tiên và IP cuối cùng. Xét ví dụ Subnet 172.31.0.0/20, ta không thể gán các IP sau cho dịch vụ nào:

  1. IP đầu tiên 172.31.0.0, thuật ngữ gọi là Network Address. IP này đại diện cho subnet
  2. IP thứ hai 172.31.0.1 (Network + 1): IP này được gán cho bộ định tuyến (Router) của VPC.
  3. IP thứ ba 172.31.0.2 (Network + 2): IP này dùng cho DNS Server, phân giải DNS cho các tài nguyên trong subnet.
  4. IP thứ tư 172.31.0.3 (Network + 3): IP này được AWS giữ trước cho tương lai, nếu cần triển khai chức năng nào khác.
  5. IP cuối cùng 172.31.0.255: là địa chỉ broadcast (để gửi dữ liệu đến tất cả IP trong cùng subnet mà không cần chỉ định IP cụ thể). Dù AWS không hỗ trợ địa chỉ broadcast, IP cuối cùng này cũng không thể sử dụng.

Khi tạo subnet, ta có thể lựa chọn “Auto Assign Public IPv4” để subnet này là public, tức các tài nguyên bên trong được tự động gán địa chỉ IP công cộng, có thể truy cập được từ Internet (tất nhiên là nếu đủ quyền hạn). Ngược lại, bỏ chọn sẽ đặt subnet này thành private, giao tiếp nội bộ bên trong subnet (và VPC). Nếu cần IPv6, có thể chọn Auto Assign IPv6.

Tài liệu tham khảo

  1. VPC CIDR
  2. VPC Mặc định
  3. VPC Subnet

Trong bài tiếp theo, hãy tìm hiểu cách thiết kế và tự tạo VPC cho một ứng dụng đa tầng.

Nếu có câu hỏi, bạn có thể nhắn mình trên fanpage hoặc group. Cảm ơn bạn.