1. Tổng quan
Cloud NAT là một công cụ mạnh mẽ: với công cụ này, khối lượng công việc của Compute Engine và Google Kubernetes Engine (GKE) có thể truy cập vào tài nguyên Internet một cách bảo mật và có thể mở rộng mà không làm lộ trình truy cập bên ngoài bằng IP bên ngoài.
Cloud NAT có thiết kế không có proxy, triển khai NAT trực tiếp tại lớp Andomda SDN. Do đó, khối lượng công việc của bạn không bị ảnh hưởng về hiệu suất và có thể dễ dàng mở rộng sang nhiều máy ảo, khu vực và VPC.
Quy tắc NAT là một phần mở rộng của 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 dùng Cloud NAT để kết nố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áy ảo có bật Cloud NAT sẽ sử dụng cùng một nhóm địa chỉ IP NAT để truy cập 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 các đích đến cụ thể. Quy tắc NAT xác định việc so khớp và hành động tương ứng. Sau khi bạn chỉ định 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 so khớp thì hành động tương ứng với kết quả trùng 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 cổng vào Cloud NAT để 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 các quy tắc này vào NAT Gateway.
- Cách kiểm thử Quy tắc NAT từ một thực thể.
- Cách cập nhật các quy tắc của NAT Gateway.
- Cách xoá các quy tắc NAT và quay về hành vi Cloud NAT mặc định.
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 sẽ thấy hữu ích khi hoàn thành phần hướng dẫn về kết nối mạng trong GCP, chẳng hạn như phòng thí nghiệm Kết nối mạng trong Google Cloud.
- Hiểu biết về 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 phòng thí nghiệm 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 tiến độ riêng
- Đăng nhập vào Cloud Console rồi tạo dự án mới hoặc sử dụng lại 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 theo quy ước đặt tên, bạn có thể sử dụng bất kỳ thứ gì bạn muốn và có thể cập nhật thông tin đó bất cứ lúc nào.
- Mã dự án phải là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (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 bạn không quan tâm đến sản phẩm đó là gì. 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 (và mã này thường được xác định là
PROJECT_ID
). Vì vậy, nếu không thích, bạn có thể tạo một mã ngẫu nhiên khác hoặc bạn có thể thử mã của riêng mình để xem có mã này chưa. Sau đó, video sẽ được "đóng băng" sau khi tạo dự án.
- Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.
Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" sẽ tư vấn cho bạn cách tắt tài nguyên để bạn không phải chịu thanh toán ngoài 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í 300 USD.
Khởi động Cloud Shell
Mặc dù bạn 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 trong Đám mây.
Trong Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell ở thanh công cụ trên cùng bên phải:
Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:
Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện tất cả công việc trong phòng thí nghiệm này chỉ bằng một trình duyệt.
3. Thiết lập phòng thí nghiệm
Đối với phòng thí nghiệm này, bạn sẽ sử dụng một Dự án rồi tạo 2 VPC, mỗi VPC có một mạng con. Bạn sẽ đặt trước địa chỉ IP bên ngoài, sau đó tạo và định cấu hình cổng vào Cloud NAT (với Cloud Router), 2 thực thể thực thể sản xuất và 1 thực thể của người dùng. Sau khi xác thực hành vi Cloud NAT mặc định, bạn sẽ tạo các quy tắc tuỳ chỉnh 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. Đặt trước địa chỉ IP bên ngoài
Hãy giữ lại tất cả địa chỉ IP bên ngoài sẽ được sử dụng trong phòng thí nghiệm này. Việc 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 VPC của cả người tiêu dùng và nhà sản xuất.
Trên 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 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)"`
Kết quả dự kiến sẽ không xuất hiện, nhưng cần xác nhận rằng các địa chỉ đã được điền đúng cách. Hãy nhập giá trị của tất 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 tài nguyên cho tài nguyên nhà sản xuất. Các thực thể chạy trong VPC của nhà sản xuất sẽ cung cấp dịch vụ kết nối Internet bằng cách sử dụng 2 IP công khai "nhà sản xuất-địa chỉ-1" và "nhà sản xuất-địa chỉ-2" của Google.
Trước tiên, hãy tạo VPC. Trên 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. Trên 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 tường lửa VPC để cho phép địa chỉ IP NAT kết nối với thực thể sản xuất trên cổng 8080.
Đối với quy tắc đầu tiên của 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ể thực thể sản xuất.
Các thực thể nhà sản xuất sẽ chạy dịch vụ lặp lạ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 bằng tất cả phần mềm cần thiết, chúng tôi 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 ta sẽ cung cấp cho mỗi thực thể một địa chỉ IP dành riêng khác nhau.
Tạo thực thể đầu tiên. Trên 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 đó, tạo thực thể thứ hai. Trên 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 của người tiêu dùng, Cloud NAT và phiên bản
Giờ đây, khi bạn đã tạo dịch vụ nhà sản xuất, đã đến lúc tạo VPC dành cho người tiêu dùng và cổng Cloud NAT.
Sau khi tạo VPC và mạng con, chúng ta sẽ thêm một quy tắc tường lửa vào đơn giản để cho phép IAP cho dải IP nguồn TCP. Việc này sẽ cho phép chúng tôi kết nối SSH trực tiếp đến các thực thể người dùng thông qua gcloud.
Sau đó chúng ta sẽ tạo một cổng Cloud NAT đơn giản ở chế độ phân bổ thủ công và địa chỉ dành riêng "nat-address-1" liên kết với cuộc trò chuyện đó. 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 vào để thêm các quy tắc tuỳ chỉnh. .
Trước tiên, hãy tạo VPC. Trên 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. Trên 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 một quy tắc tường lửa VPC để cho phép các địa chỉ dải IAP kết nối đến các thực thể người tiêu 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 đây 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 cổng NAT, trước tiên chúng ta cần tạo một thực thể Cloud Router (chúng ta sử dụng số ASN riêng tư nhưng số đó không liên quan đến các hoạt động của phòng thí nghiệm này). Trên 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 đó, tạo phiên bản cổng NAT. Trên 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 thực thể kiểm thử cho người dùng. Chúng tôi điền sẵn các IP nhà sản xuất được đặt trước vào đây để có thể tham chiếu đến chúng trong thực thể sau này. Trên 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 Cloud NAT mặc định
Tại thời điểm này, thực thể người tiêu dùng sử dụng hành vi Cloud NAT mặc định sử dụng cùng một IP dành riêng "nat-address-1" để giao tiếp với tất 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 của người dùng. Trên Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
Bây giờ, bạn sẽ ở trong môi trường shell thực thể.
Kết quả mẫu (toàn bộ kết quả được cắt ngắn để rút ngắ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:~$
Trong thực thể của người dùng, trước tiên, hãy tìm nạp cả hai IP của nhà sản xuất và điền chúng dưới dạng 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ử cuộn cả hai thực thể thực thể 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 curl cho mọi dịch vụ phản ánh IP bên ngoài 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 thực thể, chúng ta sẽ kết nối lại SSH 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 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ác lệnh gcloud. Chúng ta sẽ khám phá cả hai cách để tạo quy tắc Cloud NAT.
Trước tiên, hãy tạo tệp YAML quy tắc NAT.
Trên 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ó của chúng ta bằng cách sử dụng tệp quy tắc này. Trên Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \ --router=consumer-cr \ --rules=natrulesfile.txt \ --router-region=us-east4
Bạn sẽ nhận được kết quả sau đây :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Xác thực rằng quy tắc đã được định cấu hình thành công. Trên Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4
Bạn sẽ nhận được kết quả sau đây :
RULE_NUMBER MATCH 100 destination.ip == '35.192.142.134'
Hãy thử tạo lại cùng một quy tắc chỉ bằng các lệnh gcloud. Trước tiên, hãy xoá quy tắc hiện tại. Trên 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ẽ nhận được kết quả sau đây :
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. Trên 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ẽ nhận được kết quả sau đây :
Creating Rule [100] in NAT [consumer-nat-gw]...done.
Một lần nữa để 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 nút chuyển định dạng YAML để xem toàn bộ thông tin chi tiết của quy tắc.
Trên 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ẽ nhận được kết quả sau đây :
--- 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, lưu ý rằng cả hai đều "nat-address1" và "nat-address-2" địa chỉ bên ngoài hiển thị là "IN_USE". Để kiểm tra điều đó, hãy chạy lệnh này từ Cloud Shell:
$ gcloud compute addresses list
Bạn sẽ nhận được kết quả như sau (Địa chỉ IP thực tế phải khớp với các địa chỉ mà 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 Cloud NAT
Tại thời điểm này, thực thể người tiêu dùng phải sử dụng Quy tắc Cloud NAT đã tạo để sử dụng nat-address-2 cho việc giao tiếp với địa chỉ nhà sản xuất-2.
Hãy xác thực hành vi này. SSH vào phiên bản của người dùng. Trên Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
Bây giờ, bạn sẽ ở trong môi trường shell thực thể.
Kết quả mẫu (toàn bộ kết quả được cắt ngắn để rút ngắ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:~$
Trong thực thể của người dùng, trước tiên, hãy tìm nạp cả hai IP của nhà sản xuất và điền chúng dưới dạng 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ử cuộn cả hai thực thể thực thể 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
Bây giờ, 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 curl cho mọi dịch vụ phản ánh IP bên ngoài vẫn sẽ hiển thị cùng 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
Tạm thời thoát khỏi phiên SSH của thực thể, chúng ta sẽ chuyển SSH trở lại chế độ loại bỏ địa chỉ kiểm thử.
10. Cập nhật và Xoá quy tắc Cloud NAT
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 các địa chỉ IP mới và loại bỏ các địa chỉ IP hiện có được liên kết với các quy tắc hiện tại.
Hãy cập nhật tệp Quy tắc NAT như sau
Trên 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
Chức năng của tệp mới này giờ đây là địa chỉ "nat-address-2" ở trạng thái cạn kiệt. Và thêm "nat-address-3" (địa chỉ nat-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 chấm dứt linh hoạt, trong khi tạo các kết nối mới chỉ sử dụng nat-address-3.
Sau đó, hãy cập nhật cổng NAT hiện có của chúng ta bằng cách sử dụng tệp quy tắc này. Trên Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \ --router=consumer-cr \ --rules=natrulesfile.txt \ --router-region=us-east4
Bạn sẽ nhận được kết quả sau đây :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Xác thực rằng quy tắc đã được định cấu hình thành công. Trên 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ẽ nhận được kết quả sau đây :
--- 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
Chú ý cách "nat-address-2" hiện đã được đặt vào trạng thái cạn kiệt. Chúng tôi sẽ tuỳ ý vào bạn để 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 đúng IP NAT.
Cuối cùng, để xoá các quy tắc NAT khỏi cổng vào Cloud NAT và quay về chế độ mặc định. Bạn có thể dùng lệnh gcloud sau đây. Trên 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ẽ nhận được kết quả sau đây :
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 khác, 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ẽ nhận được kết quả sau đây :
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 ý cách không có "quy tắc:" trong dữ liệu đầu ra YAML. Cho biết chưa có Quy tắc NAT được định cấu hình.
11. Các bước dọn dẹp
Để tránh các khoản phí định kỳ, bạn nên xoá tất cả tài nguyên liên kết với lớp học lập trình này.
Trước tiên, hãy xoá mọi phiên bản.
Trên 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á Cloud Router. Trên Cloud Shell:
gcloud compute routers delete consumer-cr \ --region us-east4 --quiet
Bạn sẽ nhận được kết quả sau đây :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].
Huỷ bỏ tất cả địa chỉ IP bên ngoài. Trên 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ẽ nhận được kết quả sau đây :
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. Trên Cloud Shell:
gcloud compute firewall-rules delete consumer-allow-iap \ producer-allow-8080 --quiet
Bạn sẽ nhận được kết quả sau đây :
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. Trên Cloud Shell:
gcloud compute networks subnets delete consumer-e4 \ producer-e4 --region=us-east4 --quiet
Bạn sẽ nhận được kết quả sau đây :
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. Trên Cloud Shell:
gcloud compute networks delete consumer-vpc \ producer-vpc --quiet
Bạn sẽ nhận được kết quả sau đây :
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 thành Phòng thí nghiệm về quy tắc Cloud NAT!
Nội dung bạn đã đề cập
- Cách thiết lập cổng vào Cloud NAT để 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 các quy tắc này vào NAT Gateway.
- Cách kiểm thử Quy tắc NAT từ một thực thể.
- Cách cập nhật các quy tắc của NAT Gateway.
- Cách xoá các quy tắc NAT và quay về hành vi Cloud NAT mặc định.
Bước tiếp theo
- Thử nghiệm với việc tạo Quy tắc NAT phức tạp hơn, chẳng hạn như ví dụ này
- Khám phá việc tiêu hao địa chỉ IP NAT và quan sát tác động của kết nối.
- Tìm hiểu thêm về việc kết nối 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.