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, VM dapat menghubungkan hingga 7 antarmuka baru (default + 7 antarmuka) ke VPC yang berbeda. Jaringan GKE kini memperluas perilaku ini ke Pod yang berjalan di Node. Sebelum fitur ini, cluster GKE mengizinkan semua NodePool hanya memiliki satu antarmuka dan oleh karena itu dipetakan ke satu VPC. Dengan fitur Multi-Network on Pods, pengguna kini dapat mengaktifkan lebih dari satu antarmuka di Node dan untuk Pod dalam cluster GKE.

Yang akan Anda bangun

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

  1. Buat netdevice-l3-pod yang memanfaatkan busybox untuk:
  2. Lakukan PING & wget -S ke instance netdevice-apache di netdevice-vpc melalui eth2
  3. Lakukan PING & wget -S ke instance l3-apache di l3-vpc melalui eth1
  4. Buat l3-pod yang memanfaatkan busybox untuk melakukan PING & wget -S ke instance l3-apache melalui eth1

Dalam kedua kasus penggunaan, antarmuka eth0 pod terhubung ke jaringan default.

Gambar 1

9d93019ee608587f.png

Yang akan Anda pelajari

  • Cara membuat subnet jenis l3
  • Cara membuat subnet jenis netdevice
  • Cara membuat 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 PING, wget, dan log Firewall

Yang Anda butuhkan

  • Project Google Cloud

2. Terminologi dan Konsep

VPC Utama: VPC utama adalah VPC yang telah dikonfigurasi sebelumnya dan 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 dapat menjadi bagian dari Pod dan Layanan.

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

Rentang sekunder: Rentang sekunder Google Cloud adalah CIDR dan netmask yang berada di dalam 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 ini, jaringannya adalah l3-network dan netdevice-network, dengan perangkatnya dapat berupa netdevice atau dpdk. Jaringan default bersifat wajib dan dibuat saat pembuatan cluster berdasarkan subnet default-nodepool.

Jaringan Layer 3 sesuai dengan rentang sekunder di subnet, yang ditampilkan sebagai:

VPC -> Subnet Name -> Secondary Range Name

Jaringan perangkat sesuai dengan subnet di VPC, yang ditampilkan sebagai:

VPC -> Subnet Name

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 yang unik.

Perbarui project untuk mendukung codelab

Codelab ini menggunakan $variables untuk membantu penerapan 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

Buat VPC utama

Di dalam Cloud Shell, lakukan hal berikut:

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

Buat 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 dengan menentukan subnet VPC utama 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 bahwa dua node dibuat dari default-pool:

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

Buat jaringan netdevice-vpc

Di dalam Cloud Shell, lakukan hal berikut:

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

Buat subnet netdevice-vpc

Di dalam Cloud Shell, buat subnet yang digunakan untuk 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. Penyiapan l3-vpc

Buat jaringan l3-vpc

Di dalam Cloud Shell, lakukan hal berikut:

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

Buat subnet l3-vpc

Di dalam Cloud Shell, buat subnet rentang primer dan sekunder. Rentang sekunder(sec-range-l3-subnet) digunakan untuk jaringan l3 multinic:

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

Buat instance l3-apache

Di bagian berikutnya, 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. Buat node pool multinic

Di bagian berikut, Anda akan membuat node pool 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 node pool, 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 antarmuka (default, netdevice, dan l3), sehingga jenis mesin yang digunakan dalam tutorial ini adalah e2-standard-4.

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

Di dalam Cloud Shell, validasi tiga node yang dibuat 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. Buat netdevice-network

Pada langkah-langkah berikut, Anda akan membuat objek Kubernetes Network dan GKENetworkParamSet untuk membuat netdevice-network yang akan digunakan untuk mengaitkan Pod pada langkah-langkah selanjutnya.

Buat objek netdevice-network

Di dalam Cloud Shell, buat objek jaringan YAML netdevice-network.yaml menggunakan editor VI atau nano. Perhatikan bahwa "routes to" 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 Status Jenis 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 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 Alasan Status netdevice-network GNPParmsReady dan NetworkReady:

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 pada 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. Buat jaringan l3

Pada langkah-langkah berikut, Anda akan membuat objek kubernetes Network dan GKENetworkParamSet untuk membuat jaringan l3 yang akan digunakan untuk mengaitkan Pod pada langkah-langkah selanjutnya.

Buat objek jaringan l3

Di dalam Cloud Shell, buat objek jaringan YAML l3-network.yaml menggunakan editor VI atau nano. Perhatikan bahwa "routes to" 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 Status Jenis 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>

Buat GKENetworkParamSet

Di dalam Cloud Shell, buat objek jaringan YAML l3-network-parm.yaml menggunakan editor VI atau nano. Perhatikan bahwa spesifikasi 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 Alasan Status l3-network 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 gkenetworkparamset l3-network CIDR 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. Buat netdevice-l3-pod

Di bagian berikut, Anda akan membuat netdevice-l3-pod yang menjalankan busybox, yang dikenal sebagai "pisau Swiss" 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 busybox 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 dijelaskan di bagian podIPs:

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

Dalam contoh ini, eth0 terhubung ke jaringan default, eth1 terhubung ke l3-network, dan eth2 terhubung ke 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)

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

Dari 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. Buat l3-pod

Di bagian berikut, Anda akan membuat l3-pod yang menjalankan busybox, yang dikenal sebagai "pisau Swiss" yang mendukung lebih dari 300 perintah umum. Pod dikonfigurasi untuk berkomunikasi dengan l3-vpc hanya menggunakan eth1.

Di dalam Cloud Shell, buat container busybox 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 dijelaskan di bagian podIPs:

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

Dalam contoh ini, eth0 terhubung ke jaringan default, eth1 terhubung ke l3-network.

/ # 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, validasi rute ke l3-vpc (172.16.20.0/28).

Dari 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

Untuk mengizinkan konektivitas dari GKE multicnic-pool ke netdevice-vpc, aturan firewall ingress l3-vpc diperlukan. Anda akan membuat aturan firewall yang menentukan rentang sumber sebagai subnet jaringan pod, misalnya netdevice-subnet, sec-range-l3-subnet.

Sebagai contoh, container 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 mengizinkan 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: Izinkan dari sec-range-l3-subnet ke l3-apache

Di dalam Cloud Shell, buat aturan firewall di l3-vpc yang mengizinkan 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 halaman beranda server Apache. Karena netdevice-l3-pod dikonfigurasi dengan antarmuka dari netdevice-network dan l3-network, konektivitas ke server Apache di netdevice-vpc dan l3-vpc dapat dilakukan.

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 l3-network.

Mendapatkan Alamat IP Server Apache

Dari Konsol Cloud, 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, lakukan wget -S ke instance netdevice-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya. 200 OK menunjukkan bahwa download halaman web 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
/ # 

netdevice-l3-pod ke uji konektivitas 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 lakukan wget -S ke instance l3-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya. 200 OK menunjukkan bahwa download halaman web 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, lakukan wget -S ke instance netdevice-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya yang akan mengalami waktu tunggu habis.

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

l3-pod to l3-apache connectivity test

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, lakukan wget -S ke instance l3-apache berdasarkan alamat IP yang diperoleh dari langkah sebelumnya. 200 OK menunjukkan bahwa download halaman web 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 VPC memungkinkan Anda untuk mengaudit, memverifikasi, dan menganalisis efek aturan firewall Anda. Misalnya, Anda dapat menentukan apakah aturan firewall yang dirancang untuk menolak traffic berfungsi sebagaimana mestinya. Logging Aturan Firewall 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 sesuai screenshot dan pilih Run query jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances")

280d00f2c5ce6109.png

Melihat lebih dekat pengambilan data memberikan elemen informasi untuk administrator keamanan; mulai dari Alamat IP sumber dan tujuan, port, protokol, dan nama nodepool.

ae4638ed9b718ac6.png

Untuk menjelajahi log firewall lebih lanjut, buka VPC Network → Firewall → allow-ingress-from-netdevice-network-to-all-vpc-instances, lalu pilih view in 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 kumpulan node multinic dan pembuatan pod yang menjalankan busybox 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 tutorial itu luar biasa!!

e6d3675ca7c6911f.jpeg

Bacaan lebih lanjut & Video

Dokumen referensi