Kops ကို အသုံးပြု၍ AWS တွင် Kubernetes 1.9 ကို မကြာသေးမီက စတင်ခဲ့သည်။ မနေ့က၊ ကျွန်ုပ်တို့၏ Kubernetes အစုအဝေးကြီးများသို့ အသွားအလာအသစ်များကို ချောမွေ့စွာ ထုတ်ပေးနေစဉ်တွင်၊ ကျွန်ုပ်တို့၏ အပလီကေးရှင်းမှ ပုံမှန်မဟုတ်သော DNS အမည်ဖြေရှင်းခြင်းဆိုင်ရာ အမှားအယွင်းများကို သတိပြုမိလာသည်။
GitHub မှာ ဒီအကြောင်းတွေ အများကြီးရှိပါတယ်။ kube-dns
и dnsmasq
. ကျွန်ုပ်အတွက် စိတ်ဝင်စားစရာအကောင်းဆုံးနှင့် အသစ်အဆန်းမှာ DNS တောင်းဆိုမှု အသွားအလာ သိသိသာသာ တိုးလာရခြင်း၏ အကြောင်းရင်းဖြစ်သည်။ ကျွန်တော့်ရဲ့ ပို့စ်က ဒီအကြောင်းနဲ့ ပတ်သက်ပြီး ဘာလုပ်ရမလဲ။
ကွန်တိန်နာအတွင်းရှိ DNS ကြည်လင်ပြတ်သားမှုကို - မည်သည့် Linux စနစ်တွင်မဆို - ဖွဲ့စည်းမှုပုံစံဖိုင်ဖြင့် ဆုံးဖြတ်သည်။ /etc/resolv.conf
. မူရင်း Kubernetes dnsPolicy
က ClusterFirst
ဆိုလိုသည်မှာ မည်သည့် DNS တောင်းဆိုမှုကိုမဆို ထပ်ဆင့်ပေးပို့မည်ဖြစ်သည်။ dnsmasq
အိုးထဲတွင် ပြေးနေသည်။ kube-dns
အစုအဝေးအတွင်း၌၊ ၎င်းသည် အလှည့်ကျ တောင်းဆိုချက်ကို အပလီကေးရှင်းသို့ ပေးပို့မည်ဖြစ်သည်။ kube-dns
အကယ်၍ အမည်သည် အစုအဝေး၏ နောက်ဆက်တွဲဖြင့် အဆုံးသတ်ပါက သို့မဟုတ်၊ သို့မဟုတ်ပါက၊ ပိုမိုမြင့်မားသောအဆင့် DNS ဆာဗာသို့။
ဖိုင် /etc/resolv.conf
ကွန်တိန်နာတစ်ခုစီအတွင်းတွင် ပုံသေသည် ဤကဲ့သို့ဖြစ်နေလိမ့်မည်-
nameserver 100.64.0.10
search namespace.svc.cluster.local svc.cluster.local cluster.local
eu-west-1.compute.internal
options ndots:5
သင်တွေ့မြင်ရသည့်အတိုင်း၊ ညွှန်ကြားချက်သုံးခုရှိသည်။
- အမည်ဆာဗာသည် ဝန်ဆောင်မှု၏ IP ဖြစ်သည်။
kube-dns
- ဒေသန္တရရှာဖွေရေးဒိုမိန်း 4 ခု သတ်မှတ်ထားသည်။
search
- ရွေးချယ်ခွင့်ရှိပါတယ်။
ndots:5
ဤဖွဲ့စည်းပုံ၏ စိတ်ဝင်စားဖွယ်အပိုင်းမှာ ဒေသတွင်း ရှာဖွေမှု ဒိုမိန်းများနှင့် ဆက်တင်များ မည်သို့ပင် ဖြစ်သည်။ ndots:5
အတူနေပါ။ ၎င်းကိုနားလည်ရန်၊ အရည်အချင်းမပြည့်မီသောအမည်များအတွက် DNS ကြည်လင်ပြတ်သားမှုကို သင်နားလည်ရန် လိုအပ်သည်။
နာမည်အပြည့်အစုံကဘာလဲ။
အရည်အချင်းပြည့်မီသောအမည်သည် ဒေသန္တရရှာဖွေမှုလုပ်ဆောင်မည်မဟုတ်သည့်အတွက် အမည်ကို အမည်သတ်မှတ်ရာတွင် အကြွင်းမဲ့သတ်မှတ်ခံရမည်ဖြစ်သည်။ စည်းဝေးကြီးအရ၊ DNS ဆော့ဖ်ဝဲသည် အမည်တစ်ခုကို အစက် (.) ဖြင့်အဆုံးသတ်ပါက အရည်အချင်းပြည့်မီသည်ဟု မှတ်ယူကာ အခြားနည်းဖြင့် အရည်အချင်းပြည့်မီခြင်းမရှိပါ။ အဲဒါပါပဲ။ google.com.
အပြည့်အဝသတ်မှတ်ထားပြီး google.com
- မဟုတ်ဘူး။
အရည်အချင်းမပြည့်မီသောအမည်ကို မည်သို့ကိုင်တွယ်သနည်း။
အပလီကေးရှင်းတစ်ခုသည် အမည်တွင်ဖော်ပြထားသော အဝေးထိန်းဌာနသို့ ချိတ်ဆက်သောအခါ၊ DNS အမည်၏ ကြည်လင်ပြတ်သားမှုကို ပုံမှန်အားဖြင့် စနစ်ခေါ်ဆိုမှုတစ်ခုဖြင့် လုပ်ဆောင်သည် ဥပမာ။ getaddrinfo()
. အကယ်၍ အမည်သည် အရည်အချင်းမပြည့်မီပါက ( . နှင့် အဆုံးမသတ်ပါ ) ၊ စနစ်ခေါ်ဆိုမှုသည် အမည်ကို absolute name အဖြစ် ဦးစွာဖြေရှင်းရန်ကြိုးစားမည် သို့မဟုတ် ဒေသတွင်းရှာဖွေရေးဒိုမိန်းများကို ဦးစွာဖြတ်သန်းမည်လားဟု ကျွန်ုပ်တွေးမိပါသည်။ ရွေးချယ်မှုအပေါ် မူတည် ndots
.
လက်စွဲစာအုပ်ထဲက resolv.conf
:
ndots:n
устанавливает порог для количества точек, которые должны появиться в имени, прежде чем будет сделан начальный абсолютный запрос. Значение по умолчанию для n равно 1, что означает, что если в имени есть какие-либо точки, имя будет сначала опробовано как абсолютное имя, прежде чем к нему будут добавлены какие-либо элементы списка поиска.
ဆိုလိုတာက သည်လိုဆိုလျှင် ndots
5 ၏တန်ဖိုးနှင့် အမည်တွင် အစက် 5 ခုအောက်ပါရှိသည်၊ စနစ်ခေါ်ဆိုမှုသည် ၎င်းကို ဆက်တိုက်ဖြေရှင်းရန် ကြိုးစားမည်ဖြစ်ပြီး၊ ဒေသန္တရရှာဖွေမှုဒိုမိန်းများအားလုံးကို ဦးစွာဖြတ်ကျော်ကာ မအောင်မြင်ပါက နောက်ဆုံးတွင် ၎င်းကို အကြွင်းမဲ့အမည်အဖြစ် ဖြေရှင်းမည်ဖြစ်သည်။
အဘယ်ကြောင့်နည်း ndots:5
၎င်းသည် အက်ပလီကေးရှင်းစွမ်းဆောင်ရည်ကို ထိခိုက်စေနိုင်ပါသလား။
သင်စိတ်ကူးကြည့်သည့်အတိုင်း၊ သင့်အက်ပ်လီကေးရှင်းသည် ပြင်ပအသွားအလာများစွာကို အသုံးပြုပါက၊ တည်ဆောက်ထားသည့် TCP ချိတ်ဆက်မှုတိုင်း (သို့မဟုတ် ပိုမိုတိကျစွာဖြေရှင်းထားသော အမည်တိုင်းအတွက်)၊ ၎င်းသည် အမည်ကိုမှန်ကန်စွာဖြေရှင်းခြင်းမပြုမီ 5 DNS စုံစမ်းမေးမြန်းမှုများကို ထုတ်ပေးမည်ဖြစ်ပါသည်။ 4 ဒေသတွင်းရှာဖွေရေးဒိုမိန်း၊ နှင့်အဆုံးတွင်လုံးဝအမည်ဖြေရှင်းရန်တောင်းဆိုချက်ကိုထုတ်လိမ့်မည်။
အောက်ဖော်ပြပါဇယားသည် ကျွန်ုပ်တို့၏အပလီကေးရှင်းတွင်သတ်မှတ်ထားသော hostname အနည်းငယ်ကို မပြောင်းမီနှင့်အပြီးတွင် ကျွန်ုပ်တို့၏ 3 kube-dns module တွင် စုစုပေါင်းလမ်းကြောင်းကိုပြသထားသည်။
အောက်ဖော်ပြပါ ပုံကြမ်းသည် ကျွန်ုပ်တို့၏ အပလီကေးရှင်းတွင် ပြင်ဆင်သတ်မှတ်ထားသော hostname အများအပြားကို မပြောင်းခင်နှင့် ပြီးနောက်တွင် အပလီကေးရှင်း၏ latency ကိုပြသသည် (ဒေါင်လိုက်အပြာရောင်မျဉ်းသည် ဖြန့်ကျက်ခြင်းဖြစ်သည်)။
ဖြေရှင်းချက် #1 - အရည်အချင်းပြည့်မီသော အမည်များကို အသုံးပြုပါ။
သင့်တွင် ချိတ်ဆက်မှုအများအပြားကို ဖန်တီးပေးသည့် တည်ငြိမ်သောပြင်ပအမည်အနည်းငယ် (ဆိုလိုသည်မှာ အပလီကေးရှင်းဖွဲ့စည်းပုံတွင် သတ်မှတ်ထားသည်) ရှိပါက၊ ၎င်းတို့ကို ပေါင်းထည့်လိုက်ရုံဖြင့် ၎င်းတို့ကို အပြည့်အ၀ အရည်အချင်းပြည့်မီသူများထံ ပြောင်းရန် အရိုးရှင်းဆုံးဖြေရှင်းချက်ဖြစ်နိုင်သည်။ အဆုံးမှာ။
၎င်းသည် နောက်ဆုံးဖြေရှင်းချက်မဟုတ်သော်လည်း သန့်ရှင်းသပ်ရပ်မှုမရှိသော်လည်း အခြေအနေကို မြန်မြန်ဆန်ဆန်တိုးတက်စေရန် ကူညီပေးသည်။ အထက်ပါ ဖန်သားပြင်ဓာတ်ပုံများတွင် ပြထားသည့် ရလဒ်များကို ကျွန်ုပ်တို့၏ပြဿနာကိုဖြေရှင်းရန် ဤ patch ကိုအသုံးပြုထားပါသည်။
ဖြေရှင်းချက် #2 - စိတ်ကြိုက်ပြင်ဆင်ခြင်း။ ndots
в dnsConfig
Kubernetes 1.9 တွင်၊ လုပ်ဆောင်နိုင်စွမ်းသည် အယ်လ်ဖာမုဒ် (ဘီတာဗားရှင်း v1.10) တွင် ပေါ်လာပြီး ၎င်းသည် သင့်အား pod ပိုင်ဆိုင်မှုမှတစ်ဆင့် DNS ဘောင်များကို ပိုမိုကောင်းမွန်စွာ ထိန်းချုပ်နိုင်စေမည်ဖြစ်သည်။ dnsConfig
. အခြားအရာများထဲတွင်၊ ၎င်းသည် သင့်အား တန်ဖိုးကို configure လုပ်ရန် ခွင့်ပြုသည်။ ndots
သီးခြား pod တစ်ခုအတွက်၊ i.e.
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: dns-example
spec:
containers:
- name: test
image: nginx
dnsConfig:
options:
- name: ndots
value: "1"
သတင်းရင်းမြစ်
ကျွန်ုပ်တို့၏ဘလော့ဂ်ရှိ အခြားဆောင်းပါးများကိုလည်း ဖတ်ပါ-
Golang ရှိ ဆက်စပ်ပက်ကေ့ချ်ကို နားလည်ခြင်း။ Docker ပုံများကိုကျုံ့ရန်ရိုးရှင်းသောလှည့်ကွက်သုံးခု Kubernetes တွင် ဖော်ပြထားသည့် အရန်သိမ်းဆည်းမှုများ ကွဲပြားသော ဝဘ်ပရောဂျက်များစွာကို အရန်သိမ်းခြင်း။ Redmine အတွက် Telegram bot ။ သင်ကိုယ်တိုင်ရော အခြားသူများအတွက်ပါ ဘဝကို ရိုးရှင်းအောင် ဘယ်လိုလုပ်မလဲ။
source: www.habr.com