1. Tổng quan
Cloud NAT là một công cụ mạnh mẽ: nhờ đó, các tải công việc của Compute Engine và Google Kubernetes Engine (GKE) có thể truy cập vào các tài nguyên trên Internet theo cách có thể mở rộng quy mô và an toàn mà không để lộ các tải công việc đang chạy trên các tài nguyên đó cho quyền truy cập bên ngoài bằng cách sử dụng IP bên ngoài.
Cloud NAT có thiết kế không dùng proxy, triển khai NAT trực tiếp ở lớp SDN Andromeda. Do đó, khối lượng công việc của bạn không bị ảnh hưởng đến hiệu suất và có thể dễ dàng mở rộng quy mô sang nhiều VM, khu vực và VPC.
Quy tắc NAT là một tiện ích cho Cloud NAT. Tính năng Quy tắc NAT trong Cloud NAT cho phép bạn tạo các quy tắc truy cập để xác định cách Cloud NAT được dùng để kết nối với Internet. Hiện tại, Quy tắc NAT hỗ trợ lựa chọn địa chỉ NAT nguồn dựa trên địa chỉ đích.
Nếu không có Quy tắc NAT, một VM đã bật Cloud NAT sẽ dùng cùng một bộ địa chỉ IP NAT để truy cập vào tất cả các địa chỉ Internet.
Đôi khi, trường hợp sử dụng NAT yêu cầu Cloud NAT sử dụng các địa chỉ IP nguồn khác nhau cho những đích đến cụ thể. Quy tắc NAT xác định một điều kiện so khớp và hành động tương ứng. Sau khi bạn chỉ định các quy tắc NAT, gói sẽ được so khớp với từng quy tắc NAT. Nếu một quy tắc được khớp, thì hành động tương ứng với kết quả khớp đó sẽ diễn ra.
Để biết thêm thông tin, vui lòng xem phần Tài liệu về Quy tắc NAT .
Kiến thức bạn sẽ học được
- Cách thiết lập một cổng NAT trên đám mây để chuẩn bị cho các quy tắc NAT.
- Cách thiết kế Quy tắc NAT bằng Ngôn ngữ diễn đạt thông thường (CEL).
- Cách tạo quy tắc NAT và đính kèm quy tắc đó vào một Cổng NAT.
- Cách kiểm thử quy tắc NAT từ một phiên bản.
- Cách cập nhật các quy tắc của Cổng NAT.
- Cách xoá các quy tắc NAT và quay lại hành vi mặc định của Cloud NAT.
Bạn cần có
- Kiến thức cơ bản về Google Compute Engine
- Kiến thức cơ bản về mạng và TCP/IP
- Kiến thức cơ bản về dòng lệnh Unix/Linux
- Bạn nên hoàn thành một chuyến tham quan về mạng trong GCP, chẳng hạn như phòng thí nghiệm Mạng trong Google Cloud.
- Hiểu kiến thức cơ bản về Cloud NAT.
2. Sử dụng Google Cloud Console và Cloud Shell
Để tương tác với GCP, chúng ta sẽ sử dụng cả Google Cloud Console và Cloud Shell trong suốt phòng thực hành này.
Bảng điều khiển Google Cloud
Bạn có thể truy cập vào Cloud Console tại https://console.cloud.google.com.

Thiết lập môi trường theo tốc độ của riêng bạn
- Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.



- Tên dự án là giá trị nhận dạng cá nhân của bạn cho dự án này. Miễn là tuân thủ quy ước đặt tên, bạn có thể sử dụng bất kỳ tên nào bạn muốn và có thể cập nhật tên đó bất cứ lúc nào.
- Mã dự án phải là duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi sau khi đặt). Bảng điều khiển Cloud sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là
PROJECT_ID). Vì vậy, nếu không thích mã này, bạn có thể tạo một mã ngẫu nhiên khác hoặc thử mã của riêng mình để xem mã đó có dùng được hay không. Sau đó, tên này sẽ "được cố định" sau khi dự án được tạo.
- Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.
Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" để biết cách tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.
Khởi động Cloud Shell
Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.
Trên Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn chỉ cần một trình duyệt là có thể thực hiện mọi thao tác trong phòng thí nghiệm này.
3. Thiết lập phòng thí nghiệm
Trong lớp học lập trình này, bạn sẽ sử dụng một Dự án và tạo 2 VPC có một mạng con trong mỗi VPC. Bạn sẽ đặt trước địa chỉ IP bên ngoài, sau đó tạo và định cấu hình một cổng Cloud NAT (với Cloud Router), hai phiên bản nhà sản xuất cũng như một phiên bản người dùng. Sau khi xác thực hành vi mặc định của Cloud NAT, bạn sẽ tạo các quy tắc tuỳ chỉnh cho Cloud NAT và xác thực hành vi của các quy tắc đó.
Tổng quan về cấu trúc mạng:

4. Dành riêng địa chỉ IP ngoài
Hãy dành riêng tất cả địa chỉ IP ngoài để sử dụng trong phòng thí nghiệm này. Điều này sẽ giúp bạn viết tất cả các quy tắc NAT và tường lửa có liên quan trong cả VPC của người dùng và nhà sản xuất.
Trong Cloud Shell:
gcloud compute addresses create nat-address-1 nat-address-2 nat-address-3 producer-address-1 producer-address-2 --region us-east4
Kết quả:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].
Điền sẵn các địa chỉ IP đã được đặt trước dưới dạng biến môi trường.
export natip1=`gcloud compute addresses list --filter name:nat-address-1 --format="get(address)"` export natip2=`gcloud compute addresses list --filter name:nat-address-2 --format="get(address)"` export natip3=`gcloud compute addresses list --filter name:nat-address-3 --format="get(address)"` export producerip1=`gcloud compute addresses list --filter name:producer-address-1 --format="get(address)"` export producerip2=`gcloud compute addresses list --filter name:producer-address-2 --format="get(address)"`
Không có đầu ra nào được mong đợi, nhưng để xác nhận rằng các địa chỉ đã được điền đúng cách. Hãy xuất các giá trị của tất cả các biến môi trường.
$ env | egrep '^(nat|producer)ip[1-3]'
Kết quả:
producerip1=<Actual Producer IP 1> producerip2=<Actual Producer IP 2> natip1=<NAT IP 1> natip2=<NAT IP 2> natip3=<NAT IP 3>
5. Thiết lập VPC và các phiên bản của nhà sản xuất.
Bây giờ, chúng ta sẽ tạo các tài nguyên cho tài nguyên của nhà sản xuất. Các phiên bản đang chạy trong VPC của nhà sản xuất sẽ cung cấp dịch vụ hướng đến Internet bằng cách sử dụng hai IP công khai "producer-address-1" và "producer-address-2" .
Trước tiên, hãy tạo VPC. Trong Cloud Shell:
gcloud compute networks create producer-vpc --subnet-mode custom
Kết quả:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/producer-vpc]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 producer-vpc CUSTOM REGIONAL Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running: $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE> $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp
Tiếp theo, hãy tạo mạng con trong us-east4. Trong Cloud Shell:
gcloud compute networks subnets create producer-e4 \ --network producer-vpc --range 10.0.0.0/24 --region us-east4
Kết quả:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/producer-e4]. NAME REGION NETWORK RANGE producer-e4 us-east4 producer-vpc 10.0.0.0/24
Tiếp theo, hãy tạo các quy tắc về tường lửa VPC để cho phép các địa chỉ IP NAT truy cập vào các phiên bản nhà sản xuất trên cổng 8080.
Đối với quy tắc đầu tiên, từ Cloud Shell:
gcloud compute firewall-rules create producer-allow-8080 \ --network producer-vpc --allow tcp:8080 \ --source-ranges $natip1,$natip2,$natip3
Kết quả:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/producer-allow-8080]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED producer-allow-8080 producer-vpc INGRESS 1000 tcp:8080 False
Bước tiếp theo là tạo 2 thực thể nhà sản xuất.
Các phiên bản nhà sản xuất sẽ chạy dịch vụ phản hồi IP trong một vùng chứa Docker có trên Docker Hub (mã nguồn có trong kho lưu trữ GitHub của tác giả dịch vụ.
Để nhanh chóng cung cấp các phiên bản có tất cả phần mềm cần thiết, chúng ta sẽ sử dụng tính năng Triển khai vùng chứa trên Compute Engine.
Để có thể viết các quy tắc NAT, chúng tôi sẽ cung cấp cho mỗi phiên bản một địa chỉ IP dành riêng khác nhau.
Tạo phiên bản đầu tiên. Trong Cloud Shell:
gcloud compute instances create-with-container producer-instance-1 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-1,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
Kết quả:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-1]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS producer-instance-1 us-east4-a e2-medium 10.0.0.2 <producer IP 1> RUNNING
Sau đó, hãy tạo phiên bản thứ hai. Trong Cloud Shell:
gcloud compute instances create-with-container producer-instance-2 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-2,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
Kết quả:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-2]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS producer-instance-2 us-east4-a e2-medium 10.0.0.3 <producer IP 2> RUNNING
6. Thiết lập VPC người dùng, Cloud NAT và phiên bản
Bây giờ bạn đã tạo dịch vụ nhà sản xuất, đã đến lúc tạo VPC người dùng và cổng Cloud NAT của VPC đó.
Sau khi tạo VPC và mạng con, chúng ta sẽ thêm một quy tắc tường lửa đơn giản để cho phép IAP cho dải IP nguồn TCP. Điều này sẽ cho phép chúng tôi SSH đến các phiên bản người dùng trực tiếp bằng gcloud.
Sau đó, chúng ta sẽ tạo một cổng NAT trên đám mây đơn giản ở chế độ phân bổ thủ công và địa chỉ được đặt trước "nat-address-1" được liên kết với cổng này. Trong các phần tiếp theo của lớp học lập trình, chúng ta sẽ cập nhật cấu hình của cổng để thêm các quy tắc tuỳ chỉnh. .
Trước tiên, hãy tạo VPC. Trong Cloud Shell:
gcloud compute networks create consumer-vpc --subnet-mode custom
Kết quả:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/consumer-vpc]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 consumer-vpc CUSTOM REGIONAL Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running: $ gcloud compute firewall-rules create <FIREWALL_NAME> --network consumer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE> $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp
Tiếp theo, hãy tạo một mạng con trong us-east4. Trong Cloud Shell:
gcloud compute networks subnets create consumer-e4 \ --network consumer-vpc --range 10.0.0.0/24 --region us-east4
Kết quả:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/consumer-e4]. NAME REGION NETWORK RANGE consumer-e4 us-east4 consumer-vpc 10.0.0.0/24
Tiếp theo, hãy tạo các quy tắc về tường lửa VPC để cho phép các địa chỉ trong dải IAP truy cập vào các phiên bản người dùng trên cổng 22.
Đối với quy tắc tường lửa đầu tiên, hãy chạy lệnh sau từ Cloud Shell:
gcloud compute firewall-rules create consumer-allow-iap \ --network consumer-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20
Kết quả:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/consumer-allow-iap]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED consumer-allow-iap consumer-vpc INGRESS 1000 tcp:22 False
Trước khi tạo một cổng NAT, trước tiên, chúng ta cần tạo một phiên bản Cloud Router (Bộ định tuyến đám mây) (chúng ta sử dụng số ASN riêng tư nhưng số này không liên quan đến các hoạt động của phòng thí nghiệm này). Trong Cloud Shell:
gcloud compute routers create consumer-cr \ --region=us-east4 --network=consumer-vpc \ --asn=65501
Kết quả:
Creating router [consumer-cr]...done. NAME REGION NETWORK consumer-cr us-east4 consumer-vpc
Sau đó, hãy tạo phiên bản cổng NAT. Trong Cloud Shell:
gcloud compute routers nats create consumer-nat-gw \
--router=consumer-cr \
--router-region=us-east4 \
--nat-all-subnet-ip-ranges \
--nat-external-ip-pool=nat-address-1
Kết quả:
Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.
Tạo phiên bản kiểm thử người tiêu dùng. Chúng tôi điền sẵn các IP của nhà sản xuất được đặt trước tại đây để có thể tham khảo chúng trong phiên bản sau này. Trong Cloud Shell:
gcloud compute instances create consumer-instance --zone=us-east4-a \ --machine-type=e2-medium --network-interface=subnet=consumer-e4,no-address \ --metadata=producer-service-ip1=$producerip1,producer-service-ip2=$producerip2
Kết quả:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/consumer-instance]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS consumer-instance us-east4-a e2-medium 10.0.0.2 RUNNING
7. Xác minh hành vi mặc định của Cloud NAT
Tại thời điểm này, phiên bản người dùng sử dụng hành vi Cloud NAT mặc định, tức là sử dụng cùng một IP dành riêng "nat-address-1" để giao tiếp với tất cả các địa chỉ bên ngoài.
Trước tiên, hãy xác thực hành vi này trước khi sử dụng tính năng Quy tắc NAT mới trong Cloud NAT.
SSH vào phiên bản người dùng. Trong Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
Lúc này, bạn sẽ ở trong trình bao của phiên bản.
Đầu ra mẫu (đầu ra đầy đủ bị cắt bớt để ngắn gọn)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
Từ phiên bản người dùng, trước tiên, hãy tìm nạp cả IP của nhà sản xuất và điền chúng dưới dạng các biến môi trường
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
Sau đó, hãy thử curl đến cả hai phiên bản nhà sản xuất và quan sát địa chỉ IP nguồn được trả về.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.136.8.83
Bạn sẽ thấy cùng một địa chỉ IP được trả về cho cả hai điểm cuối, bằng với giá trị của IP dành riêng bên ngoài "nat-address-1".
Tương tự, một lệnh curl đến bất kỳ dịch vụ phản xạ IP ngoài nào cũng phải cho thấy cùng một IP, ví dụ:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
Tạm thời thoát khỏi phiên SSH của phiên bản. Chúng ta sẽ SSH lại sau khi định cấu hình Quy tắc NAT.
8. Tạo quy tắc Cloud NAT
Các quy tắc NAT được viết bằng cú pháp Ngôn ngữ biểu thức chung. Để biết thêm thông tin về ngôn ngữ biểu thức quy tắc, hãy xem phần Ngôn ngữ biểu thức quy tắc.
Bạn cũng có thể thêm quy tắc NAT vào một cổng NAT hiện có bằng cách sử dụng các lệnh gcloud. Chúng ta sẽ tìm hiểu cả hai lựa chọn để tạo quy tắc Cloud NAT.
Trước tiên, hãy tạo một tệp YAML quy tắc NAT.
Trong Cloud Shell:
export projectid=`gcloud config get-value project`
cat <<EOF >natrulesfile.txt
rules:
- ruleNumber: 100
match: destination.ip == '$producerip2'
action:
sourceNatActiveIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-2
EOF
Sau đó, hãy cập nhật cổng NAT hiện có bằng tệp quy tắc này. Trong Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
Bạn sẽ thấy kết quả sau :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Xác thực rằng bạn đã định cấu hình thành công quy tắc. Trong Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4
Bạn sẽ thấy kết quả sau :
RULE_NUMBER MATCH 100 destination.ip == '35.192.142.134'
Hãy thử tạo lại quy tắc tương tự chỉ bằng các lệnh gcloud. Trước tiên, hãy xoá quy tắc hiện có. Trong Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
Bạn sẽ thấy kết quả sau :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
Sau đó, hãy tạo lại quy tắc bằng lệnh gcloud này. Trong Cloud Shell:
gcloud alpha compute routers nats rules create 100 \ --match='destination.ip == "'$producerip2'"' \ --source-nat-active-ips=nat-address-2 --nat=consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
Bạn sẽ thấy kết quả sau :
Creating Rule [100] in NAT [consumer-nat-gw]...done.
Để xác thực rằng quy tắc đã được tạo thành công, hãy lặp lại lệnh trước đó. Lần này, chúng ta sẽ thêm công tắc định dạng YAML để xem toàn bộ thông tin chi tiết về quy tắc.
Trong Cloud Shell:
gcloud alpha compute routers nats rules list\ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
Bạn sẽ thấy kết quả sau :
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/<Project-ID>/regions/us-east4/addresses/nat-address-2 match: destination.ip == <actual IP for producer-IP 2> ruleNumber: 100
Cuối cùng, hãy lưu ý rằng hiện cả địa chỉ bên ngoài "nat-address1" và "nat-address-2" đều hiển thị là "IN_USE". Để xem thông tin đó, hãy chạy lệnh sau trong Cloud Shell:
$ gcloud compute addresses list
Bạn sẽ thấy kết quả sau (Địa chỉ IP thực tế phải khớp với địa chỉ bạn đã đặt trước) :
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS nat-address-1 34.136.8.83 EXTERNAL us-east4 IN_USE nat-address-2 34.70.137.35 EXTERNAL us-east4 IN_USE nat-address-3 34.135.103.88 EXTERNAL us-east4 RESERVED producer-address-1 34.66.0.105 EXTERNAL us-east4 IN_USE producer-address-2 35.192.142.134 EXTERNAL us-east4 IN_USE
9. Xác minh hành vi của quy tắc NAT trên đám mây
Tại thời điểm này, phiên bản người dùng sẽ sử dụng Quy tắc Cloud NAT đã tạo để sử dụng nat-address-2 nhằm giao tiếp với producer-address-2.
Hãy xác thực hành vi này. SSH vào phiên bản người dùng. Trong Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
Lúc này, bạn sẽ ở trong trình bao của phiên bản.
Đầu ra mẫu (đầu ra đầy đủ bị cắt bớt để ngắn gọn)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
Từ phiên bản người dùng, trước tiên, hãy tìm nạp cả IP của nhà sản xuất và điền chúng dưới dạng các biến môi trường
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
Sau đó, hãy thử curl đến cả hai phiên bản nhà sản xuất và quan sát địa chỉ IP nguồn được trả về.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.70.137.35
Giờ đây, bạn sẽ thấy một địa chỉ IP khác được trả về cho cả hai điểm cuối, địa chỉ IP đầu tiên phải giống với hành vi mặc định. Địa chỉ IP thứ hai phải bằng "nat-address-2" sau khi thêm quy tắc NAT mới.
Một lệnh curl đến bất kỳ dịch vụ phản xạ IP ngoài nào vẫn sẽ cho thấy cùng một IP như hành vi mặc định, ví dụ:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
Thoát phiên SSH của phiên bản này. Chúng ta sẽ SSH quay lại để kiểm tra tính năng chuyển hướng địa chỉ.
10. Cập nhật và xoá các quy tắc NAT đám mây
Bạn có thể cập nhật các quy tắc Cloud NAT hiện có. Ví dụ: bạn có thể liên kết địa chỉ IP mới và xoá các địa chỉ IP hiện có được liên kết với các quy tắc hiện có.
Hãy cập nhật tệp Quy tắc NAT như sau
Trong Cloud Shell:
export projectid=`gcloud config get-value project`
cat <<EOF >natrulesfile.txt
rules:
- ruleNumber: 100
match: destination.ip == '$producerip2'
action:
sourceNatDrainIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-2
sourceNatActiveIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-3
EOF
Tệp mới này sẽ đặt "nat-address-2" ở trạng thái đã xả. Thêm "nat-address-3" ở trạng thái hoạt động. Điều này sẽ cho phép các kết nối hiện có sử dụng nat-address-2 để kết thúc một cách suôn sẻ, trong khi chỉ tạo các kết nối mới bằng nat-address-3.
Sau đó, hãy cập nhật cổng NAT hiện có bằng tệp quy tắc này. Trong Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
Bạn sẽ thấy kết quả sau :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Xác thực rằng bạn đã định cấu hình thành công quy tắc. Trong Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
Bạn sẽ thấy kết quả sau :
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-3 sourceNatDrainIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-2 match: destination.ip == '35.192.142.134' ruleNumber: 100
Lưu ý cách "nat-address-2" hiện đã được chuyển sang trạng thái đã xả. Bạn có thể tự mình xác thực rằng các kết nối mới từ VPC của người dùng hiện đang sử dụng IP NAT chính xác.
Cuối cùng, để xoá các quy tắc NAT khỏi cổng Cloud NAT và quay lại hành vi mặc định. Bạn có thể sử dụng lệnh gcloud sau. Trong Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
Bạn sẽ thấy kết quả sau :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
Để xác minh rằng không còn quy tắc NAT nào, hãy sử dụng lệnh mô tả cổng NAT
gcloud alpha compute routers nats describe consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
Bạn sẽ thấy kết quả sau :
enableEndpointIndependentMapping: false name: consumer-nat-gw natIpAllocateOption: MANUAL_ONLY natIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-1 sourceSubnetworkIpRangesToNat: ALL_SUBNETWORKS_ALL_IP_RANGES
Lưu ý rằng không có phần "rules:" trong tệp YAML đầu ra. Cho biết chưa định cấu hình Quy tắc NAT.
11. Các bước dọn dẹp
Để tránh bị tính phí định kỳ, bạn nên xoá tất cả tài nguyên liên quan đến lớp học lập trình này.
Trước tiên, hãy xoá tất cả các phiên bản.
Trong Cloud Shell:
gcloud compute instances delete consumer-instance \ producer-instance-1 producer-instance-2 \ --zone us-east4-a --quiet
Kết quả đầu ra dự kiến :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/consumer-instance]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-2].
Tiếp theo, hãy xoá Bộ định tuyến đám mây. Trong Cloud Shell:
gcloud compute routers delete consumer-cr \ --region us-east4 --quiet
Bạn sẽ thấy kết quả sau :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].
Giải phóng tất cả IP ngoài. Trong Cloud Shell:
gcloud compute addresses delete nat-address-1 \ nat-address-2 nat-address-3 producer-address-1 \ producer-address-2 --region us-east4 --quiet
Bạn sẽ thấy kết quả sau :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].
Xoá các quy tắc tường lửa VPC. Trong Cloud Shell:
gcloud compute firewall-rules delete consumer-allow-iap \ producer-allow-8080 --quiet
Bạn sẽ thấy kết quả sau :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/consumer-allow-iap]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/producer-allow-8080].
Xoá mạng con. Trong Cloud Shell:
gcloud compute networks subnets delete consumer-e4 \ producer-e4 --region=us-east4 --quiet
Bạn sẽ thấy kết quả sau :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/consumer-e4]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/producer-e4].
Cuối cùng, hãy xoá các VPC. Trong Cloud Shell:
gcloud compute networks delete consumer-vpc \ producer-vpc --quiet
Bạn sẽ thấy kết quả sau :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/consumer-vpc]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/producer-vpc].
12. Xin chúc mừng!
Bạn đã hoàn tất bài thực hành về quy tắc NAT trên đám mây!
Nội dung bạn đã học
- Cách thiết lập một cổng NAT trên đám mây để chuẩn bị cho các quy tắc NAT.
- Cách thiết kế Quy tắc NAT bằng Ngôn ngữ diễn đạt thông thường (CEL).
- Cách tạo quy tắc NAT và đính kèm quy tắc đó vào một Cổng NAT.
- Cách kiểm thử quy tắc NAT từ một phiên bản.
- Cách cập nhật các quy tắc của Cổng NAT.
- Cách xoá các quy tắc NAT và quay lại hành vi mặc định của Cloud NAT.
Các bước tiếp theo
- Thử nghiệm tạo các quy tắc NAT phức tạp hơn, chẳng hạn như ví dụ này
- Khám phá các địa chỉ IP NAT đang cạn kiệt và quan sát tác động của kết nối.
- Tìm hiểu thêm về Mạng trên Google Cloud Platform
©Google, Inc. hoặc các đơn vị liên kết của Google. Bảo lưu mọi quyền. Không được phân phối.