ကျွန်တော်ဒီနေ့ share ပေးမယ့် အကြောင်းရာကတော့ kubernetes ပေါ်မှာ run နေတဲ့ internal service တွေကို vpn ကနေတစ်ဆင့် access လုပ်မယ့်အကြောင်းပါ။ ဒါကတော့ kubernetes ကို real world မှာ သုံးနေကြတဲ့သူအများစုသိပြီးသားဖြစ်ပါလိမ့်မယ်။ ပုံမှန်အားဖြင့် kubernetes ပေါ်မှာတင်ထားတဲ့ service တွေကို url တွေအနေနဲ့ external ကနေ ခေါ်သုံးဖို့ဆို ingress ကိုသုံးကြတယ်။ ingress controller တွေဟာ service တွေကို cluster အပြင်ကနေ လှမ်းခေါ်တဲ့နေရာမှာ reverse proxy and loadbalancer အနေနဲ့အလုပ်လုပ်ပေးပါတယ်။
ingress resoucres တွေမှာ သတ်မှတ်ထားတဲ့ rules တွေကိုအခြေခံပီး traffic တွေကို route လုပ်ပေးပါတယ်။ အလွယ်ပြောရရင်တော့ ingress resource ဆိုတာ ဘယ် url ကိုခေါ်ရင် cluster ထဲက ဘယ် service ကို route လုပ်ပေးပါဆိုပြီး သတ်မှတ်ထားတဲ့ yaml file မျိုးဖြစ်ပါတယ်။ နာမည်ကြီးတဲ့ ingress controller တွေမှာ NGINX, Traefik တို့ပါဝင်ကြပါတယ်။ ဒါကတော့ ingress အကြောင်းအနည်းငယ်ပါ။ တစ်ခါတစ်လေမှာ public ကိုမထုတ်ပဲinternal မှာပဲ service တွေကိုသုံးချင်တဲ့ အခါမျိုးရှိပါတယ်။
ကျွန်တော်တို့ရဲ့ product တွေ website တွေကို public access ထားလို့ရပေမယ့် grafana , prometheus , argocd တို့လိုကောင်တွေကို security အရ private access ပဲထားပေးရမှာဖြစ်တယ်။ ကျွန်တော်အခု kubernetes ပေါ်က service တွေကို privately access လုပ်ဖို့အတွက် နည်းလမ်းအချို့ကို ရှင်းပြပေးပါမယ်။
service type တွေအကြောင်း
kubernetes မှာ service type သုံးမျိုးရှိပါတယ်။ ClusterIP, LoadBalancer နဲ့ NodePort တို့ဖြစ်တယ်။ ClusterIP က default ဖြစ်ပြီး ဒီ ip ကို cluster အတွင်းမှာပဲ pod တွေအချင်းချင်း communicate လုပ်ရာမှာသုံးလို့ရတယ်။ ကျန်တဲ့ IP ၂ခု ဖြစ်တဲ့ LB နဲ့ NodePort ကတော့ cluster outside ကနေခေါ်ဖို့သုံးတယ်။
NodePort ဆိုတာ kubernetes node တွေရဲ့ port range 30000 နဲ့ 32767 ကြားက port တစ်ခုခုမှာ အဲ့ service ကို run ထားတာမျိုးပါ။ အဲ့ဒီ node port တွေမှာလည်း ဘယ် IP တွေ network တွေကိုပဲ access ပေးလုပ်မယ်ဆိုပြီး firewall တွေ securiry group တွေကနေတစ်ဆင့် restrict လုပ်ပေးလို့ရပါတယ်။ ဒီလိုလုပ်ခြင်းနဲ့ port က ပွင့်နေမယ်ဆိုရင်တောင် trusted client တွေကိုပဲ service ကို ပေးသုံးနိုင်ပါတယ်။ load balancer type ကလည်း cluster ပြင်ကနေခေါ်ဖို့သုံးတာပါ။ LB မှာ external နဲ့ internal ရှိကြပြီး external loadbalancer တွေကတော့ internet ကနေ access လုပ်ဖို့သုံးကြပါတယ်။ internal loadbalancer မှာတော့ bare-metal k8s environment ဆိုရင် metalLB ဟာအသုံးများပြီး cloud environment တွေမှာဆိုရင် သက်ဆိုင်ရာ vendor အလိုက် internal loadbalancer တွေရှိကြပါတယ်။
Internal Load Balancer အကြောင်း
internal loadbalancer ကိုသုံးမယ်ဆိုရင် service type က ၃မျိုးရှိတဲ့အနက် LoadBalancer ဖြစ်ရပါမယ်။ ဥပမာ azure မှာဆိုရင် kubernetes service annotations မှာ service.beta.kubernetes.io/azure-load-balancer-internal: "true" အောက်ပါအတိုင်းထည့်ပေးလိုက်ရင် cluster ရဲ့ subnet ထဲက ip တစ်ခုကို loadbalancer အဖြစ်ထုတ်ပေးလိုက်မှာဖြစ်တယ်။ ဥပမာ မိမိ cluster ရဲ့ subnet ဟာ 10.10.0.0/16 ဆိုရင် load balancer ရဲ့ ip က 10.10.x.x ဆိုပြီး တွေ့ရမှာဖြစ်ပါတယ်။ ဒီနေရာမှာ ip နဲ့ ထွက်လာမလား dns နဲ့ထွက်မလားဆိုတာ သုံးနေတဲ့ cloud vendor တွေပေါ်မူတည်ပြီး ကွဲပြားနိုင်ပါတယ်။
AWS ဆိုရင် a1b2c3d4e5f6g7h8-1234567890.us-east-1.elb.internal အခုလို private dns အနေနဲ့ထုတ်ပေးပြီး azure ဆိုရင် private ip အနေနဲ့ထုတ်ပေးပါတယ်။ သေချာတာတော့ internal loadbalancer ရလာပြီဆိုရင် kubernetes cluster ရဲ့ subnet ထဲကနေ service ကို access လုပ်လို့ရသွားပါပြီ။
private dns zone နဲ့ vpn server
azure မှာဆိုရင် internal load balancer ဟာ ip အနေနဲ့ ထွက်လာတာမလို့ dns အနေနဲ့ သုံးချင်တယ်ဆို private dns zone လိုမျိုးတစ်ဆင့်ခံပြီး သုံးလို့ရပါတယ်။ subnet ပြင်ပကနေ ဒီ load balancer ကို access လုပ်ချင်တယ်ဆိုရင်တော့ vpn ခံပြီးသုံးရပါမယ်။ subnet ပြင်ကနေခေါ်ဖို့ဆို cluster ရဲ့ subnet ထဲမှာ vpn server တစ်ခုဆောက်ပေးဖို့လိုပါမယ်။ ကျွန်တော်ကတော့ wireguard or openvpn သုံးပါတယ်။
အဆင်ပြေသလို vpn server ကိုဆောက်လို့ရတယ်။ ပထမနည်းကတော့ subnet ထဲမှာ VM တစ်လုံးဆောက်ပြီး အဲ့ VM မှာပဲ wireguard container ကို docker နဲ့ တင်လိုက်ပါတယ်။ နောက်တစ်နည်းက wireguard ကို kubernetes cluster ထဲမှာ deployment အနေနဲ့ runထားလို့ရပါတယ်။ ဒါဆိုရင် vpn server ရသွားပြီမလို့ kubernetes ပေါ်က service ကို access လုပ်ချင်တဲ့ client တွေဟာ vpn ချိတ်ဆက်ပြီး internal load balancer ကိုခေါ်နိုင်ပါပြီ။
Discussion
Join the conversation
How do you feel about this article?
Comments
Sign in to join the conversation
Sign in to be the first to comment!
Share Your Article
Share with your professional network
Recent Articles

AWS - Application Load Balancer
Elastic Load Balancing (ELB) ELB ဆိုတာကတော့ request တွေကို တစ်နေရာတည်းမှ လက်ခံကာ Amazon EC2 instances၊ containers, etc.....

Terraform Day 3: Benefits of Terraform State
Terraform ကိုလေ့လာ တဲ့အခါ ကျွန််တော်တို့ရဲ့ Project Folder ထဲမှာ terraform.tfstate ဆိုတဲ့ ဖိုင်လေးကို တွေ့ဖူးကြပါလိမ့်မယ...

Terraform Day 2: Essential IaC Principles You Must Know
မနေ့ကတော့ Terraform အကြောင်း အကြမ်းဖျင်း Concept ကို ပြောပြခဲ့ပြီးပြီဆိုတော့ ဒီနေ့မှာတော့ Terraform ကို Professional ကျက...

TCP/IP Protocol
အားလုံးပဲမင်္ဂလာပါ။ ဒီနေ့ ကျွန်တော်တို့ TCP/IP Protocol အကြောင်း ဆွေးနွေးသွားပါမယ်။ ပထမဆုံးအနေနဲ့ TCP/IP ရဲ့ History လေး...

Terraform Day 1: Introduction to IAC and Terraform
ကျွန်တော်တို့ cloud အကြောင်း စပြောကြပြီဆိုရင် အရင်ဆုံး ခေါင်းထဲရောက်လာတာ Console ထဲဝင်၊ UI ကနေ ခလုတ်လေးတွေ လိုက်နှိပ်ပြီ...

