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.
- Buat netdevice-l3-pod dengan memanfaatkan workingbox untuk:
- Lakukan PING & {i>wget -S<i} ke instance netdevice-apache di netdevice-vpc melalui eth2
- Lakukan PING & wget -S ke instance l3-apache di l3-vpc melalui eth1
- 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

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

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

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.

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