Deploy dan Validasi GKE NFO Multi-Jaringan & Antarmuka Performa Tinggi

1. Pengantar

GCP telah lama mendukung beberapa antarmuka di tingkat instance VM. Dengan beberapa antarmuka, satu VM dapat menghubungkan hingga 7 antarmuka baru (default + 7 antarmuka) ke berbagai VPC. Jaringan GKE kini memperluas perilaku ini ke Pod yang berjalan di Node. Sebelum fitur ini, cluster GKE memungkinkan semua NodePool hanya untuk memiliki satu antarmuka, sehingga dipetakan ke satu VPC. Dengan fitur Multi-Jaringan di Pod, pengguna kini dapat mengaktifkan lebih dari satu antarmuka pada Node dan Pod di cluster GKE.

Yang akan Anda bangun

Dalam tutorial ini, Anda akan membangun lingkungan multinic GKE komprehensif yang menggambarkan kasus penggunaan yang diilustrasikan pada Gambar 1.

  1. Buat netdevice-l3-pod dengan memanfaatkan workingbox untuk:
  2. Lakukan PING & {i>wget -S<i} ke instance netdevice-apache di netdevice-vpc melalui eth2
  3. Lakukan PING & wget -S ke instance l3-apache di l3-vpc melalui eth1
  4. Membuat l3-pod dengan memanfaatkan {i>sibukbox<i} untuk melakukan PING & wget -S ke instance l3-apache di atas eth1

Pada kedua kasus penggunaan tersebut, antarmuka eth0 dari pod terhubung ke jaringan default.

Gambar 1

9d93019ee608587f.pngS

Yang akan Anda pelajari

  • Cara membuat subnet jenis l3
  • Cara membuat subnet jenis netdevice
  • Cara membangun node pool GKE multi-nic
  • Cara membuat pod dengan kemampuan netdevice dan l3
  • Cara membuat pod dengan kemampuan l3
  • Cara membuat dan memvalidasi jaringan objek GKE
  • Cara memvalidasi konektivitas ke server Apache jarak jauh menggunakan log PING, wget, dan Firewall

Yang Anda butuhkan

  • Project Google Cloud

2. Terminologi dan Konsep

VPC Utama: VPC utama adalah VPC yang telah dikonfigurasi sebelumnya, yang dilengkapi dengan serangkaian setelan dan resource default. Cluster GKE dibuat di VPC ini.

Subnet: Di Google Cloud, subnet adalah cara untuk membuat Classless Inter-Domain Routing (CIDR) dengan netmask di VPC. Subnet memiliki satu rentang alamat IP primer yang ditetapkan ke node dan dapat memiliki beberapa rentang sekunder yang bisa dimiliki Pod dan Service.

Node-jaringan: Jaringan node mengacu pada kombinasi khusus dari pasangan VPC dan subnet. Dalam jaringan node ini, node yang termasuk dalam kumpulan node adalah alamat IP yang dialokasikan dari rentang alamat IP utama.

Rentang sekunder: Rentang sekunder Google Cloud adalah CIDR dan netmask milik sebuah region di VPC. GKE menggunakannya sebagai jaringan Pod Lapisan 3. VPC dapat memiliki beberapa rentang sekunder, dan Pod dapat terhubung ke beberapa jaringan Pod.

Jaringan (L3 atau perangkat): Objek jaringan yang berfungsi sebagai titik koneksi untuk Pod. Dalam tutorial, jaringannya adalah l3-network dan netdevice-network, tempat perangkat dapat berupa netdevice atau dpdk. Jaringan default bersifat wajib dan dibuat saat pembuatan cluster berdasarkan subnet nodepool default.

Jaringan Lapisan 3 sesuai dengan rentang sekunder pada subnet, yang direpresentasikan sebagai:

VPC -> Nama Subnet -> Nama Rentang Sekunder

Jaringan perangkat berkaitan dengan subnet pada VPC, yang direpresentasikan sebagai:

VPC -> Nama Subnet

Jaringan Pod default: Google Cloud membuat jaringan Pod default selama pembuatan cluster. Jaringan Pod-default menggunakan VPC utama sebagai jaringan node. Jaringan Pod default tersedia di semua node cluster dan Pod secara default.

Pod dengan beberapa antarmuka: Pod dengan beberapa antarmuka di GKE tidak dapat terhubung ke jaringan Pod yang sama karena setiap antarmuka Pod harus terhubung ke jaringan unik.

Mengupdate project agar mendukung codelab

Codelab ini menggunakan $variables untuk membantu implementasi konfigurasi gcloud di Cloud Shell.

Di dalam Cloud Shell, lakukan hal berikut:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. Penyiapan VPC Utama

Membuat VPC utama

Di dalam Cloud Shell, lakukan hal berikut:

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

Membuat node dan subnet sekunder

Di dalam Cloud Shell, lakukan hal berikut:

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. Pembuatan cluster GKE

Buat cluster GKE pribadi yang menentukan subnet primer-vpc untuk membuat node pool default dengan flag yang diperlukan –enable-multi-networking dan –enable-dataplane-v2 untuk mendukung node pool multi-nic.

Di dalam Cloud Shell, buat cluster 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

Memvalidasi cluster multinic-gke

Di dalam Cloud Shell, lakukan autentikasi dengan cluster:

gcloud container clusters get-credentials multinic-gke --zone us-central1-a --project $projectid

Di dalam Cloud Shell, validasi dua node dihasilkan dari kumpulan default:

kubectl get nodes

Contoh:

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. pengaturan netdevice-vpc

Membuat jaringan netdevice-vpc

Di dalam Cloud Shell, lakukan hal berikut:

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

Membuat subnet netdevice-vpc

Di dalam Cloud Shell, buat subnet yang digunakan untuk jaringan multinic netdevice-network:

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

Di dalam Cloud Shell, buat subnet untuk instance 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

Konfigurasi Cloud Router dan NAT

Cloud NAT digunakan dalam tutorial untuk penginstalan paket software karena instance VM tidak memiliki alamat IP eksternal.

Di dalam Cloud Shell, buat router cloud.

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

Di dalam Cloud Shell, buat gateway 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

Membuat instance netdevice-apache

Di bagian berikut, Anda akan membuat instance netdevice-apache.

Di dalam Cloud Shell, buat instance:

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. Pengaturan l3-vpc

Membuat jaringan l3-vpc

Di dalam Cloud Shell, lakukan hal berikut:

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

Membuat subnet l3-vpc

Di dalam Cloud Shell, buat subnet rentang utama dan sekunder. {i>Secondary-range<i} (sec-range-l3-subnet) digunakan untuk jaringan l3-multinik:

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

Di dalam Cloud Shell, buat subnet untuk instance 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

Konfigurasi Cloud Router dan NAT

Cloud NAT digunakan dalam tutorial untuk penginstalan paket software karena instance VM tidak memiliki alamat IP eksternal.

Di dalam Cloud Shell, buat router cloud.

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

Di dalam Cloud Shell, buat gateway 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

Membuat instance l3-apache

Di bagian berikut, Anda akan membuat instance l3-apache.

Di dalam Cloud Shell, buat instance:

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. Membuat node pool multinic

Di bagian berikut, Anda akan membuat nodepool multinic yang terdiri dari flag berikut:

–additional-node-network (Diperlukan untuk antarmuka Jenis perangkat)

Contoh:

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

–additional-node-network & –additional-pod-network ( Diperlukan untuk antarmuka jenis L3)

Contoh:

--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

Jenis mesin: Saat men-deploy kumpulan node, pertimbangkan dependensi jenis mesin. Misalnya, jenis mesin seperti "e2-standard-4" dengan 4 vCPU dapat mendukung hingga total 4 VPC. Sebagai contoh, netdevice-l3-pod akan memiliki total 3 interface (default, netdevice dan L3) sehingga jenis mesin yang digunakan dalam tutorial adalah e2-standard-4.

Di dalam Cloud Shell, buat node pool yang terdiri dari Jenis Perangkat dan 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. Memvalidasi kumpulan node multnic

Di dalam Cloud Shell, validasi tiga node yang dihasilkan dari multinic-node-pool:

kubectl get nodes

Contoh:

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. Membuat jaringan netdevice

Pada langkah-langkah berikut, Anda akan membuat objek kubernetes Jaringan dan GKENetworkParamSet untuk membuat netdevice-network yang akan digunakan untuk mengaitkan Pod di langkah-langkah berikutnya.

Membuat objek netdevice-network

Di dalam Cloud Shell, buat objek jaringan YAML netdevice-network.yaml menggunakan editor VI atau nano. Catat "rute ke" adalah subnet 172.16.10.0/28 (netdevice-apache) di 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"

Di dalam Cloud Shell, terapkan netdevice-network.yaml:

kubectl apply -f netdevice-network.yaml 

Di dalam Cloud Shell, validasi bahwa Jenis Status netdevice-network adalah Siap.

kubectl describe networks netdevice-network

Contoh:

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>

Membuat GKENetworkParamSet

Di dalam Cloud Shell, buat objek jaringan YAML netdevice-network-parm.yaml menggunakan editor VI atau nano. Spesifikasi ini dipetakan ke deployment subnet netdevice-vpc.

apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
    name: "netdevice"
spec:
    vpc: "netdevice-vpc"
    vpcSubnet: "netdevice-subnet"
    deviceMode: "NetDevice"

Di dalam Cloud Shell, terapkan netdevice-network-parm.yaml

kubectl apply -f netdevice-network-parm.yaml 

Di dalam Cloud Shell, validasi Status Alasan GNPParmsReady dan NetworkReady netdevice-network:

kubectl describe networks netdevice-network

Contoh:

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>

Di dalam Cloud Shell, validasi blok CIDR gkenetworkparamset 192.168.10.0/24 yang digunakan untuk antarmuka Pod di langkah berikutnya.

kubectl describe gkenetworkparamsets.networking.gke.io netdevice

Contoh:

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. Membuat jaringan l3

Pada langkah-langkah berikut, Anda akan membuat objek kubernetes Jaringan dan GKENetworkParamSet untuk membuat jaringan l3 yang akan digunakan untuk mengaitkan Pod di langkah-langkah berikutnya.

Membuat objek jaringan l3

Di dalam Cloud Shell, buat objek jaringan YAML l3-network.yaml menggunakan editor VI atau nano. Catat "rute ke" adalah subnet 172.16.20.0/28 (l3-apache) di 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"

Di dalam Cloud Shell, terapkan l3-network.yaml:

kubectl apply -f l3-network.yaml 

Di dalam Cloud Shell, validasi Jenis Status l3-network adalah Siap.

kubectl describe networks l3-network

Contoh:

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>

Membuat GKENetworkParamSet

Di dalam Cloud Shell, buat objek jaringan YAML l3-network-parm.yaml menggunakan editor VI atau nano. Perhatikan bahwa spesifikasi ini dipetakan ke deployment subnet 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"

Di dalam Cloud Shell, terapkan l3-network-parm.yaml

kubectl apply -f l3-network-parm.yaml 

Di dalam Cloud Shell, validasi bahwa Alasan Status jaringan l3 adalah GNPParmsReady dan NetworkReady:

kubectl describe networks l3-network

Contoh:

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>

Di dalam Cloud Shell, validasi CIDR gkenetworkparamset l3-network 10.0.8.0/21 yang digunakan untuk membuat antarmuka pod.

kubectl describe gkenetworkparamsets.networking.gke.io l3-network

Contoh:

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. Membuat netdevice-l3-pod

Pada bagian berikut, Anda akan membuat {i>crazybox<i} yang menjalankan {i>netdevice-l3-pod<i}, yang dikenal sebagai "pisau Swiss Army" yang mendukung lebih dari 300 perintah umum. Pod dikonfigurasi untuk berkomunikasi dengan l3-vpc menggunakan eth1 dan netdevice-vpc menggunakan eth2.

Di dalam Cloud Shell, buat container kotak sibuk bernama netdevice-l3-pod.yaml menggunakan editor VI atau 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

Di dalam Cloud Shell, terapkan netdevice-l3-pod.yaml

kubectl apply -f netdevice-l3-pod.yaml

Memvalidasi pembuatan netdevice-l3-pod

Di dalam Cloud Shell, validasi bahwa netdevice-l3-pod sedang berjalan:

kubectl get pods netdevice-l3-pod

Contoh:

user@$ kubectl get pods netdevice-l3-pod 
NAME               READY   STATUS    RESTARTS   AGE
netdevice-l3-pod   1/1     Running   0          74s

Di dalam Cloud Shell, validasi alamat IP yang ditetapkan ke antarmuka Pod.

kubectl get pods netdevice-l3-pod -o yaml

Dalam contoh yang diberikan, kolom networking.gke.io/pod-ips berisi alamat IP yang terkait dengan antarmuka pod dari l3-network dan netdevice-network. Alamat IP jaringan default 10.0.1.22 dirinci di bawah 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"

Memvalidasi rute netdevice-l3-pod

Di dalam Cloud Shell, validasi rute ke netdevice-vpc dan l3-vpc dari netdevice-l3-pod:

kubectl exec --stdin --tty netdevice-l3-pod   -- /bin/sh

Buat instance, validasi antarmuka pod:

ifconfig

Pada contoh tersebut, eth0 terhubung ke jaringan default, eth1 terhubung ke jaringan l3, dan eth2 terhubung ke jaringan netdevice-.

/ # 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)

Dari netdevice-l3-pod memvalidasi rute ke netdevice-vpc (172.16.10.0/28) dan l3-vpc (172.16.20.0/28).

Buat instance, validasi rute pod:

ip route

Contoh:

/ # 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 

Untuk kembali ke Cloud Shell, keluar dari pod dari instance.

exit

12. Membuat l3-pod

Pada bagian berikut ini, Anda akan membuat {i>crazybox<i} yang menjalankan l3-pod, yang dikenal sebagai "pisau Swiss Army" yang mendukung lebih dari 300 perintah umum. Pod dikonfigurasi untuk berkomunikasi dengan l3-vpc hanya menggunakan eth1.

Di dalam Cloud Shell, buat container kotak yang sibuk bernama l3-pod.yaml menggunakan editor VI atau 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

Di dalam Cloud Shell, terapkan l3-pod.yaml

kubectl apply -f l3-pod.yaml

Memvalidasi pembuatan l3-pod

Di dalam Cloud Shell, validasi bahwa netdevice-l3-pod sedang berjalan:

kubectl get pods l3-pod

Contoh:

user@$ kubectl get pods l3-pod
NAME     READY   STATUS    RESTARTS   AGE
l3-pod   1/1     Running   0          52s

Di dalam Cloud Shell, validasi alamat IP yang ditetapkan ke antarmuka Pod.

kubectl get pods l3-pod -o yaml

Dalam contoh yang diberikan, kolom networking.gke.io/pod-ips berisi alamat IP yang terkait dengan antarmuka pod dari l3-network. Alamat IP jaringan default 10.0.2.12 dirinci di bawah 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"

Memvalidasi rute l3-pod

Di dalam Cloud Shell, validasi rute ke l3-vpc dari netdevice-l3-pod:

kubectl exec --stdin --tty l3-pod   -- /bin/sh

Buat instance, validasi antarmuka pod:

ifconfig

Pada contoh tersebut, eth0 terhubung ke jaringan default, eth1 terhubung ke jaringan 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)

Dari l3-pod memvalidasi rute ke l3-vpc (172.16.20.0/28).

Buat instance, validasi rute pod:

ip route

Contoh:

/ # 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)

Untuk kembali ke Cloud Shell, keluar dari pod dari instance.

exit

13. Update firewall

Diperlukan aturan firewall masuk netdevice-vpc dan l3-vpc untuk mengizinkan konektivitas dari GKE multicnic-pool. Anda akan membuat aturan firewall yang menentukan rentang sumber sebagai subnet jaringan pod, misalnya {i>netdevice-subnet<i}, {i>sec-range-l3-subnet<i}.

Sebagai contoh, kontainer yang baru dibuat, l3-pod, antarmuka eth2 10.0.8.22 (dialokasikan dari sec-range-l3-subnet) adalah alamat IP sumber saat terhubung ke instance l3-apache di l3-vpc.

netdevice-vpc: Izinkan dari netdevice-subnet ke netdevice-apache

Di dalam Cloud Shell, buat aturan firewall di netdevice-vpc yang memungkinkan akses netdevice-subnet ke instance 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: Mengizinkan dari sec-range-l3-subnet ke l3-apache

Di dalam Cloud Shell, buat aturan firewall di l3-vpc yang memungkinkan akses sec-range-l3-subnet ke instance 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. Memvalidasi konektivitas pod

Di bagian berikut, Anda akan memverifikasi konektivitas ke instance Apache dari netdevice-l3-pod dan l3-pod dengan login ke pod dan menjalankan wget -S yang memvalidasi download dari halaman beranda server apache. Karena netdevice-l3-pod dikonfigurasi dengan antarmuka dari jaringan netdevice-dan l3-jaringan, konektivitas ke server Apache di netdevice-vpc dan l3-vpc dimungkinkan.

Sebaliknya, saat melakukan wget -S dari l3-pod, konektivitas ke server Apache di netdevice-vpc tidak mungkin dilakukan karena l3-pod hanya dikonfigurasi dengan antarmuka dari jaringan l3.

Mendapatkan Alamat IP Server Apache

Dari Cloud Console, dapatkan alamat IP server Apache dengan membuka Compute Engine → VM instances

fee492b4fd303859.png

uji konektivitas netdevice-l3-pod ke netdevice-apache

Di dalam Cloud Shell, login ke netdevice-l3-pod:

kubectl exec --stdin --tty netdevice-l3-pod   -- /bin/sh

Dari container, lakukan ping ke instance netdevice-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya.

ping <insert-your-ip> -c 4

Contoh:

/ #  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
/ # 

Di dalam Cloud Shell, jalankan wget -S ke instance netdevice-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya, 200 OK menunjukkan download halaman yang berhasil.

wget -S <insert-your-ip>

Contoh:

/ # 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
/ # 

uji konektivitas netdevice-l3-pod ke l3-apache

Di dalam Cloud Shell, lakukan ping ke instance l3-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya.

ping <insert-your-ip> -c 4

Contoh:

/ # 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
/ # 

Di dalam Cloud Shell, hapus file index.html sebelumnya dan jalankan instance wget -S to l3-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya, 200 OK menunjukkan download halaman yang berhasil.

rm index.html 
wget -S <insert-your-ip>

Contoh:

/ # 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

Untuk kembali ke Cloud Shell, keluar dari pod dari instance.

exit

Uji konektivitas l3-pod ke netdevice-apache

Di dalam Cloud Shell, login ke l3-pod:

kubectl exec --stdin --tty l3-pod   -- /bin/sh

Dari container, lakukan ping ke instance netdevice-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya. Karena l3-pod tidak memiliki antarmuka yang terkait dengan netdevice-network, ping akan gagal.

ping <insert-your-ip> -c 4

Contoh:

/ # 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

Opsional: Di dalam Cloud Shell, jalankan instance wget -S ke netdevice-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya yang akan habis waktu tunggunya.

wget -S <insert-your-ip>

Contoh:

/ # 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

Uji konektivitas l3-pod ke l3-apache

Di dalam Cloud Shell, lakukan ping ke instance l3-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya.

ping <insert-your-ip> -c 4

Contoh:

/ # 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
/ # 

Di dalam Cloud Shell, jalankan instance wget -S to l3-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya, 200 OK menunjukkan download halaman yang berhasil.

wget -S <insert-your-ip>

Contoh:

/ # 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. Log firewall

Firewall Rules Logging memungkinkan Anda mengaudit, memverifikasi, dan menganalisis efek aturan firewall Anda. Misalnya, Anda dapat menentukan apakah aturan firewall yang didesain untuk menolak traffic berfungsi sebagaimana mestinya. Firewall Rules Logging juga berguna jika Anda perlu menentukan jumlah koneksi yang terpengaruh oleh aturan firewall tertentu.

Dalam tutorial ini, Anda telah mengaktifkan logging firewall saat membuat aturan firewall masuk. Mari kita lihat informasi yang diperoleh dari log.

Dari Konsol Cloud, buka Logging → Logs Explorer

Masukkan kueri di bawah ini sesuai screenshot dan pilih Run query jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances")

280d00f2c5ce6109.pngS

Melihat lebih dekat pada tangkapan layar memberikan elemen informasi untuk administrator keamanan; mulai dari Alamat IP sumber dan tujuan, porta, protokol, dan nama node pool.

ae4638ed9b718ac6.png

Untuk mempelajari log firewall lebih lanjut, buka Jaringan VPC → Firewall → allow-ingress-from-netdevice-network-to-all-vpc-instances, lalu pilih lihat di Logs Explorer.

16. Pembersihan

Dari Cloud Shell, hapus komponen tutorial.

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. Selamat

Selamat, Anda telah berhasil mengonfigurasi dan memvalidasi pembuatan node pool multinic dan membuat pod yang menjalankan sibukbox untuk memvalidasi konektivitas L3 dan Jenis perangkat ke server Apache menggunakan PING dan wget.

Anda juga telah mempelajari cara memanfaatkan log firewall untuk memeriksa paket sumber dan tujuan antara container Pod dan server Apache.

Cosmopup menganggap tutorialnya luar biasa!!

e6d3675ca7c6911f.jpeg

Bacaan lebih lanjut & Video

Dokumen referensi