VPC Peering
VPC Peering là cách kết nối hai VPC riêng tư của AWS với nhau, tạo ra sự kết nối giống như chúng nằm trong cùng một mạng. Tuy nhiên, các VPC này không được phép có CIDR trùng nhau. Kết nối VPC Peering không thể chuyển tiếp cho các VPC khác mà không được kết nối trực tiếp với nó. Do đó, bạn phải thiết lập kết nối VPC Peering cho mỗi cặp VPC muốn giao tiếp với nhau. Cuối cùng, bạn cần cập nhật bảng định tuyến trong mỗi subnet của VPC để đảm bảo các instance EC2 trong các VPC có thể giao tiếp được với nhau.
Truy nhiên VPC Peering connection không có tính chất chuyển tiếp (transitive), nghĩa là nếu bạn muốn kết nối một VPC A với một VPC C thông qua một VPC B, thì bạn phải thiết lập các kết nối VPC Peering riêng lẻ giữa A với B và giữa B với C. Bạn cũng cần cập nhật bảng định tuyến (route tables) cho các subnet trong mỗi VPC để đảm bảo các EC2 instances có thể giao tiếp được với nhau.
Một điểm lưu ý khác đó là bạn có thể tạo kết nối VPC Peering giữa các VPC thuộc các tài khoản AWS/region khác nhau. Bạn cũng có thể tham chiếu đến một security group của một VPC đã được kết nối bằng VPC Peering (cả hai VPC phải thuộc cùng một khu vực địa lý), điều này giúp cho việc quản lý bảo mật trở nên dễ dàng hơn.
VPC Peering Hands On
Hiện tại tôi sẽ có 2 VPC trong 1 tài khoản của tôi, 2 VPC này sẽ CIDR khác nhau và dĩ nhiên nó không thể kết nối với nhau. Chúng ta sẽ sử dụng phương pháp VPC Peering để kết nối giữ 2 VPC này.
Và tạo thêm 1 instance cho default vpc, bạn có thể nhận ra ip private của nó là 172.31.36.159.
Và ip private của BastionHost bên DemoVPC đang là 10.0.0.72. Như vậy 2 VPC này có 2 subnet khác nhau đạt chuẩn để cấu hình VPC Peering.
Tiếp theo bạn hãy vào BastionHost và test webserver của chính nó, kết quả thành công.
Và chuyển sang Default VPCinstance curl về webserver của BastionHost, kết quả thất bại. Lý do là Default VPCinstance chưa thể kết nối về BastionHost.
Bây giờ chúng ta tạo kết nối giữa 2 VPC bằng cách nhấp vào Peering Connections › Create peering connection.
Đặt tên cho peering connection và ta cần chọn một local VPC, ở đây là DemoVPC và có CIDR là 10.0.0.0/16.
Phần Select another VPC to peer with bạn có thể lựa chọn VPC cùng 1 tài khoản AWS hoặc khác tài khoản AWS, tương tự region cũng vậy.
VPC ID (Accepter) được sử dụng để chỉ định VPC đích (accepting VPC) cho quá trình kết nối VPC Peering. Nó đại diện cho VPC mà bạn muốn kết nối tới từ VPC hiện tại. Bạn cần xác định VPC ID của VPC đích để hoàn thành quá trình kết nối.
Trong quá trình tạo kết nối VPC Peering, bạn sẽ cần chỉ định VPC ID của cả VPC yêu cầu (requester) và VPC đích (accepter). Sau khi kết nối được thiết lập, các tài nguyên trong các VPC khác nhau sẽ có thể giao tiếp với nhau như thể chúng nằm trong cùng một mạng.
Và sau khi thiết lập xong, bấm Create peering connection để tạo VPC Peering.
Bạn sẽ nhận được 1 thông báo như dưới, thông báo này thông báo rằng đã tạo thành công một kết nối VPC peering giữa hai VPC. Tên của kết nối là “DemoPeeringConnection” và mã kết nối là “pcx-06fadf245a3e0d5d3”. Thông báo này là thông báo yêu cầu, nghĩa là kết nối đã được yêu cầu và đang chờ đợi phản hồi từ VPC đối tác để hoàn tất kết nối. Nếu đầu bên VPC đích không xác nhận đồng ý kết nối thì trạng thái của nó sẽ là pending.
Vì bản thân 2 VPC nằm chung một tài khoản nên chúng ta có thể tự chấp nhận yêu cầu này.
Bạn sẽ xem được 1 số thông tin như dưới trước khi xác nhận.
Thông báo dưới cho biết quá trình thiết lập kết nối thành công. Bây giờ mọi lưu lượng có thể kết nối thông qua VPC Peering này và để hoàn tất bạn cần phải thiết lập bảng định tuyến cho nó.
Ở hình dưới mình đã đổi tên route table của default vpc sang DefaultVPCMainRouteTable để dễ phân biệt. Tiếp theo bạn vào subnet PublicRouteTable › Routes › Edit routes.
Thêm 1 route về 172.31.0.0/16 đi qua nexhop là VPC Peering như dưới.
Thiết lập xong nó sẽ giống như hình dưới, hãy bấm Save changes để lưu lại thay đổi này.
Kết quả của bảng định tuyến sau khi đã thay đổi.
Tiếp theo chúng ta sử đổi bảng định tuyến cho DefaultVPCMainRouteTable.
Lần này đích của chúng ta là 10.0.0.0/16 đi qua nexhop là VPC Peering như dưới.
Kết quả của bảng định tuyến sau khi đã thay đổi.
Và đây là kết quả.