1. Giới thiệu
GCP từ lâu đã hỗ trợ nhiều giao diện ở cấp độ phiên bản máy ảo. Với nhiều giao diện, một VM có thể kết nối tối đa 7 giao diện mới (mặc định + 7 giao diện) với các VPC khác nhau. Tính năng Mạng GKE hiện mở rộng hành vi này sang các Pod đang chạy trên các Nút. Trước tính năng này, các cụm GKE chỉ cho phép tất cả NodePool có một giao diện duy nhất và do đó được liên kết với một VPC duy nhất. Với tính năng Multi-Network on Pods, giờ đây, người dùng có thể bật nhiều giao diện trên các Nút và cho các Pod trong một cụm GKE.
Sản phẩm bạn sẽ tạo ra
Trong hướng dẫn này, bạn sẽ tạo một môi trường GKE có nhiều NIC toàn diện minh hoạ(các) trường hợp sử dụng được minh hoạ trong Hình 1.
- Tạo netdevice-l3-pod tận dụng busybox để:
- Thực hiện PING và wget -S đến phiên bản netdevice-apache trong netdevice-vpc qua eth2
- Thực hiện PING và wget -S đến phiên bản l3-apache trong l3-vpc qua eth1
- Tạo một l3-pod tận dụng busybox để thực hiện PING và wget -S đến phiên bản l3-apache qua eth1
Trong cả hai trường hợp sử dụng, giao diện eth0 của nhóm đều được kết nối với mạng mặc định.
Hình 1

Kiến thức bạn sẽ học được
- Cách tạo mạng con loại l3
- Cách tạo mạng con loại netdevice
- Cách thiết lập một nhóm nút GKE có nhiều NIC
- Cách tạo một nhóm có chức năng netdevice và l3
- Cách tạo nhóm có các chức năng l3
- Cách tạo và xác thực mạng đối tượng GKE
- Cách xác thực khả năng kết nối với các máy chủ Apache từ xa bằng cách sử dụng PING, wget và nhật ký Tường lửa
Bạn cần có
- Dự án trên Google Cloud
2. Thuật ngữ và khái niệm
VPC chính: VPC chính là một VPC được định cấu hình sẵn, đi kèm với một bộ chế độ cài đặt và tài nguyên mặc định. Cụm GKE được tạo trong VPC này.
Mạng con: Trong Google Cloud, mạng con là cách tạo CIDR (Định tuyến liên miền không phân lớp) bằng mặt nạ mạng trong một VPC. Một mạng con có một dải địa chỉ IP chính được chỉ định cho các nút và có thể có nhiều dải địa chỉ IP phụ thuộc về các Pod và Dịch vụ.
Mạng nút: Mạng nút là một tổ hợp chuyên dụng gồm một cặp VPC và mạng con. Trong mạng lưới nút này, các nút thuộc bộ nút được phân bổ địa chỉ IP từ dải địa chỉ IP chính.
Dải thứ cấp: Dải thứ cấp của Google Cloud là một CIDR và mặt nạ mạng thuộc một khu vực trong VPC. GKE sử dụng thông tin này làm mạng Pod lớp 3. Một VPC có thể có nhiều dải thứ cấp và một Pod có thể kết nối với nhiều mạng Pod.
Mạng (L3 hoặc thiết bị): Một đối tượng Mạng đóng vai trò là điểm kết nối cho các Pod. Trong hướng dẫn này, các mạng là l3-network và netdevice-network, trong đó thiết bị có thể là netdevice hoặc dpdk. Mạng mặc định là mạng bắt buộc và được tạo khi tạo cụm dựa trên mạng con mặc định của nhóm nút.
Mạng lớp 3 tương ứng với một dải thứ cấp trên mạng con, được biểu thị là:
VPC -> Tên mạng con -> Tên dải thứ cấp
Mạng thiết bị tương ứng với một mạng con trên VPC, được biểu thị là:
VPC -> Tên mạng con
Mạng Pod mặc định: Google Cloud tạo một mạng Pod mặc định trong quá trình tạo cụm. Mạng Pod mặc định sử dụng VPC chính làm mạng nút. Theo mặc định, Pod-network mặc định có sẵn trên tất cả các nút và Pod của cụm.
Pod có nhiều giao diện: Pod có nhiều giao diện trong GKE không thể kết nối với cùng một mạng Pod vì mỗi giao diện của Pod phải được kết nối với một mạng duy nhất.
Cập nhật dự án để hỗ trợ lớp học lập trình
Lớp học lập trình này sử dụng $variables để hỗ trợ việc triển khai cấu hình gcloud trong Cloud Shell.
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. Thiết lập VPC chính
Tạo VPC chính
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud compute networks create primary-vpc --project=$projectid --subnet-mode=custom
Tạo nút và mạng con phụ
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud compute networks subnets create primary-node-subnet --project=$projectid --range=192.168.0.0/24 --network=primary-vpc --region=us-central1 --enable-private-ip-google-access --secondary-range=sec-range-primay-vpc=10.0.0.0/21
4. Tạo cụm GKE
Tạo cụm GKE riêng tư, chỉ định các mạng con primary-vpc để tạo nhóm nút mặc định bằng các cờ bắt buộc –enable-multi-networking và –enable-dataplane-v2 để hỗ trợ nhóm nút có nhiều NIC.
Trong Cloud Shell, hãy tạo cụm GKE:
gcloud container clusters create multinic-gke \
--zone "us-central1-a" \
--enable-dataplane-v2 \
--enable-ip-alias \
--enable-multi-networking \
--network "primary-vpc" --subnetwork "primary-node-subnet" \
--num-nodes=2 \
--max-pods-per-node=32 \
--cluster-secondary-range-name=sec-range-primay-vpc \
--no-enable-master-authorized-networks \
--release-channel "regular" \
--enable-private-nodes --master-ipv4-cidr "100.100.10.0/28" \
--enable-ip-alias
Xác thực cụm multinic-gke
Trong Cloud Shell, hãy xác thực bằng cụm:
gcloud container clusters get-credentials multinic-gke --zone us-central1-a --project $projectid
Trong Cloud Shell, hãy xác thực rằng 2 nút được tạo từ nhóm mặc định:
kubectl get nodes
Ví dụ:
user@$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-multinic-gke-default-pool-3d419e48-1k2p Ready <none> 2m4s v1.27.3-gke.100
gke-multinic-gke-default-pool-3d419e48-xckb Ready <none> 2m4s v1.27.3-gke.100
5. Thiết lập netdevice-vpc
Tạo mạng netdevice-vpc
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom
Tạo các mạng con netdevice-vpc
Trong Cloud Shell, hãy tạo mạng con dùng cho mạng thiết bị mạng có nhiều NIC:
gcloud compute networks subnets create netdevice-subnet --project=$projectid --range=192.168.10.0/24 --network=netdevice-vpc --region=us-central1 --enable-private-ip-google-access
Trong Cloud Shell, hãy tạo một mạng con cho phiên bản netdevice-apache:
gcloud compute networks subnets create netdevice-apache --project=$projectid --range=172.16.10.0/28 --network=netdevice-vpc --region=us-central1 --enable-private-ip-google-access
Cấu hình Cloud Router và NAT
Cloud NAT được dùng trong hướng dẫn cài đặt gói phần mềm vì phiên bản VM không có địa chỉ IP bên ngoài.
Trong Cloud Shell, hãy tạo bộ định tuyến đám mây.
gcloud compute routers create netdevice-cr --network netdevice-vpc --region us-central1
Trong Cloud Shell, hãy tạo cổng NAT.
gcloud compute routers nats create cloud-nat-netdevice --router=netdevice-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
Tạo thực thể netdevice-apache
Trong phần sau, bạn sẽ tạo phiên bản netdevice-apache.
Trong Cloud Shell, hãy tạo phiên bản:
gcloud compute instances create netdevice-apache \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=netdevice-apache \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the netdevice-apache instance !!' | tee /var/www/html/index.html
EOF"
6. l3-vpc setup
Tạo mạng l3-vpc
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom
Tạo các mạng con l3-vpc
Trong Cloud Shell, hãy tạo một mạng con có dải chính và dải phụ. Phạm vi phụ(sec-range-l3-subnet) được dùng cho mạng l3 có nhiều NIC:
gcloud compute networks subnets create l3-subnet --project=$projectid --range=192.168.20.0/24 --network=l3-vpc --region=us-central1 --enable-private-ip-google-access --secondary-range=sec-range-l3-subnet=10.0.8.0/21
Trong Cloud Shell, hãy tạo một mạng con cho phiên bản l3-apache:
gcloud compute networks subnets create l3-apache --project=$projectid --range=172.16.20.0/28 --network=l3-vpc --region=us-central1 --enable-private-ip-google-access
Cấu hình Cloud Router và NAT
Cloud NAT được dùng trong hướng dẫn cài đặt gói phần mềm vì phiên bản VM không có địa chỉ IP bên ngoài.
Trong Cloud Shell, hãy tạo bộ định tuyến đám mây.
gcloud compute routers create l3-cr --network l3-vpc --region us-central1
Trong Cloud Shell, hãy tạo cổng NAT.
gcloud compute routers nats create cloud-nat-l3 --router=l3-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
Tạo thực thể l3-apache
Trong phần sau, bạn sẽ tạo phiên bản l3-apache.
Trong Cloud Shell, hãy tạo phiên bản:
gcloud compute instances create l3-apache \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=l3-apache \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the l3-apache instance !!' | tee /var/www/html/index.html
EOF"
7. Tạo nhóm nút multinic
Trong phần sau, bạn sẽ tạo một nhóm nút có nhiều NIC bao gồm các cờ sau:
–additional-node-network (Bắt buộc đối với các giao diện Loại thiết bị)
Ví dụ:
--additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet
–additional-node-network và –additional-pod-network ( Bắt buộc đối với các giao diện loại L3)
Ví dụ:
--additional-node-network network=l3-vpc,subnetwork=l3-subnet --additional-pod-network subnetwork=l3-subnet,pod-ipv4-range=sec-range-l3-subnet,max-pods-per-node=8
Loại máy: Khi triển khai bộ nút, hãy cân nhắc sự phụ thuộc vào loại máy. Ví dụ: một loại máy như "e2-standard-4" có 4 vCPU có thể hỗ trợ tối đa 4 VPC. Ví dụ: netdevice-l3-pod sẽ có tổng cộng 3 giao diện (mặc định, netdevice và l3), do đó, loại máy được dùng trong hướng dẫn là e2-standard-4.
Trong Cloud Shell, hãy tạo nhóm nút bao gồm một Thiết bị loại và L3:
gcloud container --project "$projectid" node-pools create "multinic-node-pool" --cluster "multinic-gke" --zone "us-central1-a" --additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet --additional-node-network network=l3-vpc,subnetwork=l3-subnet --additional-pod-network subnetwork=l3-subnet,pod-ipv4-range=sec-range-l3-subnet,max-pods-per-node=8 --machine-type "e2-standard-4"
8. Xác thực multnic-node-pool
Trong Cloud Shell, hãy xác thực 3 nút được tạo từ multinic-node-pool:
kubectl get nodes
Ví dụ:
user@$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-multinic-gke-default-pool-3d419e48-1k2p Ready <none> 15m v1.27.3-gke.100
gke-multinic-gke-default-pool-3d419e48-xckb Ready <none> 15m v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-0tfx Ready <none> 3m51s v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-86gz Ready <none> 3m51s v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-t66p Ready <none> 3m51s v1.27.3-gke.100
9. Tạo netdevice-network
Trong các bước sau, bạn sẽ tạo một đối tượng kubernetes Network và GKENetworkParamSet để tạo netdevice-network. Đối tượng này sẽ được dùng để liên kết các Pod trong các bước sau.
Tạo đối tượng netdevice-network
Trong Cloud Shell, hãy tạo đối tượng mạng YAML netdevice-network.yaml bằng trình chỉnh sửa VI hoặc nano. Lưu ý rằng "routes to" là mạng con 172.16.10.0/28 (netdevice-apache) trong netdevice-vpc.
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: netdevice-network
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: "netdevice"
routes:
- to: "172.16.10.0/28"
Trong Cloud Shell, hãy áp dụng netdevice-network.yaml:
kubectl apply -f netdevice-network.yaml
Trong Cloud Shell, hãy xác thực rằng Loại trạng thái netdevice-network là Ready (Sẵn sàng).
kubectl describe networks netdevice-network
Ví dụ:
user@$ kubectl describe networks netdevice-network
Name: netdevice-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:37:38Z
Generation: 1
Resource Version: 1578594
UID: 46d75374-9fcc-42be-baeb-48e074747052
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: netdevice
Routes:
To: 172.16.10.0/28
Type: Device
Status:
Conditions:
Last Transition Time: 2023-07-30T22:37:38Z
Message: GKENetworkParamSet resource was deleted: netdevice
Reason: GNPDeleted
Status: False
Type: ParamsReady
Last Transition Time: 2023-07-30T22:37:38Z
Message: Resource referenced by params is not ready
Reason: ParamsNotReady
Status: False
Type: Ready
Events: <none>
Tạo GKENetworkParamSet
Trong Cloud Shell, hãy tạo đối tượng mạng YAML netdevice-network-parm.yaml bằng trình chỉnh sửa VI hoặc nano. Thông số kỹ thuật này tương ứng với việc triển khai mạng con netdevice-vpc.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: "netdevice"
spec:
vpc: "netdevice-vpc"
vpcSubnet: "netdevice-subnet"
deviceMode: "NetDevice"
Trong Cloud Shell, hãy áp dụng netdevice-network-parm.yaml
kubectl apply -f netdevice-network-parm.yaml
Trong Cloud Shell, hãy xác thực netdevice-network Status Reason GNPParmsReady và NetworkReady:
kubectl describe networks netdevice-network
Ví dụ:
user@$ kubectl describe networks netdevice-network
Name: netdevice-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:37:38Z
Generation: 1
Resource Version: 1579791
UID: 46d75374-9fcc-42be-baeb-48e074747052
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: netdevice
Routes:
To: 172.16.10.0/28
Type: Device
Status:
Conditions:
Last Transition Time: 2023-07-30T22:39:44Z
Message:
Reason: GNPParamsReady
Status: True
Type: ParamsReady
Last Transition Time: 2023-07-30T22:39:44Z
Message:
Reason: NetworkReady
Status: True
Type: Ready
Events: <none>
Trong Cloud Shell, hãy xác thực khối CIDR gkenetworkparamset 192.168.10.0/24 được dùng cho(các) giao diện Pod trong một bước sau.
kubectl describe gkenetworkparamsets.networking.gke.io netdevice
Ví dụ:
user@$ kubectl describe gkenetworkparamsets.networking.gke.io netdevice
Name: netdevice
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GKENetworkParamSet
Metadata:
Creation Timestamp: 2023-07-30T22:39:43Z
Finalizers:
networking.gke.io/gnp-controller
networking.gke.io/high-perf-finalizer
Generation: 1
Resource Version: 1579919
UID: 6fe36b0c-0091-4b6a-9d28-67596cbce845
Spec:
Device Mode: NetDevice
Vpc: netdevice-vpc
Vpc Subnet: netdevice-subnet
Status:
Conditions:
Last Transition Time: 2023-07-30T22:39:43Z
Message:
Reason: GNPReady
Status: True
Type: Ready
Network Name: netdevice-network
Pod CID Rs:
Cidr Blocks:
192.168.10.0/24
Events: <none>
10. Tạo mạng l3
Trong các bước sau, bạn sẽ tạo một đối tượng Kubernetes Network và GKENetworkParamSet để tạo mạng l3 sẽ được dùng để liên kết các Pod trong các bước sau.
Tạo đối tượng mạng l3
Trong Cloud Shell, hãy tạo đối tượng mạng YAML l3-network.yaml bằng trình chỉnh sửa VI hoặc nano. Lưu ý rằng "routes to" là mạng con 172.16.20.0/28 (l3-apache) trong l3-vpc.
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: l3-network
spec:
type: "L3"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: "l3-network"
routes:
- to: "172.16.20.0/28"
Trong Cloud Shell, hãy áp dụng l3-network.yaml:
kubectl apply -f l3-network.yaml
Trong Cloud Shell, hãy xác thực rằng Loại trạng thái l3-network là Đã sẵn sàng.
kubectl describe networks l3-network
Ví dụ:
user@$ kubectl describe networks l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:43:54Z
Generation: 1
Resource Version: 1582307
UID: 426804be-35c9-4cc5-bd26-00b94be2ef9a
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: l3-network
Routes:
to: 172.16.20.0/28
Type: L3
Status:
Conditions:
Last Transition Time: 2023-07-30T22:43:54Z
Message: GKENetworkParamSet resource was deleted: l3-network
Reason: GNPDeleted
Status: False
Type: ParamsReady
Last Transition Time: 2023-07-30T22:43:54Z
Message: Resource referenced by params is not ready
Reason: ParamsNotReady
Status: False
Type: Ready
Events: <none>
Tạo GKENetworkParamSet
Trong Cloud Shell, hãy tạo đối tượng mạng YAML l3-network-parm.yaml bằng trình chỉnh sửa VI hoặc nano. Lưu ý rằng bản đồ đặc tả cho việc triển khai mạng con l3-vpc.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: "l3-network"
spec:
vpc: "l3-vpc"
vpcSubnet: "l3-subnet"
podIPv4Ranges:
rangeNames:
- "sec-range-l3-subnet"
Trong Cloud Shell, hãy áp dụng l3-network-parm.yaml
kubectl apply -f l3-network-parm.yaml
Trong Cloud Shell, hãy xác thực rằng Lý do trạng thái l3-network là GNPParmsReady và NetworkReady:
kubectl describe networks l3-network
Ví dụ:
user@$ kubectl describe networks l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:43:54Z
Generation: 1
Resource Version: 1583647
UID: 426804be-35c9-4cc5-bd26-00b94be2ef9a
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: l3-network
Routes:
To: 172.16.20.0/28
Type: L3
Status:
Conditions:
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: GNPParamsReady
Status: True
Type: ParamsReady
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: NetworkReady
Status: True
Type: Ready
Events: <none>
Trong Cloud Shell, hãy xác thực gkenetworkparamset l3-network CIDR 10.0.8.0/21 được dùng để tạo giao diện pod.
kubectl describe gkenetworkparamsets.networking.gke.io l3-network
Ví dụ:
user@$ kubectl describe gkenetworkparamsets.networking.gke.io l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GKENetworkParamSet
Metadata:
Creation Timestamp: 2023-07-30T22:46:14Z
Finalizers:
networking.gke.io/gnp-controller
Generation: 1
Resource Version: 1583656
UID: 4c1f521b-0088-4005-b000-626ca5205326
Spec:
podIPv4Ranges:
Range Names:
sec-range-l3-subnet
Vpc: l3-vpc
Vpc Subnet: l3-subnet
Status:
Conditions:
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: GNPReady
Status: True
Type: Ready
Network Name: l3-network
Pod CID Rs:
Cidr Blocks:
10.0.8.0/21
Events: <none>
11. Tạo netdevice-l3-pod
Trong phần sau, bạn sẽ tạo netdevice-l3-pod chạy busybox, còn được gọi là "dao Thuỵ Sĩ" hỗ trợ hơn 300 lệnh phổ biến. Pod được định cấu hình để giao tiếp với l3-vpc bằng eth1 và netdevice-vpc bằng eth2.
Trong Cloud Shell, hãy tạo vùng chứa hộp bận có tên netdevice-l3-pod.yaml bằng trình chỉnh sửa VI hoặc nano.
apiVersion: v1
kind: Pod
metadata:
name: netdevice-l3-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"},
{"interfaceName":"eth2","network":"netdevice-network"}
]
spec:
containers:
- name: netdevice-l3-pod
image: busybox
command: ["sleep", "10m"]
ports:
- containerPort: 80
restartPolicy: Always
Trong Cloud Shell, hãy áp dụng netdevice-l3-pod.yaml
kubectl apply -f netdevice-l3-pod.yaml
Xác thực việc tạo netdevice-l3-pod
Trong Cloud Shell, hãy xác thực rằng netdevice-l3-pod đang chạy:
kubectl get pods netdevice-l3-pod
Ví dụ:
user@$ kubectl get pods netdevice-l3-pod
NAME READY STATUS RESTARTS AGE
netdevice-l3-pod 1/1 Running 0 74s
Trong Cloud Shell, hãy xác thực địa chỉ IP được chỉ định cho các giao diện Pod.
kubectl get pods netdevice-l3-pod -o yaml
Trong ví dụ được cung cấp, trường networking.gke.io/pod-ips chứa các địa chỉ IP được liên kết với các giao diện của nhóm từ l3-network và netdevice-network. Địa chỉ IP mạng mặc định 10.0.1.22 được nêu chi tiết trong podIP:
user@$ kubectl get pods netdevice-l3-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"networking.gke.io/default-interface":"eth0","networking.gke.io/interfaces":"[\n{\"interfaceName\":\"eth0\",\"network\":\"default\"},\n{\"interfaceName\":\"eth1\",\"network\":\"l3-network\"},\n{\"interfaceName\":\"eth2\",\"network\":\"netdevice-network\"}\n]\n"},"name":"netdevice-l3-pod","namespace":"default"},"spec":{"containers":[{"command":["sleep","10m"],"image":"busybox","name":"netdevice-l3-pod","ports":[{"containerPort":80}]}],"restartPolicy":"Always"}}
networking.gke.io/default-interface: eth0
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"},
{"interfaceName":"eth2","network":"netdevice-network"}
]
networking.gke.io/pod-ips: '[{"networkName":"l3-network","ip":"10.0.8.4"},{"networkName":"netdevice-network","ip":"192.168.10.2"}]'
creationTimestamp: "2023-07-30T22:49:27Z"
name: netdevice-l3-pod
namespace: default
resourceVersion: "1585567"
uid: d9e43c75-e0d1-4f31-91b0-129bc53bbf64
spec:
containers:
- command:
- sleep
- 10m
image: busybox
imagePullPolicy: Always
name: netdevice-l3-pod
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
networking.gke.io.networks/l3-network.IP: "1"
networking.gke.io.networks/netdevice-network: "1"
networking.gke.io.networks/netdevice-network.IP: "1"
requests:
networking.gke.io.networks/l3-network.IP: "1"
networking.gke.io.networks/netdevice-network: "1"
networking.gke.io.networks/netdevice-network.IP: "1"
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-f2wpb
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: gke-multinic-gke-multinic-node-pool-135699a1-86gz
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
- effect: NoSchedule
key: networking.gke.io.networks/l3-network.IP
operator: Exists
- effect: NoSchedule
key: networking.gke.io.networks/netdevice-network
operator: Exists
- effect: NoSchedule
key: networking.gke.io.networks/netdevice-network.IP
operator: Exists
volumes:
- name: kube-api-access-f2wpb
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:28Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:33Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:33Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:28Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: containerd://dcd9ead2f69824ccc37c109a47b1f3f5eb7b3e60ce3865e317dd729685b66a5c
image: docker.io/library/busybox:latest
imageID: docker.io/library/busybox@sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79
lastState: {}
name: netdevice-l3-pod
ready: true
restartCount: 0
started: true
state:
running:
startedAt: "2023-07-30T22:49:32Z"
hostIP: 192.168.0.4
phase: Running
podIP: 10.0.1.22
podIPs:
- ip: 10.0.1.22
qosClass: BestEffort
startTime: "2023-07-30T22:49:28Z"
Xác thực các tuyến netdevice-l3-pod
Trong Cloud Shell, hãy xác thực các tuyến đến netdevice-vpc và l3-vpc từ netdevice-l3-pod:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
Tạo thực thể, xác thực các giao diện của nhóm:
ifconfig
Trong ví dụ này, eth0 được kết nối với mạng mặc định, eth1 được kết nối với l3-network và eth2 được kết nối với netdevice-network.
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 26:E3:1B:14:6E:0C
inet addr:10.0.1.22 Bcast:10.0.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:446 (446.0 B) TX bytes:558 (558.0 B)
eth1 Link encap:Ethernet HWaddr 92:78:4E:CB:F2:D4
inet addr:10.0.8.4 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:446 (446.0 B) TX bytes:516 (516.0 B)
eth2 Link encap:Ethernet HWaddr 42:01:C0:A8:0A:02
inet addr:192.168.10.2 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:73 errors:0 dropped:0 overruns:0 frame:0
TX packets:50581 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26169 (25.5 KiB) TX bytes:2148170 (2.0 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Từ netdevice-l3-pod, hãy xác thực các tuyến đến netdevice-vpc (172.16.10.0/28) và l3-vpc (172.16.20.0/28).
Tạo thực thể, xác thực các tuyến của nhóm:
ip route
Ví dụ:
/ # ip route
default via 10.0.1.1 dev eth0 #primary-vpc
10.0.1.0/24 via 10.0.1.1 dev eth0 src 10.0.1.22
10.0.1.1 dev eth0 scope link src 10.0.1.22
10.0.8.0/21 via 10.0.8.1 dev eth1 #l3-vpc (sec-range-l3-subnet)
10.0.8.1 dev eth1 scope link
172.16.10.0/28 via 192.168.10.1 dev eth2 #netdevice-vpc (netdevice-apache subnet)
172.16.20.0/28 via 10.0.8.1 dev eth1 #l3-vpc (l3-apache subnet)
192.168.10.0/24 via 192.168.10.1 dev eth2 #pod interface subnet
192.168.10.1 dev eth2 scope link
Để quay lại Cloud Shell, hãy thoát khỏi nhóm từ phiên bản.
exit
12. Tạo l3-pod
Trong phần sau, bạn sẽ tạo l3-pod chạy busybox, còn được gọi là "dao Thuỵ Sĩ" hỗ trợ hơn 300 lệnh phổ biến. Nhóm được định cấu hình để chỉ giao tiếp với l3-vpc bằng eth1.
Trong Cloud Shell, hãy tạo vùng chứa hộp bận có tên l3-pod.yaml bằng trình chỉnh sửa VI hoặc nano.
apiVersion: v1
kind: Pod
metadata:
name: l3-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"}
]
spec:
containers:
- name: l3-pod
image: busybox
command: ["sleep", "10m"]
ports:
- containerPort: 80
restartPolicy: Always
Trong Cloud Shell, hãy áp dụng l3-pod.yaml
kubectl apply -f l3-pod.yaml
Xác thực việc tạo l3-pod
Trong Cloud Shell, hãy xác thực rằng netdevice-l3-pod đang chạy:
kubectl get pods l3-pod
Ví dụ:
user@$ kubectl get pods l3-pod
NAME READY STATUS RESTARTS AGE
l3-pod 1/1 Running 0 52s
Trong Cloud Shell, hãy xác thực địa chỉ IP được chỉ định cho các giao diện Pod.
kubectl get pods l3-pod -o yaml
Trong ví dụ được cung cấp, trường networking.gke.io/pod-ips chứa các địa chỉ IP được liên kết với các giao diện của nhóm từ mạng l3. Địa chỉ IP mạng mặc định 10.0.2.12 được trình bày chi tiết trong podIP:
user@$ kubectl get pods l3-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"networking.gke.io/default-interface":"eth0","networking.gke.io/interfaces":"[\n{\"interfaceName\":\"eth0\",\"network\":\"default\"},\n{\"interfaceName\":\"eth1\",\"network\":\"l3-network\"}\n]\n"},"name":"l3-pod","namespace":"default"},"spec":{"containers":[{"command":["sleep","10m"],"image":"busybox","name":"l3-pod","ports":[{"containerPort":80}]}],"restartPolicy":"Always"}}
networking.gke.io/default-interface: eth0
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"}
]
networking.gke.io/pod-ips: '[{"networkName":"l3-network","ip":"10.0.8.22"}]'
creationTimestamp: "2023-07-30T23:22:29Z"
name: l3-pod
namespace: default
resourceVersion: "1604447"
uid: 79a86afd-2a50-433d-9d48-367acb82c1d0
spec:
containers:
- command:
- sleep
- 10m
image: busybox
imagePullPolicy: Always
name: l3-pod
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
networking.gke.io.networks/l3-network.IP: "1"
requests:
networking.gke.io.networks/l3-network.IP: "1"
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-w9d24
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: gke-multinic-gke-multinic-node-pool-135699a1-t66p
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
- effect: NoSchedule
key: networking.gke.io.networks/l3-network.IP
operator: Exists
volumes:
- name: kube-api-access-w9d24
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:29Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:35Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:35Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:29Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: containerd://1d5fe2854bba0a0d955c157a58bcfd4e34cecf8837edfd7df2760134f869e966
image: docker.io/library/busybox:latest
imageID: docker.io/library/busybox@sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79
lastState: {}
name: l3-pod
ready: true
restartCount: 0
started: true
state:
running:
startedAt: "2023-07-30T23:22:35Z"
hostIP: 192.168.0.5
phase: Running
podIP: 10.0.2.12
podIPs:
- ip: 10.0.2.12
qosClass: BestEffort
startTime: "2023-07-30T23:22:29Z"
Xác thực các tuyến l3-pod
Trong Cloud Shell, hãy xác thực các tuyến đến l3-vpc từ netdevice-l3-pod:
kubectl exec --stdin --tty l3-pod -- /bin/sh
Tạo thực thể, xác thực các giao diện của nhóm:
ifconfig
Trong ví dụ này, eth0 được kết nối với mạng mặc định, eth1 được kết nối với mạng l3.
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 22:29:30:09:6B:58
inet addr:10.0.2.12 Bcast:10.0.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:446 (446.0 B) TX bytes:558 (558.0 B)
eth1 Link encap:Ethernet HWaddr 6E:6D:FC:C3:FF:AF
inet addr:10.0.8.22 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:446 (446.0 B) TX bytes:516 (516.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Từ l3-pod, hãy xác thực các tuyến đến l3-vpc (172.16.20.0/28).
Tạo thực thể, xác thực các tuyến của nhóm:
ip route
Ví dụ:
/ # ip route
default via 10.0.2.1 dev eth0 #primary-vpc
10.0.2.0/24 via 10.0.2.1 dev eth0 src 10.0.2.12
10.0.2.1 dev eth0 scope link src 10.0.2.12
10.0.8.0/21 via 10.0.8.17 dev eth1 #l3-vpc (sec-range-l3-subnet)
10.0.8.17 dev eth1 scope link #pod interface subnet
172.16.20.0/28 via 10.0.8.17 dev eth1 #l3-vpc (l3-apache subnet)
Để quay lại Cloud Shell, hãy thoát khỏi nhóm từ phiên bản.
exit
13. Các bản cập nhật tường lửa
Để cho phép kết nối từ GKE multicnic-pool đến netdevice-vpc, bạn cần có các quy tắc tường lửa đầu vào l3-vpc. Bạn sẽ tạo các quy tắc tường lửa chỉ định dải nguồn là mạng con của mạng pod, ví dụ: netdevice-subnet, sec-range-l3-subnet.
Ví dụ: vùng chứa mới tạo, l3-pod, giao diện eth2 10.0.8.22 (được phân bổ từ sec-range-l3-subnet) là địa chỉ IP nguồn khi kết nối với phiên bản l3-apache trong l3-vpc.
netdevice-vpc: Cho phép từ netdevice-subnet đến netdevice-apache
Trong Cloud Shell, hãy tạo quy tắc tường lửa trong netdevice-vpc cho phép netdevice-subnet truy cập vào thực thể netdevice-apache.
gcloud compute --project=$projectid firewall-rules create allow-ingress-from-netdevice-network-to-all-vpc-instances --direction=INGRESS --priority=1000 --network=netdevice-vpc --action=ALLOW --rules=all --source-ranges=192.168.10.0/24 --enable-logging
l3-vpc: Cho phép từ sec-range-l3-subnet đến l3-apache
Trong Cloud Shell, hãy tạo quy tắc tường lửa trong l3-vpc để cho phép sec-range-l3-subnet truy cập vào thực thể l3-apache.
gcloud compute --project=$projectid firewall-rules create allow-ingress-from-l3-network-to-all-vpc-instances --direction=INGRESS --priority=1000 --network=l3-vpc --action=ALLOW --rules=all --source-ranges=10.0.8.0/21 --enable-logging
14. Xác thực khả năng kết nối của nhóm
Trong phần sau, bạn sẽ xác minh khả năng kết nối với các phiên bản Apache từ netdevice-l3-pod và l3-pod bằng cách đăng nhập vào các pod và chạy wget -S để xác thực quá trình tải trang chủ của máy chủ Apache xuống. Vì netdevice-l3-pod được định cấu hình bằng các giao diện từ netdevice-network và l3-network, nên có thể kết nối với các máy chủ Apache trong netdevice-vpc và l3-vpc.
Ngược lại, khi thực hiện lệnh wget -S từ l3-pod, bạn không thể kết nối với máy chủ Apache trong netdevice-vpc vì l3-pod chỉ được định cấu hình bằng một giao diện từ l3-network.
Lấy địa chỉ IP của máy chủ Apache
Trong Cloud Console, hãy lấy địa chỉ IP của các máy chủ Apache bằng cách chuyển đến Compute Engine → VM instances (Phiên bản máy ảo)

netdevice-l3-pod to netdevice-apache connectivity test
Trong Cloud Shell, hãy đăng nhập vào netdevice-l3-pod:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
Từ vùng chứa, hãy thực hiện lệnh ping đến phiên bản netdevice-apache dựa trên địa chỉ IP thu được ở bước trước.
ping <insert-your-ip> -c 4
Ví dụ:
/ # ping 172.16.10.2 -c 4
PING 172.16.10.2 (172.16.10.2): 56 data bytes
64 bytes from 172.16.10.2: seq=0 ttl=64 time=1.952 ms
64 bytes from 172.16.10.2: seq=1 ttl=64 time=0.471 ms
64 bytes from 172.16.10.2: seq=2 ttl=64 time=0.446 ms
64 bytes from 172.16.10.2: seq=3 ttl=64 time=0.505 ms
--- 172.16.10.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.446/0.843/1.952 ms
/ #
Trong Cloud Shell, hãy thực hiện lệnh wget -S cho phiên bản netdevice-apache dựa trên địa chỉ IP mà bạn đã lấy được ở bước trước. Lệnh 200 OK cho biết bạn đã tải trang web xuống thành công.
wget -S <insert-your-ip>
Ví dụ:
/ # wget -S 172.16.10.2
Connecting to 172.16.10.2 (172.16.10.2:80)
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2023 03:12:58 GMT
Server: Apache/2.4.56 (Debian)
Last-Modified: Sat, 29 Jul 2023 00:32:44 GMT
ETag: "2c-6019555f54266"
Accept-Ranges: bytes
Content-Length: 44
Connection: close
Content-Type: text/html
saving to 'index.html'
index.html 100% |********************************| 44 0:00:00 ETA
'index.html' saved
/ #
netdevice-l3-pod to l3-apache connectivity test
Trong Cloud Shell, hãy thực hiện lệnh ping đến phiên bản l3-apache dựa trên địa chỉ IP mà bạn nhận được ở bước trước.
ping <insert-your-ip> -c 4
Ví dụ:
/ # ping 172.16.20.3 -c 4
PING 172.16.20.3 (172.16.20.3): 56 data bytes
64 bytes from 172.16.20.3: seq=0 ttl=63 time=2.059 ms
64 bytes from 172.16.20.3: seq=1 ttl=63 time=0.533 ms
64 bytes from 172.16.20.3: seq=2 ttl=63 time=0.485 ms
64 bytes from 172.16.20.3: seq=3 ttl=63 time=0.462 ms
--- 172.16.20.3 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.462/0.884/2.059 ms
/ #
Trong Cloud Shell, hãy xoá tệp index.html trước đó và thực hiện lệnh wget -S cho phiên bản l3-apache dựa trên địa chỉ IP thu được ở bước trước. 200 OK cho biết bạn đã tải trang web xuống thành công.
rm index.html
wget -S <insert-your-ip>
Ví dụ:
/ # rm index.html
/ # wget -S 172.16.20.3
Connecting to 172.16.20.3 (172.16.20.3:80)
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2023 03:41:32 GMT
Server: Apache/2.4.56 (Debian)
Last-Modified: Mon, 31 Jul 2023 03:24:21 GMT
ETag: "25-601bff76f04b7"
Accept-Ranges: bytes
Content-Length: 37
Connection: close
Content-Type: text/html
saving to 'index.html'
index.html 100% |*******************************************************************************************************| 37 0:00:00 ETA
'index.html' saved
Để quay lại Cloud Shell, hãy thoát khỏi nhóm từ phiên bản.
exit
l3-pod to netdevice-apache connectivity test
Trong Cloud Shell, hãy đăng nhập vào l3-pod:
kubectl exec --stdin --tty l3-pod -- /bin/sh
Từ vùng chứa, hãy thực hiện lệnh ping đến phiên bản netdevice-apache dựa trên địa chỉ IP thu được ở bước trước. Vì l3-pod không có giao diện nào liên kết với netdevice-network nên lệnh ping sẽ không thành công.
ping <insert-your-ip> -c 4
Ví dụ:
/ # ping 172.16.10.2 -c 4
PING 172.16.10.2 (172.16.10.2): 56 data bytes
--- 172.16.10.2 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss
Không bắt buộc: Trong Cloud Shell, hãy thực hiện lệnh wget -S cho phiên bản netdevice-apache dựa trên địa chỉ IP thu được từ bước trước sẽ hết thời gian chờ.
wget -S <insert-your-ip>
Ví dụ:
/ # wget -S 172.16.10.2
Connecting to 172.16.10.2 (172.16.10.2:80)
wget: can't connect to remote host (172.16.10.2): Connection timed out
Kiểm tra khả năng kết nối từ l3-pod đến l3-apache
Trong Cloud Shell, hãy thực hiện lệnh ping đến phiên bản l3-apache dựa trên địa chỉ IP mà bạn nhận được ở bước trước.
ping <insert-your-ip> -c 4
Ví dụ:
/ # ping 172.16.20.3 -c 4
PING 172.16.20.3 (172.16.20.3): 56 data bytes
64 bytes from 172.16.20.3: seq=0 ttl=63 time=1.824 ms
64 bytes from 172.16.20.3: seq=1 ttl=63 time=0.513 ms
64 bytes from 172.16.20.3: seq=2 ttl=63 time=0.482 ms
64 bytes from 172.16.20.3: seq=3 ttl=63 time=0.532 ms
--- 172.16.20.3 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.482/0.837/1.824 ms
/ #
Trong Cloud Shell, hãy thực hiện lệnh wget -S cho phiên bản l3-apache dựa trên địa chỉ IP thu được từ bước trước. 200 OK cho biết bạn đã tải thành công trang web.
wget -S <insert-your-ip>
Ví dụ:
/ # wget -S 172.16.20.3
Connecting to 172.16.20.3 (172.16.20.3:80)
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2023 03:52:08 GMT
Server: Apache/2.4.56 (Debian)
Last-Modified: Mon, 31 Jul 2023 03:24:21 GMT
ETag: "25-601bff76f04b7"
Accept-Ranges: bytes
Content-Length: 37
Connection: close
Content-Type: text/html
saving to 'index.html'
index.html 100% |*******************************************************************************************************| 37 0:00:00 ETA
'index.html' saved
/ #
15. Nhật ký tường lửa
Tính năng Ghi nhật ký quy tắc tường lửa cho phép bạn kiểm tra, xác minh và phân tích tác động của các quy tắc tường lửa. Ví dụ: bạn có thể xác định xem một quy tắc tường lửa được thiết kế để từ chối lưu lượng truy cập có hoạt động như dự kiến hay không. Tính năng Ghi nhật ký quy tắc tường lửa cũng hữu ích nếu bạn cần xác định số lượng kết nối bị ảnh hưởng bởi một quy tắc tường lửa nhất định.
Trong hướng dẫn này, bạn đã bật tính năng ghi nhật ký tường lửa khi tạo các quy tắc tường lửa đầu vào. Hãy xem thông tin thu được từ nhật ký.
Trong Cloud Console, hãy chuyển đến phần Logging (Ghi nhật ký) → Logs Explorer (Trình khám phá nhật ký)
Chèn truy vấn bên dưới theo ảnh chụp màn hình và chọn Run query jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances")

Xem xét kỹ hơn một bản ghi sẽ cung cấp các phần tử thông tin cho quản trị viên bảo mật; từ địa chỉ IP nguồn và đích, cổng, giao thức và tên nhóm nút.

Để khám phá thêm nhật ký tường lửa, hãy chuyển đến Mạng VPC → Tường lửa → allow-ingress-from-netdevice-network-to-all-vpc-instances rồi chọn xem trong Trình khám phá nhật ký.
16. Dọn dẹp
Trong Cloud Shell, hãy xoá các thành phần hướng dẫn.
gcloud compute instances delete l3-apache netdevice-apache --zone=us-central1-a --quiet
gcloud compute routers delete l3-cr netdevice-cr --region=us-central1 --quiet
gcloud container clusters delete multinic-gke --zone=us-central1-a --quiet
gcloud compute firewall-rules delete allow-ingress-from-l3-network-to-all-vpc-instances allow-ingress-from-netdevice-network-to-all-vpc-instances --quiet
gcloud compute networks subnets delete l3-apache l3-subnet netdevice-apache netdevice-subnet primary-node-subnet --region=us-central1 --quiet
gcloud compute networks delete l3-vpc netdevice-vpc primary-vpc --quiet
17. Xin chúc mừng
Xin chúc mừng! Bạn đã định cấu hình và xác thực thành công việc tạo một nhóm nút có nhiều NIC và tạo các pod chạy busybox để xác thực khả năng kết nối L3 và loại thiết bị với các máy chủ Apache bằng cách sử dụng PING và wget.
Bạn cũng đã tìm hiểu cách tận dụng nhật ký tường lửa để kiểm tra các gói nguồn và đích giữa các vùng chứa Pod và máy chủ Apache.
Cosmopup cho rằng các hướng dẫn rất hữu ích!!
