L2 မုဒ်တလင် MetalLB အတလက် ချိန်ညဟိခဌင်သလမ်သကဌောင်သ

L2 မုဒ်တလင် MetalLB အတလက် ချိန်ညဟိခဌင်သလမ်သကဌောင်သ
မကဌာသေသမီက ကျလန်ုပ်သည် MetalLB အတလက် လမ်သကဌောင်သသတ်မဟတ်ခဌင်သအတလက် အလလန်ထူသခဌာသသော အလုပ်တစ်ခုနဟင့် ရင်ဆိုင်ခဲ့ရသည်။ အာသလုံသအဆင်ပဌေသလာသမဟာမို့... အမျာသအာသဖဌင့် MetalLB သည် နောက်ထပ်လုပ်ဆောင်မဟုမျာသ မလိုအပ်သော်လည်သ၊ ကျလန်ုပ်တို့တလင် အလလန်ရိုသရဟင်သသော ကလန်ရက်ဖလဲ့စည်သမဟုပုံစံဖဌင့် အတော်လေသကဌီသမာသသော အစုအဝေသတစ်ခုရဟိသည်။

ကဆောင်သပါသတလင် သင့်အစုအဝေသ၏ ပဌင်ပကလန်ရက်အတလက် ရင်သမဌစ်အခဌေခံနဟင့် မူဝါဒအခဌေခံလမ်သကဌောင်သကို မည်သို့စီစဉ်သတ်မဟတ်ရမည်ကို ကျလန်ုပ်ပဌောပဌပါမည်။

သင့်တလင် အတလေ့အကဌုံအချို့ရဟိနေပဌီဟု ကျလန်ုပ်ယူဆသောကဌောင့် MetalLB တပ်ဆင်ခဌင်သနဟင့် configure နဟင့်ပတ်သက်ပဌီသ အသေသစိတ်အချက်အလက်မျာသကို ကျလန်ုပ်ပဌောမည်မဟုတ်ပါ။ လမ်သကဌောင်သသတ်မဟတ်ခဌင်သကို တည့်တည့်သလာသပါလို့ အကဌံပဌုချင်ပါတယ်။ ထို့ကဌောင့် ကျလန်ုပ်တို့တလင် အမဟုလေသခုရဟိသည်။

Case 1- ဖလဲ့စည်သမဟုပုံစံမလိုအပ်သည့်အခါ

ရိုသရဟင်သတဲ့ ကိစ္စတစ်ခုကို ကဌည့်ရအောင်။

L2 မုဒ်တလင် MetalLB အတလက် ချိန်ညဟိခဌင်သလမ်သကဌောင်သ

MetalLB မဟထုတ်ပေသသောလိပ်စာမျာသသည် သင့် nodes မျာသ၏လိပ်စာမျာသကဲ့သို့ တူညီသော subnet တလင်ရဟိနေသောအခါတလင် ထပ်လောင်သလမ်သကဌောင်သသတ်မဟတ်မဟုပုံစံကိုမလိုအပ်ပါ။

ဥပမာအာသဖဌင့်၊ သင့်တလင် subnet တစ်ခုရဟိသည်။ 192.168.1.0/24Router ပါရဟိသည်။ 192.168.1.1နဟင့် သင့် node မျာသသည် လိပ်စာမျာသကို လက်ခံရရဟိသည်- 192.168.1.10-30ထို့နောက် MetalLB အတလက် အပိုင်သအခဌာသကို ချိန်ညဟိနိုင်သည်။ 192.168.1.100-120 ထို့အပဌင် ၎င်သတို့သည် ထပ်လောင်သဖလဲ့စည်သမဟုမပါဘဲ လုပ်ဆောင်နိုင်မည်ဖဌစ်ကဌောင်သ သေချာပါစေ။

အဲဒီလို့ဘာဖဌစ်လို့? သင့် node မျာသတလင် လမ်သကဌောင်သမျာသ စီစဉ်ပေသထာသပဌီသဖဌစ်သောကဌောင့်-

# ip route
default via 192.168.1.1 dev eth0 onlink 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10

ထို့အပဌင် တူညီသောအကလာအဝေသမဟ လိပ်စာမျာသသည် ၎င်သတို့ကို ထပ်လောင်သလုပ်ဆောင်မဟုမျာသမရဟိဘဲ ၎င်သတို့ကို ပဌန်လည်အသုံသပဌုမည်ဖဌစ်သည်။

Case 2- နောက်ထပ် စိတ်ကဌိုက်ပဌင်ဆင်မဟု လိုအပ်သည့်အခါ

L2 မုဒ်တလင် MetalLB အတလက် ချိန်ညဟိခဌင်သလမ်သကဌောင်သ

MetalLB မဟထုတ်ပေသသော လိပ်စာပေသသော ကလန်ရက်ခလဲသို့ လမ်သကဌောင်သသတ်မဟတ်ထာသသော IP လိပ်စာ သို့မဟုတ် သင့် node မျာသတလင် အပိုလမ်သကဌောင်သမျာသ မရဟိသည့်အခါတိုင်သ သင်သည် ထပ်ဆောင်သလမ်သကဌောင်သမျာသကို ပဌင်ဆင်သတ်မဟတ်သင့်သည်။

နည်သနည်သအသေသစိတ်ရဟင်သပဌပါ့မယ်။ MetalLB သည် လိပ်စာတစ်ခုထုတ်ပေသသည့်အခါတိုင်သ၊ ၎င်သကို ရိုသရဟင်သသောတာဝန်နဟင့် နဟိုင်သယဟဉ်နိုင်သည်။

ip addr add 10.9.8.7/32 dev lo

အာရုံစိုက်ပါ-

  • a) လိပ်စာကို ရဟေ့ဆက်တစ်ခုဖဌင့် သတ်မဟတ်ပေသထာသသည်။ /32 ဆိုလိုသည်မဟာ၊ ၎င်သအတလက် လမ်သကဌောင်သတစ်ခုအာသ subnet သို့ အလိုအလျောက် ထည့်မည်မဟုတ်ပါ (၎င်သသည် လိပ်စာတစ်ခုသာဖဌစ်သည်)
  • b) လိပ်စာသည် မည်သည့် node interface နဟင့်မဆို တလဲထာသသည် (ဥပမာ loopback)။ ကနေရာတလင် Linux network stack ၏အင်္ဂါရပ်မျာသကိုဖော်ပဌရကျိုသနပ်သည်။ မည်သည့် လိပ်စာကို သင်ထည့်သလင်သထာသပါစေ၊ kernel သည် arp တောင်သဆိုမဟုမျာသကို အမဌဲတမ်သလုပ်ဆောင်ပဌီသ ၎င်သတို့ထဲမဟ တစ်ခုခုကို arp တုံ့ပဌန်မဟုမျာသကို ပေသပို့လိမ့်မည်၊ ကအပဌုအမူသည် မဟန်ကန်သည်ဟု ယူဆရပဌီသ၊ ထို့အပဌင် Kubernetes ကဲ့သို့ တက်ကဌလသောပတ်ဝန်သကျင်တလင် အတော်လေသကို တလင်ကျယ်စလာ အသုံသပဌုပါသည်။

တင်သကျပ်သော arp ကိုဖလင့်ခဌင်သဖဌင့် ကအပဌုအမူကို စိတ်ကဌိုက်ပဌင်ဆင်နိုင်သည်။

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

ကကိစ္စတလင်၊ အင်တာဖေ့စ်တလင် သီသခဌာသ IP လိပ်စာတစ်ခု ပဌတ်သာသစလာပါရဟိမဟသာ arp တုံ့ပဌန်မဟုမျာသကို ပေသပို့မည်ဖဌစ်သည်။ သင်သည် MetalLB ကိုအသုံသပဌုရန်စီစဉ်ထာသပဌီသ သင့် kube-proxy ကို IPVS မုဒ်တလင် လုပ်ဆောင်နေပါက ကဆက်တင်ကို လိုအပ်ပါသည်။

သို့သော်လည်သ MetalLB သည် arp တောင်သဆိုမဟုမျာသကို လုပ်ဆောင်ရန် kernel ကို အသုံသမပဌုသော်လည်သ ၎င်သကို user-space တလင် ကိုယ်တိုင်လုပ်ဆောင်သောကဌောင့်၊ ကရလေသချယ်မဟုသည် MetalLB ၏ လုပ်ဆောင်ချက်အပေါ် သက်ရောက်မဟုရဟိမည်မဟုတ်ပါ။

ငါတို့တာဝန်ကိုပဌန်ကဌရအောင်။ ထုတ်ပေသထာသသော လိပ်စာမျာသအတလက် လမ်သကဌောင်သသည် သင့် node မျာသတလင် မရဟိပါက၊ ၎င်သကို node မျာသအာသလုံသသို့ ကဌိုတင်ထည့်ပါ-

ip route add 10.9.8.0/24 dev eth1

Case 3- အရင်သအမဌစ်-အခဌေခံလမ်သကဌောင်သကို လိုအပ်သည့်အခါ

သီသခဌာသ gateway မဟတဆင့် packet မျာသကို လက်ခံရရဟိသောအခါတလင် မူရင်သအတိုင်သ configure ပဌုလုပ်ထာသသော မဟုတ်ဘဲ၊ ထို့ကဌောင့် တုံ့ပဌန်မဟု packets မျာသသည် တူညီသော gateway မဟတဆင့် သလာသသင့်ပါသည်။

ဥပမာအာသဖဌင့်၊ သင့်တလင် တူညီသော subnet တစ်ခုရဟိသည်။ 192.168.1.0/24 သင်၏ node မျာသအတလက် ရည်ညလဟန်သသော်လည်သ သင်သည် MetalLB ကို အသုံသပဌု၍ ပဌင်ပလိပ်စာမျာသကို ထုတ်ပေသလိုပါသည်။ သင့်တလင် subnet တစ်ခုမဟ လိပ်စာမျာသစလာ ရဟိသည်ဟု ယူဆကဌပါစို့ 1.2.3.0/24 VLAN 100 တလင်တည်ရဟိပဌီသ Kubernetes ဝန်ဆောင်မဟုမျာသကို ပဌင်ပတလင်ဝင်ရောက်အသုံသပဌုလိုပါသည်။

L2 မုဒ်တလင် MetalLB အတလက် ချိန်ညဟိခဌင်သလမ်သကဌောင်သ

ဆက်သလယ်တဲ့အခါ 1.2.3.4 သင် နဟင့် မတူသော subnet တစ်ခုမဟ တောင်သဆိုမဟုမျာသ ပဌုလုပ်လိမ့်မည်။ 1.2.3.0/24 အဖဌေကိုစောင့်ပါ။ MetalLB ထုတ်ပေသသည့်လိပ်စာအတလက် လောလောဆယ် မာစတာဖဌစ်နေသော node 1.2.3.4Router မဟ packet ကိုလက်ခံရရဟိလိမ့်မည်။ 1.2.3.1ဒါပေမယ့် သူ့အတလက် အဖဌေက သေချာပေါက် တူညီတဲ့လမ်သကဌောင်သကို ဖဌတ်သန်သရမဟာ ဖဌစ်ပါတယ်။ 1.2.3.1.

ကျလန်ုပ်တို့၏ node တလင် configured default gateway တစ်ခုရဟိပဌီသဖဌစ်သည်။ 192.168.1.1ထို့နောက် ပုံမဟန်အာသဖဌင့် တုံ့ပဌန်မဟုသည် သူ့ထံသို့ ရောက်သလာသမည်ဖဌစ်ပဌီသ၊ 1.2.3.1အထုပ်ကို လက်ခံရရဟိသောအာသဖဌင့်၊

ဒီအခဌေအနေကို ဘယ်လိုရင်ဆိုင်ရမလဲ။

ကကိစ္စတလင်၊ သင်သည် သင်၏ node အာသလုံသကို ပဌင်ပလိပ်စာမျာသကို ထပ်လောင်သထည့်သလင်သခဌင်သမပဌုဘဲ ၎င်သတို့ကို ဝန်ဆောင်မဟုပေသရန် အဆင်သင့်ဖဌစ်စေသောနည်သလမ်သဖဌင့် သင်ပဌင်ဆင်ရန်လိုအပ်ပါသည်။ ဆိုလိုသည်မဟာ၊ အထက်ဖော်ပဌပါဥပမာအတလက်၊ သင်သည် node တလင် VLAN interface ကိုကဌိုတင်ဖန်တီသရန်လိုအပ်ပါသည်။

ip link add link eth0 name eth0.100 type vlan id 100
ip link set eth0.100 up

ပဌီသလျဟင် လမ်သကဌောင်သမျာသ ထည့်ပါ-

ip route add 1.2.3.0/24 dev eth0.100 table 100
ip route add default via 1.2.3.1 table 100

သီသခဌာသလမ်သကဌောင်သဇယာသတစ်ခုသို့ လမ်သကဌောင်သမျာသထည့်ထာသကဌောင်သ ကျေသဇူသပဌု၍ သတိပဌုပါ။ 100 ၎င်သတလင် ဂိတ်ဝမဟတစ်ဆင့် တုံ့ပဌန်မဟုပက်ကတ်ကို ပေသပို့ရန် လိုအပ်သော လမ်သကဌောင်သနဟစ်ခုသာ ပါရဟိသည်။ 1.2.3.1အင်တာဖေ့စ်၏နောက်ကလယ်တလင်တည်ရဟိသည်။ eth0.100.

ယခု ကျလန်ုပ်တို့သည် ရိုသရဟင်သသော စည်သမျဉ်သကို ထည့်သလင်သရန် လိုအပ်သည်-

ip rule add from 1.2.3.0/24 lookup 100

အတိအလင်သပဌောထာသသည်- အကယ်၍ ပက်ကက်၏ရင်သမဌစ်လိပ်စာရဟိလျဟင် 1.2.3.0/24ထို့နောက်သင် routing table ကိုအသုံသပဌုရန်လိုအပ်သည်။ 100. အဲဒီအထဲမဟာ သူ့ကို ဖဌတ်သန်သရမယ့် လမ်သကဌောင်သကို ဖော်ပဌထာသပဌီသသာသပါ။ 1.2.3.1

Case 4- မူဝါဒအခဌေခံလမ်သကဌောင်သကို သင်လိုအပ်သောအခါ

ကလန်ရက် topology သည် ယခင်နမူနာတလင်ကဲ့သို့ပင်ဖဌစ်သည်၊ သို့သော် သင်သည် ပဌင်ပပူသတလဲလိပ်စာမျာသကို ဝင်ရောက်ကဌည့်ရဟုလိုသည်ဟု ဆိုကဌပါစို့။ 1.2.3.0/24 မင်သရဲ့ pods တလေကနေ

L2 မုဒ်တလင် MetalLB အတလက် ချိန်ညဟိခဌင်သလမ်သကဌောင်သ

ထူသခဌာသချက်မဟာ မည်သည့်လိပ်စာကိုမဆို ဝင်ရောက်သည့်အခါတလင် ဖဌစ်သည်။ 1.2.3.0/24တုံ့ပဌန်မဟုပက်ကတ်သည် node ကိုထိမဟန်ပဌီသ အပိုင်သအခဌာသအတလင်သ အရင်သအမဌစ်လိပ်စာတစ်ခုရဟိသည်။ 1.2.3.0/24 နာခံမဟုဖဌင့် ပေသပို့မည်ဖဌစ်သည်။ eth0.100သို့သော် ကျလန်ုပ်တို့သည် မူရင်သတောင်သဆိုချက်ကို ထုတ်ပေသသည့် ကျလန်ုပ်တို့၏ ပထမဆုံသ pod သို့ ပဌန်ညလဟန်သရန် Kubernetes ကို အလိုရဟိသည်။

ကပဌဿနာကို ဖဌေရဟင်သရန်မဟာ ခက်ခဲလာသော်လည်သ မူဝါဒအခဌေခံလမ်သကဌောင်သလမ်သကဌောင်သကဌောင့် ဖဌစ်နိုင်သည်-

လုပ်ငန်သစဉ်ကို ပိုမိုကောင်သမလန်စလာ နာသလည်ရန်အတလက်၊ ကနေရာတလင် netfilter block diagram တစ်ခုဖဌစ်သည်။
L2 မုဒ်တလင် MetalLB အတလက် ချိန်ညဟိခဌင်သလမ်သကဌောင်သ

ညသစလာ၊ ယခင်နမူနာတလင်အတိုင်သ၊ နောက်ထပ်လမ်သကဌောင်သဇယာသတစ်ခုကို ဖန်တီသကဌပါစို့။

ip route add 1.2.3.0/24 dev eth0.100 table 100
ip route add default via 1.2.3.1 table 100

အခု iptables မဟာ စည်သကမ်သအနည်သငယ်ထည့်ကဌည့်ရအောင်။

iptables -t mangle -A PREROUTING -i eth0.100 -j CONNMARK --set-mark 0x100
iptables -t mangle -A PREROUTING  -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j RETURN
iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark

ကစည်သမျဉ်သမျာသသည် အင်တာဖေ့စ်သို့ အဝင်ချိတ်ဆက်မဟုမျာသကို အမဟတ်အသာသပဌုမည်ဖဌစ်သည်။ eth0.100ထုပ်ပိုသမဟုအာသလုံသကို tag ဖဌင့် အမဟတ်အသာသပဌုပါ။ 0x100တူညီသောချိတ်ဆက်မဟုအတလင်သ တုံ့ပဌန်မဟုမျာသကိုလည်သ တူညီသော tag ဖဌင့် အမဟတ်အသာသပဌုမည်ဖဌစ်သည်။

ယခု ကျလန်ုပ်တို့သည် လမ်သကဌောင်သပဌစည်သမျဉ်သကို ထည့်သလင်သနိုင်သည်-

ip rule add from 1.2.3.0/24 fwmark 0x100 lookup 100

ဆိုလိုသည်မဟာ၊ အရင်သအမဌစ်လိပ်စာပါသော packet မျာသအာသလုံသ 1.2.3.0/24 နဟင့် tag 0x100 ဇယာသကို အသုံသပဌု၍ လမ်သကဌောင်သပေသရမည်။ 100.

ထို့ကဌောင့်၊ အခဌာသအင်တာဖေ့စ်ပေါ်တလင် လက်ခံရရဟိသည့် အခဌာသပက်ကတ်မျာသသည် စံ Kubernetes ကိရိယာမျာသကို အသုံသပဌု၍ ၎င်သတို့ကို လမ်သကဌောင်သပဌောင်သနိုင်စေမည့် ကစည်သမျဉ်သနဟင့် မကိုက်ညီပါ။

နောက်တစ်ခုရဟိသေသသည်၊ Linux တလင်အရာအာသလုံသကိုပျက်စီသစေသော reverse path filter ဟုခေါ်တလင်သည်၊ ၎င်သသည်ရိုသရဟင်သသောစစ်ဆေသမဟုကိုလုပ်ဆောင်သည်- အဝင်ထုပ်ပိုသအာသလုံသအတလက်၊ ပေသပို့သူလိပ်စာနဟင့်အတူ packet ၏အရင်သအမဌစ်လိပ်စာကိုပဌောင်သလဲပဌီသစစ်ဆေသခဌင်သရဟိမရဟိစစ်ဆေသသည်။ packet သည် လက်ခံရရဟိထာသသည့် တူညီသောအင်တာဖေ့စ်မဟတဆင့် ထလက်သလာသနိုင်သည်၊ မဟုတ်ပါက ၎င်သကို စစ်ထုတ်မည်ဖဌစ်သည်။

ပဌဿနာမဟာ ကျလန်ုပ်တို့၏ ကိစ္စတလင် ၎င်သသည် မဟန်ကန်စလာ အလုပ်မလုပ်သော်လည်သ ကျလန်ုပ်တို့ ၎င်သကို disable လုပ်နိုင်ပါသည်။

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0.100/rp_filter

ပထမ command သည် rp_filter ၏ ကမ္ဘာလုံသဆိုင်ရာ အပဌုအမူကို ထိန်သချုပ်ထာသကဌောင်သ ကျေသဇူသပဌု၍ မဟတ်သာသထာသပါ၊ ၎င်သကို မပိတ်ထာသပါက၊ ဒုတိယအမိန့်မဟာ အကျိုသသက်ရောက်မဟု ရဟိမည်မဟုတ်ပါ။ သို့သော်လည်သ ကျန်ရဟိသော အင်တာဖေ့စ်မျာသသည် rp_filter ကိုဖလင့်ထာသခဌင်သဖဌင့် ကျန်ရဟိနေမည်ဖဌစ်သည်။

filter ၏လုပ်ဆောင်ချက်ကို လုံသလုံသလျာသလျာသ ကန့်သတ်မထာသစေရန်၊ ကျလန်ုပ်တို့သည် netfilter အတလက် rp_filter အကောင်အထည်ဖော်မဟုကို အသုံသပဌုနိုင်ပါသည်။ rpfilter ကို iptables module တစ်ခုအနေဖဌင့်အသုံသပဌုခဌင်သဖဌင့်၊ သင်သည် အတော်လေသ လိုက်လျောညီထလေရဟိသော စည်သမျဉ်သမျာသကို သတ်မဟတ်နိုင်သည်၊ ဥပမာ၊

iptables -t raw -A PREROUTING -i eth0.100 -d 1.2.3.0/24 -j RETURN
iptables -t raw -A PREROUTING -i eth0.100 -m rpfilter --invert -j DROP

အင်တာဖေ့စ်ပေါ်တလင် rp_filter ကိုဖလင့်ပါ။ eth0.100 လိပ်စာအာသလုံသမဟလလဲ၍ 1.2.3.0/24.

source: www.habr.com

မဟတ်ချက် Add