GKE NFO মাল্টি-নেটওয়ার্ক স্থাপন এবং যাচাই করুন & উচ্চ কর্মক্ষমতা ইন্টারফেস

1. ভূমিকা

GCP দীর্ঘকাল ধরে VM দৃষ্টান্ত স্তরে একাধিক ইন্টারফেস সমর্থন করেছে। একাধিক-ইন্টারফেসের সাথে, একটি VM 7টি পর্যন্ত নতুন ইন্টারফেস (ডিফল্ট + 7 ইন্টারফেস) বিভিন্ন VPC-তে সংযোগ করতে পারে। GKE নেটওয়ার্কিং এখন এই আচরণটি নোডগুলিতে চলমান পডগুলিতে প্রসারিত করে৷ এই বৈশিষ্ট্যের আগে, GKE ক্লাস্টারগুলি সমস্ত নোডপুলকে শুধুমাত্র একটি একক ইন্টারফেস রাখার অনুমতি দেয় এবং তাই একটি একক VPC-তে ম্যাপ করা হয়। মাল্টি-নেটওয়ার্ক অন পড বৈশিষ্ট্যের সাহায্যে, একজন ব্যবহারকারী এখন GKE ক্লাস্টারে নোড এবং পডের জন্য একাধিক একক ইন্টারফেস সক্ষম করতে পারে।

আপনি কি নির্মাণ করবেন

এই টিউটোরিয়ালে, আপনি একটি ব্যাপক GKE মাল্টিনিক এনভায়রনমেন্ট তৈরি করতে যাচ্ছেন যা চিত্র 1-এ চিত্রিত ব্যবহারের ক্ষেত্রে (গুলি) চিত্রিত করে।

  1. নেটডিভাইস-l3-পড লিভারেজিং বিজিবক্স তৈরি করুন এতে:
  2. eth2 এর উপর netdevice-vpc-এ netdevice-apache উদাহরণে একটি PING এবং wget -S সম্পাদন করুন
  3. eth1 এর উপরে l3-vpc-এ একটি PING এবং wget -S থেকে l3-apache উদাহরণ সম্পাদন করুন
  4. eth1 এর উপর একটি PING এবং wget -S থেকে l3-apache ইন্সট্যান্স সম্পাদন করতে একটি l3-পড লিভারেজিং বিজিবক্স তৈরি করুন

উভয় ক্ষেত্রেই, পডের eth0 ইন্টারফেস ডিফল্ট নেটওয়ার্কের সাথে সংযুক্ত থাকে।

চিত্র 1

9d93019ee608587f.png

আপনি কি শিখবেন

  • কিভাবে একটি l3 টাইপ সাবনেট তৈরি করবেন
  • কিভাবে একটি নেটডিভাইস টাইপ সাবনেট তৈরি করবেন
  • কিভাবে একটি মাল্টি-নিক GKE নোডপুল স্থাপন করবেন
  • কিভাবে নেটডিভাইস এবং l3 ক্ষমতা সহ একটি পড তৈরি করবেন
  • কিভাবে l3 ক্ষমতা সহ একটি পড তৈরি করবেন
  • কিভাবে GKE অবজেক্ট নেটওয়ার্ক তৈরি এবং যাচাই করা যায়
  • PING, wget এবং ফায়ারওয়াল লগ ব্যবহার করে দূরবর্তী অ্যাপাচি সার্ভারে সংযোগ কীভাবে যাচাই করবেন

আপনি কি প্রয়োজন হবে

  • গুগল ক্লাউড প্রকল্প

2. পরিভাষা এবং ধারণা

প্রাথমিক VPC: প্রাথমিক VPC হল একটি পূর্ব-কনফিগার করা VPC যা ডিফল্ট সেটিংস এবং সংস্থানগুলির একটি সেটের সাথে আসে। এই ভিপিসিতে GKE ক্লাস্টার তৈরি করা হয়েছে।

সাবনেট: Google ক্লাউডে, একটি সাবনেট হল একটি VPC-তে নেটমাস্ক সহ ক্লাসলেস ইন্টার-ডোমেন রাউটিং (CIDR) তৈরি করার উপায়। একটি সাবনেটের একটি একক প্রাথমিক আইপি ঠিকানার পরিসর থাকে যা নোডগুলিতে বরাদ্দ করা হয় এবং একাধিক সেকেন্ডারি রেঞ্জ থাকতে পারে যা পড এবং পরিষেবাগুলির অন্তর্গত হতে পারে।

নোড-নেটওয়ার্ক: নোড-নেটওয়ার্ক একটি ভিপিসি এবং সাবনেট জোড়ার একটি উত্সর্গীকৃত সমন্বয়কে বোঝায়। এই নোড-নেটওয়ার্কের মধ্যে, নোড পুলের অন্তর্গত নোডগুলিকে প্রাথমিক IP ঠিকানা পরিসর থেকে IP ঠিকানা বরাদ্দ করা হয়।

সেকেন্ডারি রেঞ্জ: একটি Google ক্লাউড সেকেন্ডারি রেঞ্জ হল একটি CIDR এবং নেটমাস্ক যা একটি VPC-তে একটি অঞ্চলের অন্তর্গত। GKE এটিকে লেয়ার 3 পড-নেটওয়ার্ক হিসেবে ব্যবহার করে। একটি ভিপিসির একাধিক সেকেন্ডারি রেঞ্জ থাকতে পারে এবং একটি পড একাধিক পড-নেটওয়ার্কের সাথে সংযোগ করতে পারে।

নেটওয়ার্ক (L3 বা ডিভাইস): একটি নেটওয়ার্ক অবজেক্ট যা পডের সংযোগ বিন্দু হিসেবে কাজ করে। টিউটোরিয়ালে নেটওয়ার্কগুলি হল l3-নেটওয়ার্ক এবং নেটডিভাইস-নেটওয়ার্ক, যেখানে ডিভাইসটি নেটডিভাইস বা dpdk হতে পারে। ডিফল্ট নেটওয়ার্ক বাধ্যতামূলক এবং ডিফল্ট-নোডপুল সাবনেটের উপর ভিত্তি করে ক্লাস্টার তৈরির পরে তৈরি করা হয়।

লেয়ার 3 নেটওয়ার্ক একটি সাবনেটের একটি সেকেন্ডারি রেঞ্জের সাথে সঙ্গতিপূর্ণ, এইভাবে উপস্থাপন করা হয়:

ভিপিসি -> সাবনেট নাম -> সেকেন্ডারি রেঞ্জের নাম

ডিভাইস নেটওয়ার্ক একটি VPC-তে একটি সাবনেটের সাথে সঙ্গতিপূর্ণ, এইভাবে উপস্থাপন করা হয়:

ভিপিসি -> সাবনেট নাম

ডিফল্ট পড-নেটওয়ার্ক: গুগল ক্লাউড ক্লাস্টার তৈরির সময় একটি ডিফল্ট পড-নেটওয়ার্ক তৈরি করে। ডিফল্ট পড-নেটওয়ার্ক নোড-নেটওয়ার্ক হিসাবে প্রাথমিক VPC ব্যবহার করে। ডিফল্ট পড-নেটওয়ার্ক ডিফল্টরূপে সমস্ত ক্লাস্টার নোড এবং পডে উপলব্ধ।

একাধিক ইন্টারফেস সহ পড: GKE-তে একাধিক ইন্টারফেস সহ পড একই পড-নেটওয়ার্কের সাথে সংযোগ করতে পারে না কারণ পডের প্রতিটি ইন্টারফেস একটি অনন্য নেটওয়ার্কের সাথে সংযুক্ত থাকতে হবে।

কোডল্যাবকে সমর্থন করার জন্য প্রকল্পটি আপডেট করুন

এই কোডল্যাব ক্লাউড শেল-এ gcloud কনফিগারেশন বাস্তবায়নে সাহায্য করার জন্য $ভেরিয়েবল ব্যবহার করে।

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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

3. প্রাথমিক VPC সেটআপ

প্রাথমিক ভিপিসি তৈরি করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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

নোড এবং সেকেন্ডারি সাবনেট তৈরি করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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 ক্লাস্টার তৈরি

প্রাইভেট GKE ক্লাস্টার তৈরি করুন প্রাইমারি-ভিপিসি সাবনেটগুলি নির্দিষ্ট করে ডিফল্ট নোডপুল তৈরি করুন প্রয়োজনীয় ফ্ল্যাগগুলির সাথে -সক্ষম-মাল্টি-নেটওয়ার্কিং এবং -সক্ষম-ডেটাপ্লেন-ভি2 মাল্টি-নিক নোডপুল সমর্থন করার জন্য।

ক্লাউড শেলের ভিতরে, 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

মাল্টিনিক-জিকে ক্লাস্টার যাচাই করুন

ক্লাউড শেলের ভিতরে, ক্লাস্টার দিয়ে প্রমাণীকরণ করুন:

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

ক্লাউড শেলের ভিতরে, ডিফল্ট-পুল থেকে দুটি নোড তৈরি করা হয়েছে তা যাচাই করুন:

kubectl get nodes

উদাহরণ:

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. নেট ডিভাইস-ভিপিসি সেটআপ

নেটডিভাইস-ভিপিসি নেটওয়ার্ক তৈরি করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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

নেটডিভাইস-ভিপিসি সাবনেট তৈরি করুন

ক্লাউড শেলের ভিতরে, মাল্টিনিক নেটডিভাইস-নেটওয়ার্কের জন্য ব্যবহৃত সাবনেট তৈরি করুন:

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

ক্লাউড শেলের ভিতরে, নেটডিভাইস-অ্যাপাচি উদাহরণের জন্য একটি সাবনেট তৈরি করুন:

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

ক্লাউড রাউটার এবং NAT কনফিগারেশন

ক্লাউড NAT টিউটোরিয়াল সফ্টওয়্যার প্যাকেজ ইনস্টলেশনের জন্য ব্যবহার করা হয় যেহেতু VM উদাহরণের একটি বহিরাগত IP ঠিকানা নেই।

ক্লাউড শেলের ভিতরে, ক্লাউড রাউটার তৈরি করুন।

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

ক্লাউড শেলের ভিতরে, 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

নেটডিভাইস-অ্যাপাচি উদাহরণ তৈরি করুন

নিম্নলিখিত বিভাগে, আপনি netdevice-apache উদাহরণ তৈরি করবেন।

ক্লাউড শেলের ভিতরে, উদাহরণ তৈরি করুন:

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 সেটআপ

l3-vpc নেটওয়ার্ক তৈরি করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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

l3-vpc সাবনেট তৈরি করুন

ক্লাউড শেলের ভিতরে, একটি প্রাথমিক এবং মাধ্যমিক-পরিসরের সাবনেট তৈরি করুন। সেকেন্ডারি-রেঞ্জ(sec-range-l3-subnet) মাল্টিনিক l3-নেটওয়ার্কের জন্য ব্যবহৃত হয়:

gcloud compute networks subnets create l3-subnet --project=$projectid --range=192.168.20.0/24 --network=l3-vpc --region=us-central1 --enable-private-ip-google-access --secondary-range=sec-range-l3-subnet=10.0.8.0/21

ক্লাউড শেলের ভিতরে, l3-অ্যাপাচি উদাহরণের জন্য একটি সাবনেট তৈরি করুন:

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

ক্লাউড রাউটার এবং NAT কনফিগারেশন

ক্লাউড NAT টিউটোরিয়াল সফ্টওয়্যার প্যাকেজ ইনস্টলেশনের জন্য ব্যবহার করা হয় যেহেতু VM উদাহরণের একটি বহিরাগত IP ঠিকানা নেই।

ক্লাউড শেলের ভিতরে, ক্লাউড রাউটার তৈরি করুন।

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

ক্লাউড শেলের ভিতরে, 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

l3-অ্যাপাচি উদাহরণ তৈরি করুন

নিম্নলিখিত বিভাগে, আপনি l3-অ্যাপাচি উদাহরণ তৈরি করবেন।

ক্লাউড শেলের ভিতরে, উদাহরণ তৈরি করুন:

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. মাল্টিনিক নোডপুল তৈরি করুন

নিম্নলিখিত বিভাগে, আপনি নিম্নলিখিত পতাকাগুলির সমন্বয়ে একটি মাল্টিনিক নোডপুল তৈরি করবেন:

-অতিরিক্ত-নোড-নেটওয়ার্ক (ডিভাইস টাইপ ইন্টারফেসের জন্য প্রয়োজনীয়)

উদাহরণ:

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

-অতিরিক্ত-নোড-নেটওয়ার্ক এবং -অতিরিক্ত-পড-নেটওয়ার্ক (L3 টাইপ ইন্টারফেসের জন্য প্রয়োজনীয়)

উদাহরণ:

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

মেশিনের ধরন: নোড পুল স্থাপন করার সময়, মেশিনের প্রকার নির্ভরতা বিবেচনা করুন। উদাহরণস্বরূপ, 4টি vCPU সহ "e2-standard-4" এর মতো একটি মেশিন মোট 4টি VPC সমর্থন করতে পারে৷ উদাহরণ হিসেবে, netdevice-l3-pod-এ মোট 3টি ইন্টারফেস থাকবে (ডিফল্ট, নেটডিভাইস এবং l3) তাই টিউটোরিয়ালটিতে ব্যবহৃত মেশিনের ধরনটি হল e2-standard-4।

ক্লাউড শেলের ভিতরে, একটি টাইপ ডিভাইস এবং 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. মাল্টনিক-নোড-পুল যাচাই করুন

ক্লাউড শেলের ভিতরে, মাল্টিনিক-নোড-পুল থেকে তিনটি নোড তৈরি করা হয়েছে তা যাচাই করুন:

kubectl get nodes

উদাহরণ:

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. নেটডিভাইস-নেটওয়ার্ক তৈরি করুন

নিম্নলিখিত ধাপে আপনি নেটডিভাইস-নেটওয়ার্ক তৈরি করতে একটি নেটওয়ার্ক এবং GKENetworkParamSet kubernetes অবজেক্ট তৈরি করবেন যা পরবর্তী ধাপে পডকে সংযুক্ত করতে ব্যবহার করা হবে।

netdevice-network অবজেক্ট তৈরি করুন

ক্লাউড শেলের ভিতরে, VI এডিটর বা ন্যানো ব্যবহার করে YAML netdevice-network.yaml নেটওয়ার্ক অবজেক্ট তৈরি করুন। মনে রাখবেন "রুট টু" হল নেটডিভাইস-ভিপিসি-তে সাবনেট 172.16.10.0/28 (নেটডিভাইস-অ্যাপাচি)।

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"

ক্লাউড শেলের ভিতরে, netdevice-network.yaml প্রয়োগ করুন:

kubectl apply -f netdevice-network.yaml 

ক্লাউড শেলের ভিতরে, নেটডিভাইস-নেটওয়ার্ক স্ট্যাটাস টাইপ প্রস্তুত আছে তা যাচাই করুন।

kubectl describe networks netdevice-network

উদাহরণ:

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 তৈরি করুন

ক্লাউড শেলের ভিতরে, VI এডিটর বা ন্যানো ব্যবহার করে YAML netdevice-network-parm.yaml নেটওয়ার্ক অবজেক্ট তৈরি করুন। নেটডিভাইস-ভিপিসি সাবনেট স্থাপনায় স্পেক ম্যাপ।

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

ক্লাউড শেলের ভিতরে, netdevice-network-parm.yaml প্রয়োগ করুন

kubectl apply -f netdevice-network-parm.yaml 

ক্লাউড শেল-এর ভিতরে, নেটডিভাইস-নেটওয়ার্ক স্ট্যাটাস রিজন GNPParmsReady এবং NetworkReady যাচাই করুন:

kubectl describe networks netdevice-network

উদাহরণ:

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>

ক্লাউড শেলের ভিতরে, পরবর্তী ধাপে পড(গুলি) ইন্টারফেসের জন্য ব্যবহৃত gkenetworkparamset CIDR ব্লক 192.168.10.0/24 যাচাই করুন।

kubectl describe gkenetworkparamsets.networking.gke.io netdevice

উদাহরণ:

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 নেটওয়ার্ক তৈরি করুন

নিম্নলিখিত ধাপে আপনি l3 নেটওয়ার্ক তৈরি করতে একটি নেটওয়ার্ক এবং GKENetworkParamSet kubernetes অবজেক্ট তৈরি করবেন যা পরবর্তী ধাপে পডকে সংযুক্ত করতে ব্যবহার করা হবে।

l3 নেটওয়ার্ক অবজেক্ট তৈরি করুন

ক্লাউড শেলের ভিতরে, VI এডিটর বা ন্যানো ব্যবহার করে YAML l3-network.yaml নেটওয়ার্ক অবজেক্ট তৈরি করুন। মনে রাখবেন "রুট" হল l3-vpc-এ সাবনেট 172.16.20.0/28 (l3-apache)৷

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"

ক্লাউড শেলের ভিতরে, l3-network.yaml প্রয়োগ করুন:

kubectl apply -f l3-network.yaml 

ক্লাউড শেলের ভিতরে, l3-নেটওয়ার্ক স্ট্যাটাস টাইপ প্রস্তুত আছে তা যাচাই করুন।

kubectl describe networks l3-network

উদাহরণ:

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 তৈরি করুন

ক্লাউড শেলের ভিতরে, VI সম্পাদক বা ন্যানো ব্যবহার করে নেটওয়ার্ক অবজেক্ট YAML l3-network-parm.yaml তৈরি করুন। 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"

ক্লাউড শেলের ভিতরে, l3-network-parm.yaml প্রয়োগ করুন

kubectl apply -f l3-network-parm.yaml 

ক্লাউড শেলের ভিতরে, l3-নেটওয়ার্ক স্ট্যাটাসের কারণ যাচাই করুন GNPParmsReady এবং NetworkReady:

kubectl describe networks l3-network

উদাহরণ:

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>

ক্লাউড শেলের ভিতরে, পড ইন্টারফেস তৈরি করতে ব্যবহৃত gkenetworkparamset l3-network CIDR 10.0.8.0/21 যাচাই করুন।

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

উদাহরণ:

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 তৈরি করুন

নিম্নলিখিত বিভাগে, আপনি নেটডিভাইস-l3-পড রানিং বিজিবক্স তৈরি করবেন, যা "সুইস আর্মি নাইফ" নামে পরিচিত যা 300 টিরও বেশি সাধারণ কমান্ড সমর্থন করে। eth1 ব্যবহার করে l3-vpc এবং eth2 ব্যবহার করে netdevice-vpc-এর সাথে যোগাযোগ করার জন্য পড কনফিগার করা হয়েছে।

ক্লাউড শেলের ভিতরে, VI এডিটর বা ন্যানো ব্যবহার করে netdevice-l3-pod.yaml নামে ব্যস্ত বক্স কন্টেইনার তৈরি করুন।

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

ক্লাউড শেলের ভিতরে, netdevice-l3-pod.yaml প্রয়োগ করুন

kubectl apply -f netdevice-l3-pod.yaml

netdevice-l3-pod তৈরির বৈধতা দিন

ক্লাউড শেলের ভিতরে, নেটডিভাইস-l3-পড চলছে তা যাচাই করুন:

kubectl get pods netdevice-l3-pod

উদাহরণ:

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

ক্লাউড শেলের ভিতরে, পড ইন্টারফেসে নির্ধারিত আইপি ঠিকানাগুলি যাচাই করুন।

kubectl get pods netdevice-l3-pod -o yaml

প্রদত্ত উদাহরণে, networking.gke.io/pod-ips ফিল্ডে l3-নেটওয়ার্ক এবং নেটডিভাইস-নেটওয়ার্ক থেকে পড ইন্টারফেসের সাথে সম্পর্কিত IP ঠিকানা রয়েছে। ডিফল্ট নেটওয়ার্ক আইপি ঠিকানা 10.0.1.22 পডআইপি-এর অধীনে বিশদ রয়েছে:

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 রুট যাচাই করুন

ক্লাউড শেলের ভিতরে, netdevice-l3-pod থেকে netdevice-vpc এবং l3-vpc-এর রুটগুলি যাচাই করুন:

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

উদাহরণ তৈরি করুন, পড ইন্টারফেসগুলি যাচাই করুন:

ifconfig

উদাহরণে, eth0 ডিফল্ট নেটওয়ার্কের সাথে সংযুক্ত, eth1 l3-নেটওয়ার্কের সাথে সংযুক্ত, এবং eth2 নেটডিভাইস-নেটওয়ার্কের সাথে সংযুক্ত।

/ # 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 থেকে netdevice-vpc (172.16.10.0/28) এবং l3-vpc (172.16.20.0/28) রুটগুলি যাচাই করুন৷

উদাহরণ তৈরি করুন, পড রুটগুলি যাচাই করুন:

ip route

উদাহরণ:

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

ক্লাউড শেলে ফিরে যেতে, উদাহরণ থেকে পড থেকে প্রস্থান করুন।

exit

12. l3-পড তৈরি করুন

নিম্নলিখিত বিভাগে, আপনি l3-পড চলমান ব্যস্তবক্স তৈরি করবেন, যা "সুইস আর্মি ছুরি" নামে পরিচিত যা 300 টিরও বেশি সাধারণ কমান্ড সমর্থন করে। পডটি শুধুমাত্র eth1 ব্যবহার করে l3-vpc-এর সাথে যোগাযোগ করার জন্য কনফিগার করা হয়েছে।

ক্লাউড শেলের ভিতরে, VI সম্পাদক বা ন্যানো ব্যবহার করে l3-pod.yaml নামে ব্যস্ত বক্স কন্টেইনার তৈরি করুন।

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

ক্লাউড শেলের ভিতরে, l3-pod.yaml প্রয়োগ করুন

kubectl apply -f l3-pod.yaml

l3-পড তৈরির বৈধতা দিন

ক্লাউড শেলের ভিতরে, নেটডিভাইস-l3-পড চলছে তা যাচাই করুন:

kubectl get pods l3-pod

উদাহরণ:

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

ক্লাউড শেলের ভিতরে, পড ইন্টারফেসে নির্ধারিত আইপি ঠিকানাগুলি যাচাই করুন।

kubectl get pods l3-pod -o yaml

প্রদত্ত উদাহরণে, networking.gke.io/pod-ips ফিল্ডে l3-নেটওয়ার্ক থেকে পড ইন্টারফেসের সাথে সম্পর্কিত IP ঠিকানা রয়েছে। ডিফল্ট নেটওয়ার্ক আইপি অ্যাড্রেস 10.0.2.12 পডআইপি-এর অধীনে বিস্তারিত আছে:

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-পড রুট যাচাই করুন

ক্লাউড শেলের ভিতরে, netdevice-l3-pod থেকে l3-vpc-এর রুটগুলি যাচাই করুন:

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

উদাহরণ তৈরি করুন, পড ইন্টারফেসগুলি যাচাই করুন:

ifconfig

উদাহরণে, eth0 ডিফল্ট নেটওয়ার্কের সাথে সংযুক্ত, eth1 l3-নেটওয়ার্কের সাথে সংযুক্ত।

/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 22:29:30:09:6B:58  
          inet addr:10.0.2.12  Bcast:10.0.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:446 (446.0 B)  TX bytes:558 (558.0 B)

eth1      Link encap:Ethernet  HWaddr 6E:6D:FC:C3:FF:AF  
          inet addr:10.0.8.22  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:446 (446.0 B)  TX bytes:516 (516.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

l3-পড থেকে l3-vpc (172.16.20.0/28) এর রুটগুলি যাচাই করুন৷

উদাহরণ তৈরি করুন, পড রুটগুলি যাচাই করুন:

ip route

উদাহরণ:

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

ক্লাউড শেলে ফিরে যেতে, উদাহরণ থেকে পড থেকে প্রস্থান করুন।

exit

13. ফায়ারওয়াল আপডেট

GKE multicnic-pool থেকে netdevice-vpc এবং l3-vpc ইনগ্রেস ফায়ারওয়াল নিয়মের সাথে সংযোগের অনুমতি দিতে হবে। আপনি পড নেটওয়ার্ক সাবনেট, যেমন netdevice-subnet, sec-range-l3-subnet হিসাবে উৎস পরিসর নির্দিষ্ট করে ফায়ারওয়াল নিয়ম তৈরি করবেন।

উদাহরণ হিসেবে, সম্প্রতি তৈরি করা কন্টেইনার, l3-pod, eth2 ইন্টারফেস 10.0.8.22 (sec-range-l3-subnet থেকে বরাদ্দ) হল l3-vpc-এ l3-apache উদাহরণের সাথে সংযোগ করার সময় উৎস IP ঠিকানা।

netdevice-vpc: netdevice-subnet থেকে 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: সেকেন্ড-রেঞ্জ-l3-সাবনেট থেকে l3-অ্যাপাচিতে অনুমতি দিন

ক্লাউড শেলের ভিতরে, l3-vpc-এ ফায়ারওয়াল নিয়ম তৈরি করুন যাতে l3-apache উদাহরণে sec-range-l3-subnet অ্যাক্সেস করা যায়।

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. পড সংযোগ যাচাই করুন

নিম্নলিখিত বিভাগে, আপনি নেটডিভাইস-l3-পড এবং l3-পড থেকে অ্যাপাচি ইনস্ট্যান্সের সাথে সংযোগ যাচাই করবেন পডগুলিতে লগ ইন করে এবং একটি wget -S চালিয়ে যা অ্যাপাচি সার্ভারের হোম পেজের একটি ডাউনলোডকে বৈধ করে। যেহেতু netdevice-l3-pod netdevice-network এবং l3-নেটওয়ার্কের ইন্টারফেসের সাথে কনফিগার করা হয়েছে, তাই netdevice-vpc এবং l3-vpc-এ Apache সার্ভারের সাথে সংযোগ সম্ভব।

বিপরীতে, l3-পড থেকে একটি wget -S সম্পাদন করার সময়, netdevice-vpc-এ Apache সার্ভারের সাথে সংযোগ সম্ভব নয় কারণ l3-pod শুধুমাত্র l3-নেটওয়ার্ক থেকে একটি ইন্টারফেসের সাথে কনফিগার করা হয়।

Apache সার্ভারের আইপি ঠিকানা পান

ক্লাউড কনসোল থেকে, কম্পিউট ইঞ্জিন → ভিএম ইনস্ট্যান্সে নেভিগেট করে অ্যাপাচি সার্ভারের আইপি ঠিকানা পান

fee492b4fd303859.png

netdevice-l3-pod থেকে netdevice-apache সংযোগ পরীক্ষা

ক্লাউড শেলের ভিতরে, netdevice-l3-pod-এ লগ ইন করুন:

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

ধারক থেকে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে নেটডিভাইস-অ্যাপাচি ইনস্ট্যান্সে একটি পিং সঞ্চালন করুন।

ping <insert-your-ip> -c 4

উদাহরণ:

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

ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে একটি wget -S থেকে netdevice-apache ইনস্ট্যান্স সম্পাদন করুন, 200 OK ওয়েবপৃষ্ঠাটির একটি সফল ডাউনলোড নির্দেশ করে।

wget -S <insert-your-ip>

উদাহরণ:

/ # 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 সংযোগ পরীক্ষা

ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত আইপি ঠিকানার উপর ভিত্তি করে l3-অ্যাপাচি ইনস্ট্যান্সে একটি পিং সঞ্চালন করুন।

ping <insert-your-ip> -c 4

উদাহরণ:

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

ক্লাউড শেলের ভিতরে, পূর্ববর্তী index.html ফাইলটি মুছুন এবং পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে একটি wget -S থেকে l3-apache উদাহরণ সম্পাদন করুন, 200 OK ওয়েবপৃষ্ঠাটির একটি সফল ডাউনলোড নির্দেশ করে।

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

উদাহরণ:

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

ক্লাউড শেলে ফিরে যেতে, উদাহরণ থেকে পড থেকে প্রস্থান করুন।

exit

l3-পড থেকে নেটডিভাইস-অ্যাপাচি সংযোগ পরীক্ষা

ক্লাউড শেলের ভিতরে, l3-পডে লগ ইন করুন:

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

ধারক থেকে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে নেটডিভাইস-অ্যাপাচি ইনস্ট্যান্সে একটি পিং সঞ্চালন করুন। যেহেতু l3-pod-এর netdevice-network-এর সাথে যুক্ত একটি ইন্টারফেস নেই, পিং ব্যর্থ হবে।

ping <insert-your-ip> -c 4

উদাহরণ:

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

ঐচ্ছিক: ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে একটি wget -S থেকে netdevice-apache ইনস্ট্যান্স সম্পাদন করুন যা সময় শেষ হবে।

wget -S <insert-your-ip>

উদাহরণ:

/ # 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-পড থেকে l3-অ্যাপাচি সংযোগ পরীক্ষা

ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত আইপি ঠিকানার উপর ভিত্তি করে l3-অ্যাপাচি ইনস্ট্যান্সে একটি পিং সঞ্চালন করুন।

ping <insert-your-ip> -c 4

উদাহরণ:

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

ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে একটি wget -S থেকে l3-apache উদাহরণ সম্পাদন করুন, 200 OK ওয়েবপৃষ্ঠাটির একটি সফল ডাউনলোড নির্দেশ করে।

wget -S <insert-your-ip>

উদাহরণ:

/ # 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. ফায়ারওয়াল লগ

ফায়ারওয়াল নিয়ম লগিং আপনাকে আপনার ফায়ারওয়াল নিয়মের প্রভাবগুলি অডিট, যাচাই এবং বিশ্লেষণ করতে দেয়। উদাহরণস্বরূপ, আপনি নির্ধারণ করতে পারেন যে ট্রাফিক অস্বীকার করার জন্য ডিজাইন করা একটি ফায়ারওয়াল নিয়ম উদ্দেশ্য অনুযায়ী কাজ করছে কিনা। ফায়ারওয়াল নিয়ম লগিং করাও দরকারী যদি আপনি একটি নির্দিষ্ট ফায়ারওয়াল নিয়ম দ্বারা কতগুলি সংযোগ প্রভাবিত হয় তা নির্ধারণ করতে চান।

ইনগ্রেস ফায়ারওয়াল নিয়ম তৈরি করার সময় টিউটোরিয়ালে আপনি ফায়ারওয়াল লগিং সক্ষম করেছেন। আসুন লগ থেকে প্রাপ্ত তথ্য একবার দেখে নেওয়া যাক।

ক্লাউড কনসোল থেকে, লগিং → লগ এক্সপ্লোরার-এ নেভিগেট করুন

স্ক্রিনশট অনুযায়ী নিচের ক্যোয়ারীটি ঢোকান এবং রান কোয়েরি jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances") নির্বাচন করুন

280d00f2c5ce6109.png

একটি ক্যাপচার ঘনিষ্ঠভাবে দেখে নেওয়া নিরাপত্তা প্রশাসকদের জন্য তথ্য উপাদান প্রদান করে; উৎস এবং গন্তব্য আইপি ঠিকানা, পোর্ট, প্রোটোকল এবং নোডপুল নাম থেকে শুরু করে।

ae4638ed9b718ac6.png

আরও ফায়ারওয়াল লগগুলি অন্বেষণ করতে, ভিপিসি নেটওয়ার্ক → ফায়ারওয়াল → allow-ingress-from-netdevice-network-to-all-vpc-instance-এ নেভিগেট করুন তারপর লগ এক্সপ্লোরারে ভিউ নির্বাচন করুন৷

16. পরিষ্কার করুন

ক্লাউড শেল থেকে, টিউটোরিয়াল উপাদানগুলি মুছুন।

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. অভিনন্দন

অভিনন্দন, আপনি PING এবং wget ব্যবহার করে Apache সার্ভারের সাথে L3 এবং ডিভাইস টাইপ সংযোগ যাচাই করার জন্য একটি মাল্টিনিক নোডপুল তৈরি করা এবং পড চালানোর ব্যস্ততা তৈরি করা সফলভাবে কনফিগার ও যাচাই করেছেন।

আপনি পড কন্টেনার এবং অ্যাপাচি সার্ভারের মধ্যে উত্স এবং গন্তব্য প্যাকেটগুলি পরিদর্শন করতে ফায়ারওয়াল লগগুলি কীভাবে ব্যবহার করতে হয় তাও শিখেছেন৷

কসমোপআপ মনে করে টিউটোরিয়ালগুলি দুর্দান্ত!!

e6d3675ca7c6911f.jpeg

আরও পড়া এবং ভিডিও

রেফারেন্স ডক্স