Triển khai và xác thực nhiều mạng NFO của GKE và Giao diện hiệu suất cao

1. Giới thiệu

Từ lâu, GCP đã hỗ trợ nhiều giao diện ở cấp thực thể máy ảo. Nhờ có nhiều giao diện, một máy ảo có thể kết nối tối đa 7 giao diện mới (giao diện mặc định + 7 giao diện) với các VPC khác nhau. Mạng GKE hiện đã mở rộng hành vi này cho những Nhóm đang chạy trên các Nút. Trước khi có tính năng này, cụm GKE chỉ cho phép tất cả NodePools có một giao diện duy nhất nên được liên kết tới một VPC duy nhất. Nhờ tính năng Nhiều mạng trên Nhóm, 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 Nhóm 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ẽ xây dựng một môi trường đa năng GKE toàn diện nhằm minh hoạ(các) trường hợp sử dụng minh hoạ trong Hình 1.

  1. Tạo netdevice-l3-pod tận dụng nhãn bận để:
  2. Thực hiện mã PIN và wget -S sang phiên bản netdevice-apache trong netdevice-vpc qua eth2
  3. Thực hiện mã PIN và wget -S đến phiên bản l3-apache trong l3-vpc qua eth1
  4. Tạo nhóm l3 tận dụng vị trí bận rộn để thực hiện mã PIN và wget -S sang 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 được kết nối với mạng mặc định.

Hình 1

9d93019ee608587f.pngS

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 nhóm nút GKE đa nic
  • Cách tạo nhóm có chức năng netdevice và l3
  • Cách tạo nhóm 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 máy chủ Apache từ xa bằng nhật ký PING, wget và Tường lửa

Bạn cần có

  • Dự án trong 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ộ tài nguyên và chế độ cài đặt 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 Định tuyến giữa các miền không phân lớp (CIDR) bằng mặt nạ mạng trong VPC. Mạng con có một dải địa chỉ IP chính được gán cho các nút và có thể có nhiều dải địa chỉ phụ có thể thuộc về Nhóm và dịch vụ.

Mạng nút: Mạng nút là một tổ hợp dành riêng của cặp VPC và mạng con. Trong mạng nút này, các nút thuộc nhóm nút là địa chỉ IP được phân bổ từ dải địa chỉ IP chính.

Phạm vi phụ: Dải ô phụ 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 mô hình này làm Mạng nhóm lớp 3. Một VPC có thể có nhiều dải phụ và một Nhóm có thể kết nối với nhiều Mạng nhóm.

Mạng (L3 hoặc thiết bị): Đối tượng Mạng đóng vai trò là điểm kết nối cho Nhóm. Trong hướng dẫn, các mạng là mạng l3 và mạng netdevice, trong đó thiết bị có thể là netdevice hoặc ddp. Mạng mặc định là bắt buộc và được tạo khi tạo cụm dựa trên mạng con-nodepool mặc định.

Mạng lớp 3 tương ứng với dải ô phụ trên mạng con, được biểu thị như sau:

VPC -> Tên mạng con -> Tên dải ô phụ

Mạng thiết bị tương ứng với một mạng con trên VPC, được biểu thị dưới dạng:

VPC -> Tên mạng con

Mạng nhóm mặc định: Google Cloud sẽ tạo một Mạng nhóm mặc định trong quá trình tạo cụm. Mạng nhóm mặc định sử dụng VPC chính làm mạng nút. Theo mặc định, Mạng nhóm mặc định có sẵn trên tất cả các nút cụm và Nhóm.

Nhóm có nhiều giao diện: Các nhóm có nhiều giao diện trong GKE không thể kết nối với cùng một Mạng nhóm vì mỗi giao diện của Nhóm phải được kết nối với một mạng riêng biệ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.

Bên trong Cloud Shell, hãy thực hiện như 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

Bên trong Cloud Shell, hãy thực hiện như sau:

gcloud compute networks create primary-vpc --project=$projectid --subnet-mode=custom

Tạo nút và mạng con phụ

Bên trong Cloud Shell, hãy thực hiện như 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-vpc chính để tạo nhóm nút mặc định với các cờ bắt buộc –enable-multi-networking và –enable-dataplane-v2 để hỗ trợ các nhóm nút đa nic.

Bên 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

Bên 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

Bên trong Cloud Shell, quy trình xác thực 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

Bên trong Cloud Shell, hãy thực hiện như sau:

gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom

Tạo mạng con netdevice-vpc

Bên trong Cloud Shell, hãy tạo mạng con dùng cho mạng netdevice đa phương tiện:

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

Bên 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.

Bên trong Cloud Shell, hãy tạo bộ định tuyến trên đám mây.

gcloud compute routers create netdevice-cr --network netdevice-vpc --region us-central1

Bên 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 phiên bản netdevice-apache

Trong phần sau, bạn sẽ tạo phiên bản netdevice-apache.

Bên trong Cloud Shell, hãy tạo một thực thể:

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. Thiết lập l3-vpc

Tạo mạng l3-vpc

Bên trong Cloud Shell, hãy thực hiện như sau:

gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom

Tạo mạng con l3-vpc

Bên trong Cloud Shell, hãy tạo một mạng con trong dải ô chính và phụ. Dải ô thứ cấp(sec-range-l3-subnet) được sử dụng cho mạng đa kênh l3:

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

Bên 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.

Bên trong Cloud Shell, hãy tạo bộ định tuyến trên đám mây.

gcloud compute routers create l3-cr --network l3-vpc --region us-central1

Bên 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 phiên bản l3-apache

Trong phần sau, bạn sẽ tạo phiên bản l3-apache.

Bên trong Cloud Shell, hãy tạo một thực thể:

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 đa kênh

Trong phần sau, bạn sẽ tạo một nhóm nút đa (multinic) bao gồm các cờ sau:

– mạng nút bổ sung (Bắt buộc đối với giao diện loại Thiết bị)

Ví dụ:

--additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet

– mạng nút bổ sung & –additional-pod-network ( Giao diện loại forL3 Bắt buộc)

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 nhóm nút, hãy xem xét phần phụ thuộc của loại máy. Ví dụ: loại máy như "e2-standard-4" với 4 vCPU có thể hỗ trợ tổng cộng lên tới 4 VPC. Ví dụ: netdevice-l3-pod sẽ có tổng cộng 3 giao diện (default, netdevice và l3) do đó loại máy được sử dụng trong hướng dẫn là e2-standard-4.

Bên 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 nhóm đa nút

Bên trong Cloud Shell, quy trình xác thực 3 nút được tạo từ nhóm nhiều nút:

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 Network và GKENetworkParamSet kubernetes để tạo netdevice-network dùng để liên kết Nhóm ở các bước sau.

Tạo đối tượng netdevice-network

Bên 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. Ghi chú "tuyến đường đến" 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"

Bên trong Cloud Shell, hãy áp dụng netdevice-network.yaml:

kubectl apply -f netdevice-network.yaml 

Bên trong Cloud Shell, hãy xác thực Loại trạng thái mạng thiết bị mạng là 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

Bên 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 liên kết 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"

Bên trong Cloud Shell, hãy áp dụng netdevice-network-parm.yaml

kubectl apply -f netdevice-network-parm.yaml 

Bên trong Cloud Shell, hãy xác thực Lý do trạng thái mạng thiết bị mạng GNPParmsSẵn sàng và NetworkSẵ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:    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>

Bên trong Cloud Shell, hãy xác thực khối CIDR 192.168.10.0/24 của gkenetworkparamset được dùng cho giao diện Nhóm ở 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 Network và GKENetworkParamSet kubernetes để tạo mạng l3. Mạng này sẽ được dùng để liên kết Nhóm ở các bước sau.

Tạo đối tượng mạng L3

Bên 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. Ghi chú "tuyến đường đến" 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"

Bên trong Cloud Shell, hãy áp dụng l3-network.yaml:

kubectl apply -f l3-network.yaml 

Bên trong Cloud Shell, hãy xác thực Loại trạng thái mạng l3 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

Bên 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. Hãy lưu ý các bản đồ quy cách liên quan đến 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"

Bên trong Cloud Shell, hãy áp dụng l3-network-parm.yaml

kubectl apply -f l3-network-parm.yaml 

Bên trong Cloud Shell, hãy xác thực Lý do trạng thái mạng l3 là GNPParmsSẵn sàng và NetworkSẵ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:    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>

Bên trong Cloud Shell, xác thực CIDR 10.0.8.0/21 của gkenetworkparamset l3 được dùng để tạo giao diện nhóm.

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 nhóm netdevice-l3

Trong phần sau, bạn sẽ tạo một thiết bị bận rộn chạy bộ netdevice-l3-pod, còn được gọi là "Dao Thụy Sĩ" hỗ trợ hơn 300 lệnh phổ biến. Nhóm được định cấu hình để giao tiếp với l3-vpc bằng eth1 và netdevice-vpc bằng eth2.

Bên 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

Bên 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 nhóm netdevice-l3

Bên trong Cloud Shell, xác thực 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

Bên trong Cloud Shell, hãy xác thực địa chỉ IP được chỉ định cho các giao diện Nhóm.

kubectl get pods netdevice-l3-pod -o yaml

Trong ví dụ được cung cấp, trường networking.gke.io/pod-ips chứa địa chỉ IP liên kết với giao diện nhóm từ mạng l3 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 tuyến đường netdevice-l3-pod

Bên trong Cloud Shell, 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 giao diện 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 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 xác thực các tuyến đường đế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 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 shell đám mây, hãy thoát khỏi nhóm thực thể.

exit

12. Tạo nhóm l3

Trong phần sau, bạn sẽ tạo một chiếc bận rộn chạy bộ l3 nhóm, còn được gọi là "Dao Thụy Sĩ" hỗ trợ hơn 300 lệnh phổ biến. Nhóm được định cấu hình để giao tiếp với l3-vpc chỉ bằng eth1.

Bên 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

Bên 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 nhóm l3

Bên trong Cloud Shell, xác thực 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

Bên trong Cloud Shell, hãy xác thực địa chỉ IP được chỉ định cho các giao diện Nhóm.

kubectl get pods l3-pod -o yaml

Trong ví dụ được cung cấp, trường networking.gke.io/pod-ips chứa địa chỉ IP liên kết với giao diện nhóm từ mạng l3. Địa chỉ IP mạng mặc định 10.0.2.12 được nêu 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 tuyến đường nhóm l3

Bên trong Cloud Shell, 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 giao diện nhóm:

ifconfig

Trong ví dụ, 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ừ nhóm l3 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 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 shell đám mây, hãy thoát khỏi nhóm thực thể.

exit

13. Cập nhật tường lửa

Để cho phép kết nối từ nhóm đa kênh (multicnic-pool) của GKE với các quy tắc tường lửa netdevice-vpc và l3-vpc. Bạn sẽ tạo các quy tắc tường lửa chỉ định phạm vi nguồn làm mạng con của mạng nhóm, ví dụ: netdevice-subnet, sec-range-l3-subnet.

Ví dụ, vùng chứa được tạo gần đây, giao diện l3-pod, 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

Bên trong Cloud Shell, hãy tạo quy tắc tường lửa trong netdevice-vpc, cho phép truy cập netdevice-subnet vào phiên bản 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

Bên trong Cloud Shell, tạo quy tắc tường lửa trong l3-vpc cho phép truy cập sec-range-l3-subnet truy cập vào phiên bản 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 nhóm

Trong phần sau, bạn sẽ xác minh khả năng kết nối với các thực thể Apache từ netdevice-l3-pod và l3-pod bằng cách đăng nhập vào các nhóm và chạy wget -S để xác thực việc tải xuống trang chủ của máy chủ apache. Vì netdevice-l3-pod được định cấu hình bằng các giao diện từ mạng netdevice và mạng l3, nên có thể kết nối với máy chủ Apache trong netdevice-vpc và l3-vpc.

Ngược lại, khi thực hiện wget -S từ l3-pod, 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 với giao diện từ mạng l3.

Lấy địa chỉ IP của máy chủ Apache

Từ Cloud Console, lấy địa chỉ IP của các máy chủ Apache bằng cách chuyển đến Compute Engine → các phiên bản VM

fee492b4fd303859.png

kiểm tra khả năng kết nối của netdevice-l3-pod với netdevice-apache

Bên 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, thực hiện lệnh ping đến phiên bản netdevice-apache dựa trên địa chỉ IP thu được từ 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
/ # 

Bên trong Cloud Shell, thực hiện lệnh wget -S sang phiên bản netdevice-apache dựa trên địa chỉ IP thu được ở bước trước, 200 OK cho biết đã 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
/ # 

kiểm tra khả năng kết nối của netdevice-l3-pod với l3-apache

Bên 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 thu được từ 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
/ # 

Bên trong Cloud Shell, xoá tệp site.html trước đó rồi thực hiện một phiên bản wget -S sang l3-apache dựa trên địa chỉ IP thu được từ bước trước, giá trị 200 OK cho biết trang web đã tải 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 shell đám mây, hãy thoát khỏi nhóm thực thể.

exit

kiểm thử khả năng kết nối l3-pod với netdevice-apache

Bên 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, thực hiện lệnh ping đến phiên bản netdevice-apache dựa trên địa chỉ IP thu được từ bước trước. Vì l3-pod không có giao diện được liên kết với netdevice-network nên thao tác 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: Bên trong Cloud Shell, hãy thực hiện lệnh wget -S sang thực thể 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 của l3-pod với l3-apache

Bên 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 thu được từ 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
/ # 

Bên trong Cloud Shell, thực hiện lệnh wget -S sang l3-apache dựa trên địa chỉ IP thu được từ bước trước, 200 OK cho biết đã tải trang web xuống thành công.

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 về tường lửa cho phép bạn kiểm tra, xác minh và phân tích ảnh hưởng của các quy tắc về tường lửa. Ví dụ: bạn có thể xác định xem quy tắc tường lửa được thiết kế để từ chối lưu lượng truy cập có đang hoạt động như dự định hay không. Ghi nhật ký quy tắc về 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 truy cập. Hãy cùng xem thông tin thu được từ nhật ký.

Trong Cloud Console, hãy chuyển đến phần Ghi nhật ký → 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 rồi chọn Chạy truy vấn jsonPayload.rules_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances")

280d00f2c5ce6109.pngS

Xem xét kỹ hơn ảnh chụp sẽ cung cấp các yếu tố thông tin cho quản trị viên bảo mật; khác nhau, từ Địa chỉ IP nguồn và đích, cổng, giao thức và tên nhóm nút.

ae4638ed9b718ac6.png

Để khám phá thêm nhật ký tường lửa, hãy chuyển đến phần Mạng VPC → Tường lửa → allow-ingress-from-netdevice-network-to-all-vpc-instances, sau đó chọn chế độ xem trong Logs Explorer (Trình khám phá nhật ký).

16. Dọn dẹp

Trên 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 nhóm nút đa phương tiện và tạo các nhóm chạy bận rộn để xác thực khả năng kết nối Loại thiết bị và L3 với máy chủ Apache bằ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 gói nguồn và gói đích giữa Vùng chứa nhóm và máy chủ Apache.

Cosmopup cho rằng các video hướng dẫn rất tuyệt vời!!

e6d3675ca7c6911f.jpeg

Tài liệu đọc thêm & Video

Tài liệu tham khảo