GKE NFO Çoklu Ağını Dağıtma ve Doğrulama Yüksek Performanslı Arayüz

1. Giriş

GCP uzun süredir sanal makine örneği düzeyinde birden fazla arayüzü destekliyor. Çoklu arayüzler sayesinde bir sanal makine, farklı VPC'lere en fazla 7 yeni arayüz (varsayılan + 7 arayüz) bağlayabilir. GKE Networking artık bu davranışı düğümler üzerinde çalışan kapsüllere kadar genişletiyor. Bu özellikten önce GKE kümeleri, tüm NodePool'ların yalnızca tek bir arayüze sahip olmasına ve bu nedenle tek bir VPC'ye eşlenmesine olanak tanıyordu. Kapsüllerde Çoklu Ağ özelliği sayesinde kullanıcılar artık GKE kümesindeki Düğümler ve Kapsüller için birden fazla arayüzü etkinleştirebilir.

Oluşturacaklarınız

Bu eğiticide, Şekil 1'de gösterilen kullanım alanlarını gösteren kapsamlı bir GKE çoklu ortam oluşturacaksınız.

  1. Meşgul kutucuğunu kullanarak netdevice-l3-pod oluşturarak:
  2. PING çal ve eth2 üzerinden netdevice-vpc'de wget -S'den netdevice-apache örneğine
  3. PING çal ve l3-vpc'de eth1 üzerinden wget -S to l3-apache örneğine
  4. Bir PING işlemi gerçekleştirmek için işlek kutu kullanarak l3 kapsüllü eth1 üzerinden wget -S'den l3-apache örneğine

Her iki kullanım alanında da kapsülün eth0 arayüzü varsayılan ağa bağlıdır.

1. Şekil

9d93019ee608587f.png

Neler öğreneceksiniz?

  • l3 türü alt ağ oluşturma
  • Netdevice türü alt ağı oluşturma
  • Birden çok nicli GKE düğüm havuzu oluşturma
  • Netdevice ve l3 özellikleriyle kapsül oluşturma
  • l3 özelliklerine sahip bir kapsül oluşturma
  • GKE nesne ağı oluşturma ve doğrulama
  • PING, wget ve Güvenlik Duvarı günlüklerini kullanarak uzak Apache sunucularıyla bağlantıyı doğrulama

Gerekenler

  • Google Cloud Projesi

2. Terminoloji ve Kavramlar

Birincil VPC: Birincil VPC, bir dizi varsayılan ayar ve kaynakla birlikte gelen, önceden yapılandırılmış bir VPC'dir. GKE kümesi bu VPC'de oluşturulur.

Alt ağ: Google Cloud'da alt ağ, VPC'de ağ maskeleriyle Sınıfsız Alanlar Arası Yönlendirme (CIDR) oluşturmanın yoludur. Bir alt ağın, düğümlere atanmış tek bir birincil IP adresi aralığı vardır. Alt ağın, kapsüllere ve hizmetlere ait olabilecek birden çok ikincil aralığı olabilir.

Düğüm-ağ: Düğüm-ağ, VPC ve alt ağ çiftinin özel bir kombinasyonunu ifade eder. Bu düğüm ağında, düğüm havuzuna ait düğümlere birincil IP adresi aralığındaki IP adresleri ayrılır.

İkincil aralık: Google Cloud ikincil aralığı, VPC'deki bir bölgeye ait olan CIDR ve ağ maskesidir. GKE, bunu 3. Katman Kapsül ağı olarak kullanır. VPC'nin birden fazla ikincil aralığı olabilir ve bir Kapsül, birden çok Kapsül ağına bağlanabilir.

Ağ (L3 veya cihaz): Kapsüller için bağlantı noktası işlevi gören bir ağ nesnesi. Eğiticideki ağlar l3-network ve netdevice-network şeklindedir ve cihaz, netdevice ya da dpdk olabilir. Varsayılan ağ zorunludur ve küme oluşturulduktan sonra varsayılan düğüm havuzu alt ağına göre oluşturulur.

3. katman ağları, alt ağda şu şekilde temsil edilen ikincil bir aralığa karşılık gelir:

VPC -> Alt Ağ Adı -> İkincil Aralık Adı

Cihaz ağı, VPC üzerindeki bir alt ağa karşılık gelir ve şu şekilde gösterilir:

VPC -> Alt Ağ Adı

Varsayılan Kapsül ağı: Google Cloud, küme oluşturma sırasında varsayılan bir Kapsül ağı oluşturur. Varsayılan Kapsül ağı, düğüm ağı olarak birincil VPC'yi kullanır. Varsayılan Kapsül ağı, varsayılan olarak tüm küme düğümlerinde ve Kapsüllerde kullanılabilir.

Birden çok arayüze sahip kapsüller: GKE'de birden fazla arayüze sahip kapsüller, Kapsül'ün her arayüzünün benzersiz bir ağa bağlı olması gerektiğinden aynı Kapsül ağına bağlanamaz.

Codelab'i desteklemek için projeyi güncelleme

Bu Codelab, Cloud Shell'de gcloud yapılandırması uygulamasına yardımcı olmak için $variables kullanır.

Cloud Shell'in içinde aşağıdaki işlemleri gerçekleştirin:

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

3. Birincil VPC kurulumu

Birincil VPC'yi oluşturma

Cloud Shell'in içinde aşağıdaki işlemleri gerçekleştirin:

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

Düğümü ve ikincil alt ağları oluşturma

Cloud Shell'in içinde aşağıdaki işlemleri gerçekleştirin:

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. GKE kümesi oluşturma

Çoklu nic düğüm havuzlarını desteklemek için gerekli –enable-multi-networking ve –enable-dataplane-v2 işaretleriyle varsayılan düğüm havuzunu oluşturmak için birincil-vpc alt ağlarını belirten özel GKE kümesini oluşturun.

Cloud Shell'in içinde GKE kümesini oluşturun:

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

multinic-gke kümesini doğrulama

Cloud Shell'in içinde, kümeyle kimlik doğrulayın:

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

Cloud Shell'in içinde, varsayılan havuzdan iki düğümün oluşturulduğunu doğrulayın:

kubectl get nodes

Örnek:

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

netdevice-vpc ağını oluşturma

Cloud Shell'in içinde aşağıdaki işlemleri gerçekleştirin:

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

netdevice-vpc alt ağlarını oluşturma

Cloud Shell'de çoklu ağ için kullanılan alt ağı oluşturun:

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

Cloud Shell'in içinde netdevice-apache örneği için bir alt ağ oluşturun:

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

Cloud Yönlendirici ve NAT yapılandırması

Sanal makine örneğinin harici bir IP adresi olmadığından yazılım paketi kurulumu için Cloud NAT kullanılır.

Cloud Shell'in içinde bulut yönlendiricisini oluşturun.

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

Cloud Shell'in içinde NAT ağ geçidini oluşturun.

gcloud compute routers nats create cloud-nat-netdevice --router=netdevice-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

netdevice-apache örneğini oluşturma

Aşağıdaki bölümde netdevice-apache örneğini oluşturacaksınız.

Cloud Shell'in içinde örneği oluşturun:

gcloud compute instances create netdevice-apache \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=netdevice-apache \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to the netdevice-apache instance !!' | tee /var/www/html/index.html
      EOF"

6. l3-vpc kurulumu

l3-vpc ağı oluşturma

Cloud Shell'in içinde aşağıdaki işlemleri gerçekleştirin:

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

l3-vpc alt ağlarını oluşturma

Cloud Shell'in içinde birincil ve ikincil aralıklı alt ağ oluşturun. İkincil-aralık(sec-range-l3-alt ağ), çoklu l3 ağı için kullanılır:

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

Cloud Shell'in içinde l3-apache örneği için bir alt ağ oluşturun:

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

Cloud Yönlendirici ve NAT yapılandırması

Sanal makine örneğinin harici bir IP adresi olmadığından yazılım paketi kurulumu için Cloud NAT kullanılır.

Cloud Shell'in içinde bulut yönlendiricisini oluşturun.

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

Cloud Shell'in içinde NAT ağ geçidini oluşturun.

gcloud compute routers nats create cloud-nat-l3 --router=l3-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

l3-apache örneğini oluşturma

Aşağıdaki bölümde l3-apache örneğini oluşturacaksınız.

Cloud Shell'in içinde örneği oluşturun:

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. Çoklu düğüm havuzunu oluşturma

Aşağıdaki bölümde, aşağıdaki flag'lerden oluşan bir çoklu düğüm havuzu oluşturacaksınız:

–additional-node-network (Cihaz türü arayüzleri için gereklidir)

Örnek:

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

–ek-düğüm-ağ ve –additional-pod-network ( L3 türü arayüzler için gereklidir)

Örnek:

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

Makine türü: Düğüm havuzunu dağıtırken makine türü bağımlılığını göz önünde bulundurun. Örneğin, "e2-standard-4" gibi bir makine türü en fazla 4 VPC'yi destekleyebilir. Örneğin, netdevice-l3-pod, toplam 3 arayüze (varsayılan, netdevice ve l3) sahiptir. Bu nedenle, eğitimde kullanılan makine türü e2-standard-4'tür.

Cloud Shell'de, bir Tür Cihaz ve L3'ten oluşan düğüm havuzunu oluşturun:

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. Çok düğümlü düğüm havuzunu doğrulama

Cloud Shell'in içinde, çoklu düğüm havuzundan üç düğüm oluşturulduğunu doğrulayın:

kubectl get nodes

Örnek:

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. netdevice-network'ü oluşturma

Aşağıdaki adımlarda Network ve GKENetworkParamSet kubernetes nesnesi oluşturarak sonraki adımlarda kapsülleri ilişkilendirmek için kullanılacak netdevice-network oluşturacaksınız.

netdevice-network nesnesini oluşturma

Cloud Shell'in içinde VI düzenleyici veya nano kullanarak YAML netdevice-network.yaml ağ nesnesini oluşturun. "Şuna yönlendirir:" netdevice-vpc'deki 172.16.10.0/28 (netdevice-apache) alt ağıdır.

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"

Cloud Shell'in içinde netdevice-network.yaml uygulamasını uygulayın:

kubectl apply -f netdevice-network.yaml 

Cloud Shell'in içinde netdevice-network Durum Türünün "Hazır" olduğunu doğrulayın.

kubectl describe networks netdevice-network

Örnek:

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>

GKENetworkParamSet'i oluşturma

Cloud Shell'de, VI düzenleyici veya nano kullanarak YAML netdevice-network-parm.yaml ağ nesnesini oluşturun. Bu spesifikasyon, netdevice-vpc alt ağ dağıtımıyla eşlenir.

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

Cloud Shell'in içinde netdevice-network-parm.yaml uygulayın

kubectl apply -f netdevice-network-parm.yaml 

Cloud Shell'de, netdevice-network Durum Nedeni GNPParmsReady ve NetworkReady'yi doğrulayın:

kubectl describe networks netdevice-network

Örnek:

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>

Cloud Shell'in içinde, sonraki bir adımda Kapsüller arayüzü için kullanılan gkenetworkparamset CIDR bloğunu(192.168.10.0/24) doğrulayın.

kubectl describe gkenetworkparamsets.networking.gke.io netdevice

Örnek:

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. l3 ağları oluşturma

Aşağıdaki adımlarda Network ve GKENetworkParamSet kubernetes nesnesi oluşturarak sonraki adımlarda kapsülleri ilişkilendirmek için kullanılacak l3 ağını oluşturacaksınız.

l3 ağ nesnesini oluşturma

Cloud Shell'in içinde VI düzenleyici veya nano kullanarak YAML l3-network.yaml ağ nesnesini oluşturun. "Şuna yönlendirir:" l3-vpc'deki 172.16.20.0/28 (l3-apache) alt ağıdır.

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"

Cloud Shell'in içinde l3-network.yaml uygulayın:

kubectl apply -f l3-network.yaml 

Cloud Shell'in içinde l3-network Durum Türünün "Hazır" olduğunu doğrulayın.

kubectl describe networks l3-network

Örnek:

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>

GKENetworkParamSet oluşturma

Cloud Shell'de, VI düzenleyici veya nano kullanarak YAML l3-network-parm.yaml ağ nesnesini oluşturun. Belirtilen özelliğin l3-vpc alt ağ dağıtımıyla eşlendiğini unutmayın.

apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
  name: "l3-network"
spec:
  vpc: "l3-vpc"
  vpcSubnet: "l3-subnet"
  podIPv4Ranges:
    rangeNames:
    - "sec-range-l3-subnet"

Cloud Shell'in içinde l3-network-parm.yaml uygulayın

kubectl apply -f l3-network-parm.yaml 

Cloud Shell'de l3 ağ durum nedeninin GNPParmsReady ve NetworkReady olduğunu doğrulayın:

kubectl describe networks l3-network

Örnek:

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>

Cloud Shell'in içinde kapsül arayüzünü oluşturmak için kullanılan gkenetworkparamset l3-network CIDR 10.0.8.0/21 kodunu doğrulayın.

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

Örnek:

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. netdevice-l3-pod oluşturma

Aşağıdaki bölümde "İsviçre ordu bıçağı" olarak bilinen çalışan trafiğinizde çalışan netdevice-l3-pod'u oluşturacaksınız. yaygın olarak kullanılan komut dosyalarını destekleyen bir komut dosyası içerir. Kapsül, eth1 kullanarak l3-vpc ile ve eth2 kullanarak netdevice-vpc ile iletişim kuracak şekilde yapılandırılmıştır.

Cloud Shell'de, VI düzenleyiciyi veya nano'yu kullanarak netdevice-l3-pod.yaml adlı meşgul kutu kapsayıcısını oluşturun.

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

Cloud Shell'in içinde netdevice-l3-pod.yaml uygulamasını uygulayın

kubectl apply -f netdevice-l3-pod.yaml

netdevice-l3-pod oluşturmayı doğrulama

Cloud Shell'in içinde netdevice-l3-pod'un çalıştığını doğrulayın:

kubectl get pods netdevice-l3-pod

Örnek:

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

Cloud Shell'in içinden Kapsül arayüzlerine atanan IP adreslerini doğrulayın.

kubectl get pods netdevice-l3-pod -o yaml

Sağlanan örnekte networking.gke.io/pod-ips alanı, l3-network ve netdevice-network'ten kapsül arayüzleriyle ilişkili IP adreslerini içerir. Varsayılan ağ IP adresi olan 10.0.1.22, podIP'ler altında ayrıntılı olarak açıklanmaktadır:

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"

netdevice-l3-pod rotalarını doğrulama

Cloud Shell'in içinde netdevice-l3-pod'dan netdevice-vpc ve l3-vpc rotalarını doğrulayın:

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

Örneği oluşturun, kapsül arayüzlerini doğrulayın:

ifconfig

Örnekte, eth0 varsayılan ağa, eth1 ise l3 ağına, eth2 ise netdevice ağına bağlıdır.

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

netdevice-l3-pod'dan netdevice-vpc (172.16.10.0/28) ve l3-vpc'ye (172.16.20.0/28) giden rotaları doğrulayın.

Örneği oluşturun, kapsül rotalarını doğrulayın:

ip route

Örnek:

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

Cloud Shell'e dönmek için kapsülden örnekten çıkın.

exit

12. l3-kapsül oluşturma

Aşağıdaki bölümde "İsviçre ordu bıçağı" olarak bilinen l3 kapsüllü çalışan runningbox'ı oluşturacaksınız. yaygın olarak kullanılan komut dosyalarını destekleyen bir komut dosyası içerir. Kapsül, yalnızca eth1 kullanarak l3-vpc ile iletişim kuracak şekilde yapılandırılmıştır.

Cloud Shell'in içinde, VI düzenleyici veya nano kullanarak l3-pod.yaml adlı meşgul kutu kapsayıcısını oluşturun.

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

Cloud Shell'in içinde l3-pod.yaml uygulayın

kubectl apply -f l3-pod.yaml

l3-kapsül oluşturmayı doğrulama

Cloud Shell'in içinde netdevice-l3-pod'un çalıştığını doğrulayın:

kubectl get pods l3-pod

Örnek:

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

Cloud Shell'in içinden Kapsül arayüzlerine atanan IP adreslerini doğrulayın.

kubectl get pods l3-pod -o yaml

Sağlanan örnekte networking.gke.io/pod-ips alanı, l3-network'ten kapsül arayüzleriyle ilişkili IP adreslerini içerir. Varsayılan ağ IP adresi olan 10.0.2.12, podIP'ler altında ayrıntılı olarak açıklanmıştır:

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"

l3 kapsül rotalarını doğrulama

Cloud Shell'in içinde netdevice-l3-pod'dan l3-vpc'ye giden rotaları doğrulayın:

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

Örneği oluşturun, kapsül arayüzlerini doğrulayın:

ifconfig

Örnekte, eth0 varsayılan ağa, eth1 ise l3 ağına bağlıdır.

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

l3-podcast'ten l3-vpc'ye (172.16.20.0/28) giden rotaları doğrulayın.

Örneği oluşturun, kapsül rotalarını doğrulayın:

ip route

Örnek:

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

Cloud Shell'e dönmek için kapsülden örnekten çıkın.

exit

13. Güvenlik duvarı güncellemeleri

GKE multimedya havuzundan netdevice-vpc'ye bağlantıya izin vermek ve l3-vpc giriş güvenlik duvarı kuralları gerekir. Kaynak aralığı kapsül ağı alt ağı olarak (ör. netdevice-subnet, sec-range-l3-subnet.

Örneğin, yeni oluşturulan l3-pod, eth2 arayüzü 10.0.8.22 (sec-range-l3-subnet ağından ayrılmış), l3-vpc'de l3-apache örneğine bağlanırken kaynak IP adresidir.

netdevice-vpc: netdevice-subnet ağından netdevice-apache'ye izin ver

Cloud Shell içinde, netdevice-subnet ağının netdevice-apache örneğine erişmesine izin veren netdevice-vpc'de güvenlik duvarı kuralını oluşturun.

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: sec-range-l3-subnet'ten l3-apache'ye izin ver

Cloud Shell'de, l3-vpc'de güvenlik duvarı kuralını oluşturarak l3-apache örneğine sec-range-l3-subnet erişimine izin verin.

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. Kapsül bağlantısını doğrulayın

Aşağıdaki bölümde, kapsüllere giriş yapıp apache sunucularının ana sayfasından yapılan indirme işlemini doğrulayan bir wget -S çalıştırarak netdevice-l3-pod ve l3-pod ile Apache örneklerine bağlantıyı doğrulayacaksınız. netdevice-l3-pod, netdevice-network ve l3-ağı kaynaklı arayüzlerle yapılandırıldığından netdevice-vpc ve l3-vpc'de Apache sunucularına bağlantı yapılabilir.

Buna karşılık, l3 kapsülden bir wget -S işlemi gerçekleştirilirken, l3 kapsülü yalnızca l3 ağındaki bir arayüzle yapılandırıldığından netdevice-vpc'deki Apache sunucusuna bağlantı mümkün değildir.

Apache Sunucu IP Adresi Alma

Cloud Console'da Compute Engine → Sanal makine örnekleri bölümüne giderek Apache sunucularının IP adreslerini alın.

fee492b4fd303859.png

netdevice-l3-pod - netdevice-apache bağlantı testi

Cloud Shell'in içinde netdevice-l3-pod'a giriş yapın:

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

Önceki adımdan alınan IP adresini temel alarak kapsayıcıdan netdevice-apache örneğine ping gönderin.

ping <insert-your-ip> -c 4

Örnek:

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

Cloud Shell'in içinde, önceki adımdan alınan IP adresine göre netdevice-apache örneğine wget -S uygulayın. 200 OK (Tamam) ise web sayfasının başarıyla indirildiğini gösterir.

wget -S <insert-your-ip>

Örnek:

/ # 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 - l3-apache bağlantı testi

Cloud Shell'in içinde, önceki adımdan alınan IP adresine göre l3-apache örneğine ping işlemi uygulayın.

ping <insert-your-ip> -c 4

Örnek:

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

Cloud Shell'de önceki index.html dosyasını silin ve önceki adımdan alınan IP adresine göre bir wget -S - l3-apache örneği gerçekleştirin. 200 OK (Tamam) ifadesi, web sayfasının başarıyla indirildiğini gösterir.

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

Örnek:

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

Cloud Shell'e dönmek için kapsülden örnekten çıkın.

exit

l3-pod'dan netdevice-apache bağlantı testi

Cloud Shell'in içinde l3-pod'a giriş yapın:

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

Önceki adımdan alınan IP adresini temel alarak kapsayıcıdan netdevice-apache örneğine ping gönderin. l3-pod'un netdevice-network ile ilişkilendirilmiş bir arayüzü olmadığından ping başarısız olur.

ping <insert-your-ip> -c 4

Örnek:

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

İsteğe bağlı: Cloud Shell'in içinde, önceki adımdan alınmış, zaman aşımına uğrayacak IP adresine göre netdevice-apache örneğine wget -S işlemi uygulayın.

wget -S <insert-your-ip>

Örnek:

/ # 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'dan l3-apache'ye bağlantı testi

Cloud Shell'in içinde, önceki adımdan alınan IP adresine göre l3-apache örneğine ping işlemi uygulayın.

ping <insert-your-ip> -c 4

Örnek:

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

Cloud Shell'in içinde, önceki adımdan alınan IP adresine göre bir wget -S - l3-apache örneği gerçekleştirin. 200 OK (Tamam) ifadesi, web sayfasının başarıyla indirildiğini gösterir.

wget -S <insert-your-ip>

Örnek:

/ # 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. Güvenlik duvarı günlükleri

Güvenlik Duvarı Kuralları Kaydı, güvenlik duvarı kurallarınızın etkilerini denetlemenizi, doğrulamanızı ve analiz etmenizi sağlar. Örneğin, trafiği reddetmek için tasarlanmış bir güvenlik duvarı kuralının amaçlandığı gibi çalışıp çalışmadığını belirleyebilirsiniz. Güvenlik Duvarı Kuralları Günlük Kaydı, belirli bir güvenlik duvarı kuralından kaç bağlantının etkilendiğini belirlemeniz gerektiğinde de yararlı olur.

Eğiticide, giriş güvenlik duvarı kurallarını oluştururken güvenlik duvarı günlük kaydını etkinleştirdiniz. Günlüklerden elde edilen bilgilere göz atalım.

Cloud Console'dan Günlük Kaydı → Günlük Gezgini'ne gidin

Ekran görüntüsüne göre aşağıdaki sorguyu ekleyin ve Sorguyu çalıştır jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances") seçeneğini belirleyin

280d00f2c5ce6109.png

Bir yakalamaya daha yakından baktığımızda güvenlik yöneticileri için bilgi sağlayabilir; Kaynak ve hedef IP adresi, bağlantı noktası, protokol ve düğüm havuzu adı gibi birçok farklı özellik bulunur.

ae4638ed9b718ac6.png

Diğer güvenlik duvarı günlüklerini keşfetmek için VPC Ağı → Güvenlik duvarı → allow-ingress-from-netdevice-network-to-all-vpc-instances bölümüne gidin, ardından Günlük Gezgini'nde görünüm seçeneğini belirleyin.

16. Temizleme

Cloud Shell'den eğitim bileşenlerini silin.

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

Tebrikler. PING ve wget kullanarak Apache sunucularıyla L3 ve cihaz türü bağlantısını doğrulamak için çok kanallı bir düğüm havuzu oluşturmayı ve meşgul kutu çalıştıran kapsüller oluşturmayı başarıyla yapılandırıp doğruladınız.

Ayrıca, Kapsül container'ları ile Apache sunucuları arasındaki kaynak ve hedef paketlerini incelemek için güvenlik duvarı günlüklerinden nasıl yararlanacağınızı öğrendiniz.

Cosmopup, eğitici videoların çok iyi olduğunu düşünüyor.

e6d3675ca7c6911f.jpeg

Daha fazla bilgi ve Videolar

Referans belgeler