1 - হ্যালো মিনিকুব (Hello Minikube)
এই টিউটোরিয়ালটি আপনাকে দেখায় কিভাবে মিনিকুব ব্যবহার করে কুবারনেটিস এ একটি নমুনা অ্যাপ চালাতে হয়।
টিউটোরিয়ালটি একটি কন্টেইনার চিত্র প্রদান করে যা NGINX ব্যবহার করে সমস্ত অনুরোধগুলোকে প্রতিধ্বনিত করে ৷
উদ্দেশ্য
- মিনিকিউবে একটি সরল অ্যাপ্লিকেশন স্থাপন করুন।
- অ্যাপ্লিকেশনটিকে চালান।
- অ্যাপ্লিকেশন লগ (log) দেখুন।
শুরু করার আগে
এই টিউটোরিয়ালটি একটি কন্টেইনার ইমেজ প্রদান করে যা NGINX ব্যবহার করে সমস্ত অনুরোধে সাড়া দেয়।
একটি মিনিকিউব ক্লাস্টার তৈরি করা।
-
ক্লিক করুন Launch Terminal এ
বিঃদ্রঃ:
মিনিকুব স্থানীয়ভাবে ইনস্টল করা থাকলে, minikube start চালান। minikube dashboard কমান্ড কার্যকর করার আগে, একটি নতুন টার্মিনাল খুলুন, সেই টার্মিনালে minikube dashboard কমান্ডটি চালান এবং মূল টার্মিনালে ফিরে যান।
-
একটি ব্রাউজারে কুবারনেটিস ড্যাশবোর্ড খুলুন:
-
Katacoda পরিবেশ (Katacoda Environment): টার্মিনাল প্যানেলের শীর্ষে প্লাস ক্লিক করুন, তারপরে ক্লিক করুন Select port to view on Host 1 ।
-
Katacoda পরিবেশ (Katacoda Environment): 30000 লিখুন এবং Display Port এ ক্লিক করুন।
বিঃদ্রঃ:
আপনি যখন minikube dashboard কমান্ড ইস্যু করেন, তখন ড্যাশবোর্ড অ্যাড-অন এবং প্রক্সি সক্রিয় হয় এবং প্রক্সিতে সংযোগ করার জন্য একটি ডিফল্ট ওয়েব ব্রাউজার উইন্ডো খোলে।
আপনি ড্যাশবোর্ড থেকে কুবারনেটিস সংস্থান তৈরি করতে পারেন যেমন ডিপ্লয়মেন্ট বা সার্ভিস।
আপনি যদি root এনভায়রনমেন্টে কমান্ড নির্বাহ করছেন, তাহলে [URL ব্যবহার করে ড্যাশবোর্ড অ্যাক্সেস করা] (#open-dashboard-with-url) পড়ুন।
ডিফল্টরূপে, ড্যাশবোর্ড শুধুমাত্র কুবারনেটিস অভ্যন্তরীণ ভার্চুয়াল নেটওয়ার্ক থেকে অ্যাক্সেসযোগ্য।
dashboard কমান্ড কুবারনেটিস ভার্চুয়াল নেটওয়ার্কের বাইরে থেকে ড্যাশবোর্ড অ্যাক্সেস করার জন্য একটি অস্থায়ী প্রক্সি তৈরি করে।
আপনি Ctrl+C টিপে প্রক্সি থেকে প্রস্থান করতে পারেন।
কমান্ডটি শেষ হওয়ার পরে, ড্যাশবোর্ডটি কুবারনেটিস ক্লাস্টারে চলতে থাকে।
আপনি আবার dashboard কমান্ড চালিয়ে ড্যাশবোর্ড অ্যাক্সেস করার জন্য আরেকটি প্রক্সি তৈরি করতে পারেন।
URL ব্যবহার করে ড্যাশবোর্ড খুলুন
আপনি যদি ওয়েব ব্রাউজারটি স্বয়ংক্রিয়ভাবে খুলতে না চান তবে আপনি --url ফ্ল্যাগ দিয়ে নিম্নলিখিত কমান্ডটি কার্যকর করে ড্যাশবোর্ড অ্যাক্সেস URL মুদ্রণ করতে পারেন :
ডিপ্লয়মেন্ট (Deployment) তৈরি করুন
কুবারনেটিস পডস নেটওয়ার্কিং উদ্দেশ্যে এক বা একাধিক পাত্রের একটি গ্রুপ একসাথে গোষ্ঠীবদ্ধ করে।
এই টিউটোরিয়ালের পডটিতে (pod) শুধুমাত্র একটি পাত্র রয়েছে। কুবারনেটিস
Deployment হলো পডের
একটি স্বাস্থ্য পরীক্ষা করে এবং পডের ধারকটি বন্ধ হয়ে গেলে পুনরায় চালু করে। পড তৈরি এবং স্কেলিং পরিচালনা করার উপায় হিসাবে স্থাপনের সুপারিশ করা হয়।
-
পড পরিচালনা ও ডিপ্লয়মেন্ট তৈরি করতে kubectl create কমান্ডটি চালান। এই পডগুলি প্রদত্ত Docker ইমেজ এর উপর ভিত্তি করে কন্টেইনার চালায়।
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.53 -- /agnhost netexec --http-port=8080
-
ডিপ্লয়মেন্টটি দেখুন:
অনুরূপ আউটপুট দেখবেন:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1m
-
পডটি দেখুন:
অনুরূপ আউটপুট দেখবেন:
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
-
ক্লাস্টার ইভেন্ট দেখুন:
-
kubectl এর কনফিগারেশন দেখুন:
সার্ভিস (Service) তৈরি করুন
সাধারণত, পড শুধুমাত্র কুবারনেটিস ক্লাস্টারের অভ্যন্তরীণ আইপি (Internal IP) ঠিকানা দ্বারা অ্যাক্সেসযোগ্য। কুবারনেটিস ভার্চুয়াল নেটওয়ার্কের বাইরে থেকে 'hello-node' কন্টেইনারকে অ্যাক্সেসযোগ্য করতে, আপনাকে কুবারনেটিস সার্ভিস হিসাবে পডটিকে প্রকাশ করতে হবে।
-
সর্বজনীন ইন্টারনেটে (Public Internet) পডটি প্রকাশ করুন kubectl expose কমান্ড ব্যবহার করে:
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
--type=LoadBalancer ফ্ল্যগটি নির্দেশ করে যে আপনি ক্লাস্টারের বাইরে আপনার পরিষেবা প্রকাশ করতে চান।
k8s.gcr.io/echoserver কনটেইনারের ভিতরের অ্যাপ্লিকেশন কোড শুধুমাত্র TCP port 8080 থেকেই শোনা হয়। আপনি যদি একটি ভিন্ন পোর্ট প্রকাশ করতে kubectl expose ব্যবহার করেন, তাহলে ক্লায়েন্টরা সেই অন্য পোর্টের সাথে সংযোগ করতে পারবে না।
-
তৈরি করা সার্ভিসটি দেখুন:
অনুরূপ আউটপুট দেখবেন:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
ক্লাউড প্রদানকারীরা (Cloud Providers) যারা লোড ব্যালেন্সার (Load Balancer) সমর্থন করে, তাতে একটি External IP Address ব্যবস্থা করা হয়, সার্ভিসটি অ্যাক্সেস করার জন্য।
মিনিকিউব-এ, LoadBalancer প্রকারটি minikube service কমান্ডের মাধ্যমে পরিষেবাটিকে অ্যাক্সেসযোগ্য করে তোলে।
-
নিম্নলিখিত কমান্ড চালান:
minikube service hello-node
-
Katacoda পরিবেশ (Katacoda Environment): টার্মিনাল প্যানেলের শীর্ষে প্লাস ক্লিক করুন, তারপরে ক্লিক করুন Select port to view on Host 1
-
শুধুমাত্র Katacoda পরিবেশ (Katacoda Environment): সার্ভিস আউটপুটে 8080 এর বিপরীতে প্রদর্শিত ৫-সংখ্যার পোর্ট নম্বরটি নোট করুন। এই পোর্ট নম্বরটি এলোমেলোভাবে তৈরি করা হয়েছে এবং এটি আপনার জন্য আলাদা হতে পারে। পোর্ট নম্বর টেক্সট বক্সে আপনার নম্বর টাইপ করুন, তারপর ডিসপ্ল পোর্টে (default port) ক্লিক করুন। আগের উদাহরণটি ব্যবহার করে, আপনি 30369 টাইপ করবেন।
এটি একটি ব্রাউজার উইন্ডো খোলে যা আপনার অ্যাপটি পরিবেশন করে এবং অ্যাপের প্রতিক্রিয়া দেখায়।
অ্যাডন সক্রিয় করুন (Addons)
মিনিকিউব টুলটিতে অন্তর্নির্মিত অ্যাডনগুলির (Internal addons) একটি সেট রয়েছে যা স্থানীয় কুবারনেটিস পরিবেশে এনেবেল (enable), ডিজেবল (disable) এবং ওপেন (open) করা যেতে পারে।
-
বর্তমানে সমর্থিত অ্যাডনগুলির তালিকা:
অনুরূপ আউটপুট দেখবেন:
addon-manager: enabled
dashboard: enabled
default-storageclass: enabled
efk: disabled
freshpod: disabled
gvisor: disabled
helm-tiller: disabled
ingress: disabled
ingress-dns: disabled
logviewer: disabled
metrics-server: disabled
nvidia-driver-installer: disabled
nvidia-gpu-device-plugin: disabled
registry: disabled
registry-creds: disabled
storage-provisioner: enabled
storage-provisioner-gluster: disabled
-
একটি অ্যাডন এনেবেল (enable) করুন, উদাহরণস্বরূপ metrics-server:
minikube addons enable metrics-server
অনুরূপ আউটপুট দেখবেন:
The 'metrics-server' addon is enabled
-
আপনার তৈরি করা পড এবং সার্ভিস দেখুন:
kubectl get pod,svc -n kube-system
অনুরূপ আউটপুট দেখবেন:
NAME READY STATUS RESTARTS AGE
pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m
pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m
pod/metrics-server-67fb648c5 1/1 Running 0 26s
pod/etcd-minikube 1/1 Running 0 34m
pod/influxdb-grafana-b29w8 2/2 Running 0 26s
pod/kube-addon-manager-minikube 1/1 Running 0 34m
pod/kube-apiserver-minikube 1/1 Running 0 34m
pod/kube-controller-manager-minikube 1/1 Running 0 34m
pod/kube-proxy-rnlps 1/1 Running 0 34m
pod/kube-scheduler-minikube 1/1 Running 0 34m
pod/storage-provisioner 1/1 Running 0 34m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s
service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m
service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s
service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
-
ডিজেবল (disable) করুন metrics-server:
minikube addons disable metrics-server
অনুরূপ আউটপুট দেখবেন:
metrics-server was successfully disabled
পরিষ্কার করুন (Clean up)
এখন আপনি আপনার ক্লাস্টারে তৈরি রিসোর্সগুলি পরিষ্কার করতে পারেন:
kubectl delete service hello-node
kubectl delete deployment hello-node
ঐচ্ছিকভাবে, মিনিকিউব ভার্চুয়াল মেশিন (Minikube Virtual Machine) বন্ধ করুন:
ঐচ্ছিকভাবে, মিনিকিউব ভার্চুয়াল মেশিন (Minikube Virtual Machine) মুছুন ফেলুন:
এর পরের কি
2.1 - ক্লাস্টার তৈরি করুন
কুবারনেটিস সম্পর্কে জানুন ক্লাস্টার এবং মিনিকিউব দিয়ে সহজ ক্লাস্টার তৈরি করুন।
4 - নিরাপত্তা
কুবারনেটিস ক্লাস্টার পরিচালনাকারী বেশিরভাগ সংস্থা এবং লোকেদের জন্য নিরাপত্তা একটি গুরুত্বপূর্ণ উদ্বেগ।
আপনি একটি মৌলিক নিরাপত্তা চেকলিস্ট খুঁজে পেতে পারেন
কুবারনেটিস ডকুমেন্টেশনের অন্যত্র ।
কুবারনেটিসের নিরাপত্তার দিকগুএও কীভাবে স্থাপন এবং পরিচালনা করতে হয় তা শিখতে,
আপনি এই বিভাগে টিউটোরিয়ালগুলো অনুসরণ করতে পারেন।
4.1 - নেমস্পেস লেভেলে পড সিকিউরিটি স্ট্যান্ডার্ড প্রয়োগ করুন
নোট
এই টিউটোরিয়াল শুধুমাত্র নতুন ক্লাস্টারের জন্য প্রযোজ্য।
Pod Security Admission হল একটি অ্যাডমিশন কন্ট্রোলার যা পড তৈরি হওয়ার সময়
Pod Security Standards
প্রয়োগ করে। এটি Kubernetes v1.25-এ GA (General Availability) হয়েছে।
এই টিউটোরিয়ালে, আপনি baseline পড সিকিউরিটি স্ট্যান্ডার্ড একটি নির্দিষ্ট নেমস্পেসে প্রয়োগ করবেন।
আপনি চাইলে ক্লাস্টার লেভেলে একাধিক নেমস্পেসে একসাথে পড সিকিউরিটি স্ট্যান্ডার্ড প্রয়োগ করতে পারেন।
বিস্তারিত জানতে দেখুন:
Apply Pod Security Standards at the cluster level।
শুরু করার আগে
আপনার ওয়ার্কস্টেশনে নিম্নলিখিত টুলগুলি ইনস্টল করুন:
ক্লাস্টার তৈরি করুন
-
নিম্নলিখিত কমান্ড দিয়ে একটি kind ক্লাস্টার তৈরি করুন:
kind create cluster --name psa-ns-level
আউটপুট হবে এরকম:
Creating cluster "psa-ns-level" ...
✓ Ensuring node image (kindest/node:v1.25.0) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-psa-ns-level"
You can now use your cluster with:
kubectl cluster-info --context kind-psa-ns-level
Not sure what to do next? 😅 Check out https://kind.sigs.k8s.io/docs/user/quick-start/
-
নতুন ক্লাস্টারে kubectl কনটেক্সট সেট করুন:
kubectl cluster-info --context kind-psa-ns-level
আউটপুট হবে এরকম:
Kubernetes control plane is running at https://127.0.0.1:50996
CoreDNS is running at https://127.0.0.1:50996/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
একটি নেমস্পেস তৈরি করুন
example নামে একটি নতুন নেমস্পেস তৈরি করুন:
kubectl create ns example
আউটপুট হবে:
namespace/example created
সেই নেমস্পেসে পড সিকিউরিটি স্ট্যান্ডার্ড সক্রিয় করুন
-
বিল্ট-ইন পড সিকিউরিটি অ্যাডমিশন দ্বারা সাপোর্টেড লেবেল ব্যবহার করে এই নেমস্পেসে
পড সিকিউরিটি স্ট্যান্ডার্ড সক্রিয় করুন। এই ধাপে আপনি নিম্নলিখিত কমান্ড দিয়ে example
নেমস্পেসে baseline পড সিকিউরিটি স্ট্যান্ডার্ডের সর্বশেষ ভার্সন পূরণ না করে এমন
পডগুলিতে warn মোডে করার জন্য একটি চেক কনফিগার করবেন।
kubectl label --overwrite ns example \
pod-security.kubernetes.io/warn=baseline \
pod-security.kubernetes.io/warn-version=latest
-
আপনি লেবেল ব্যবহার করে যেকোনো নেমস্পেসে একাধিক পড সিকিউরিটি স্ট্যান্ডার্ড চেক
কনফিগার করতে পারেন । নিম্নলিখিত কমান্ডটি baseline পড সিকিউরিটি স্ট্যান্ডার্ড enforce করবে,
তবে সর্বশেষ ভার্সন (ডিফল্ট ভ্যালু) অনুসারে সীমাবদ্ধ পড সিকিউরিটি স্ট্যান্ডার্ডগুলির জন্য
restricted স্ট্যান্ডার্ড warn ও audit মোডে প্রয়োগ করবে।
kubectl label --overwrite ns example \
pod-security.kubernetes.io/enforce=baseline \
pod-security.kubernetes.io/enforce-version=latest \
pod-security.kubernetes.io/warn=restricted \
pod-security.kubernetes.io/warn-version=latest \
pod-security.kubernetes.io/audit=restricted \
pod-security.kubernetes.io/audit-version=latest
পড সিকিউরিটি স্ট্যান্ডার্ড প্রয়োগ যাচাই করুন
-
example নেমস্পেসে একটি baseline পড তৈরি করুন:
kubectl apply -n example -f https://k8s.io/examples/security/example-baseline-pod.yaml
পডটি তৈরি হবে, তবে একটি সতর্কবার্তা সহ। উদাহরণস্বরূপ:
Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false ...
pod/nginx created
-
default নেমস্পেসে একই পড তৈরি করুন:
kubectl apply -n default -f https://k8s.io/examples/security/example-baseline-pod.yaml
আউটপুট হবে:
pod/nginx created
example নেমস্পেসে পড সিকিউরিটি স্ট্যান্ডার্ড প্রয়োগ করা হয়েছে, তাই সতর্কবার্তা দেখানো হয়েছে। কিন্তু default নেমস্পেসে কোন সতর্কবার্তা ছাড়াই পডটি তৈরি হয়েছে।
ক্লিন আপ
উপরের ক্লাস্টারটি মুছে ফেলতে নিম্নলিখিত কমান্ড চালান:
kind delete cluster --name psa-ns-level
এর পরের কি