Kubernetes ရှိ ကွန်ရက်ချိတ်ဆက်မှုအတွက် Calico- မိတ်ဆက်ခြင်းနှင့် အတွေ့အကြုံအနည်းငယ်

Kubernetes ရှိ ကွန်ရက်ချိတ်ဆက်မှုအတွက် Calico- မိတ်ဆက်ခြင်းနှင့် အတွေ့အကြုံအနည်းငယ်

ဆောင်းပါး၏ရည်ရွယ်ချက်မှာ Kubernetes ရှိ ကွန်ရက်ချိတ်ဆက်ခြင်းနှင့် ကွန်ရက်မူဝါဒများကို စီမံခန့်ခွဲခြင်းနှင့် စီမံခန့်ခွဲခြင်းဆိုင်ရာ အခြေခံများကို စာဖတ်သူအား မိတ်ဆက်ရန်နှင့် စံစွမ်းဆောင်ရည်များကို တိုးချဲ့သည့် ပြင်ပအဖွဲ့အစည်း Calico ပလပ်အင်ကို မိတ်ဆက်ပေးရန်ဖြစ်သည်။ လမ်းကြောင်းတစ်လျှောက်တွင်၊ ကျွန်ုပ်တို့၏လုပ်ငန်းလည်ပတ်မှုအတွေ့အကြုံမှ လက်တွေ့ဥပမာများကို အသုံးပြု၍ ဖွဲ့စည်းမှုပုံစံနှင့် အချို့သောအင်္ဂါရပ်များကို လွယ်ကူစွာပြသပါမည်။

Kubernetes ကွန်ရက်ချိတ်ဆက်ကိရိယာအတွက် အမြန်မိတ်ဆက်ခြင်း။

ကွန်ရက်မရှိဘဲ Kubernetes အစုအဝေးတစ်ခုအား စိတ်ကူးမယဉ်နိုင်ပါ။ ကျွန်ုပ်တို့သည် ၎င်းတို့၏ အခြေခံအကြောင်းအရာများကို ထုတ်ပြန်ထားပြီးဖြစ်သည်-"Kubernetes တွင် ကွန်ရက်ချိတ်ဆက်ခြင်းအတွက် သရုပ်ဖော်လမ်းညွှန်ချက်"ထိုအခါ"လုံခြုံရေးကျွမ်းကျင်သူများအတွက် Kubernetes ကွန်ရက်မူဝါဒများကို မိတ်ဆက်ခြင်း။"။

ဤဆောင်းပါး၏အခြေအနေတွင်၊ K8s ကိုယ်တိုင်က containers နှင့် nodes များကြား ကွန်ရက်ချိတ်ဆက်မှုအတွက် တာဝန်မရှိကြောင်း သတိပြုရန် အရေးကြီးသည်- ဤအတွက်၊ အမျိုးမျိုး၊ CNI ပလပ်အင်များ (Container Networking Interface)။ ဒီသဘောတရားကို ကျွန်တော်တို သူတို့လည်းငါ့ကိုပြောတယ်။.

ဥပမာအားဖြင့်၊ ဤပလပ်အင်များအနက် အသုံးအများဆုံးမှာ Flannel — node တစ်ခုစီတွင် တံတားများကို မြှင့်တင်ခြင်းဖြင့် အစုအဝေးအားလုံးကြား ကွန်ရက်ချိတ်ဆက်မှုကို အပြည့်အဝ ပံ့ပိုးပေးသည်။ သို့သော်၊ ပြီးပြည့်စုံပြီး စည်းကြပ်မှုမရှိသော အသုံးပြုခွင့်သည် အမြဲတမ်း အကျိုးရှိမည်မဟုတ်ပါ။ အစုအဝေးတွင် အနည်းငယ်မျှသာ သီးခြားခွဲထားမှုမျိုး ပေးဆောင်ရန်၊ firewall ၏ဖွဲ့စည်းပုံတွင် ဝင်ရောက်စွက်ဖက်ရန် လိုအပ်ပါသည်။ ယေဘူယျအားဖြင့် ၎င်းကို CNI ၏ ထိန်းချုပ်မှုအောက်တွင် ထားရှိထားသောကြောင့် iptables တွင် ပြင်ပမှ ဝင်ရောက်စွက်ဖက်မှုများကို မှားယွင်းစွာ အဓိပ္ပာယ်ဖွင့်ဆိုနိုင်သည် သို့မဟုတ် လုံးလုံးလျားလျား လျစ်လျူရှုထားနိုင်သည်။

Kubernetes အစုအဝေးတွင် ကွန်ရက်မူဝါဒစီမံခန့်ခွဲမှုကို စီစဉ်ခြင်းအတွက် "ဘောင်အပြင်မှ" ကို ပေးထားသည်။ NetworkPolicy API. ရွေးချယ်ထားသော namespaces များပေါ်တွင် ဖြန့်ဝေထားသော ဤရင်းမြစ်သည် အပလီကေးရှင်းတစ်ခုမှ အခြားအသုံးပြုခွင့်ကို ခွဲခြားရန် စည်းမျဉ်းများပါရှိသည်။ ၎င်းသည် သတ်မှတ်ထားသော pods၊ ပတ်ဝန်းကျင်များ (namespaces) သို့မဟုတ် IP လိပ်စာများပိတ်ဆို့ခြင်းကြားတွင် ဝင်ရောက်နိုင်မှုကိုလည်း စီစဉ်သတ်မှတ်နိုင်သည်-

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

ဤသည်မှာ ရှေးအကျဆုံး ဥပမာမဟုတ်ပေ။ တရားဝင်စာရွက်စာတမ်း ကွန်ရက်မူဝါဒများ မည်သို့အလုပ်လုပ်ပုံ၏ ယုတ္တိယုတ္တိကို နားလည်လိုသောဆန္ဒကို တစ်ကြိမ်နှင့်တစ်ပြိုင်နက် တွန်းလှန်နိုင်သည်။ သို့သော်၊ ကျွန်ုပ်တို့သည် ကွန်ရက်မူဝါဒများကို အသုံးပြု၍ ယာဉ်အသွားအလာစီးဆင်းမှုကို လုပ်ဆောင်ခြင်း၏ အခြေခံမူများနှင့် နည်းလမ်းများကို နားလည်ရန် ကြိုးစားဆဲဖြစ်သည်။

အသွားအလာ အမျိုးအစား 2 မျိုး ရှိသည်ဟူသည့် ယုတ္တိဗေဒအရ ပေါ့ဒ်သို့ ဝင်ခြင်း (Ingress) နှင့် ၎င်းမှ ထွက်ခြင်း (Egress)။

Kubernetes ရှိ ကွန်ရက်ချိတ်ဆက်မှုအတွက် Calico- မိတ်ဆက်ခြင်းနှင့် အတွေ့အကြုံအနည်းငယ်

တကယ်တော့ နိုင်ငံရေးဆိုတာ လှုပ်ရှားမှုရဲ့ ဦးတည်ချက်အပေါ် အခြေခံပြီး ဒီအမျိုးအစား ၂ မျိုး ခွဲထားပါတယ်။

နောက်ထပ်လိုအပ်သော attribute မှာ selector တစ်ခုဖြစ်သည်။ စည်းကမ်းလိုက်နာသူ။ ၎င်းသည် pod (သို့မဟုတ် pods အုပ်စုများ) သို့မဟုတ် ပတ်ဝန်းကျင် (ဆိုလိုသည်မှာ namespace တစ်ခု) ဖြစ်နိုင်သည်။ အရေးကြီးသောအသေးစိတ်အချက်- ဤအရာဝတ္ထုအမျိုးအစားနှစ်ခုစလုံးတွင် အညွှန်းတစ်ခုပါရှိရမည် (တံဆိပ် Kubernetes ဝေါဟာရဗေဒတွင်) - ဤအရာများသည် နိုင်ငံရေးသမားများနှင့် လုပ်ကိုင်ဆောင်ရွက်နေသူများဖြစ်သည်။

အညွှန်းတစ်မျိုးမျိုးဖြင့် ပေါင်းစည်းထားသည့် ကန့်သတ်ရွေးချယ်မှုအရေအတွက်အပြင်၊ မတူညီသောပုံစံများဖြင့် "ခွင့်ပြု/ငြင်းဆိုခြင်း/လူတိုင်း" ကဲ့သို့သော စည်းမျဉ်းများကို ရေးနိုင်သည်။ ဤရည်ရွယ်ချက်အတွက်၊ ပုံစံတည်ဆောက်မှုများကို အသုံးပြုသည်-

  podSelector: {}
  ingress: []
  policyTypes:
  - Ingress

— ဤဥပမာတွင်၊ ပတ်ဝန်းကျင်ရှိ pods အားလုံးကို အဝင်လမ်းကြောင်းမှ ပိတ်ဆို့ထားသည်။ ဆန့်ကျင်ဘက်အပြုအမူကို အောက်ပါတည်ဆောက်မှုဖြင့် အောင်မြင်နိုင်သည်။

  podSelector: {}
  ingress:
  - {}
  policyTypes:
  - Ingress

အပြင်ထွက်ခြင်းအတွက် အလားတူ:

  podSelector: {}
  policyTypes:
  - Egress

- အဲဒါကို ပိတ်လိုက်ပါ။ ဤတွင် ပါဝင်ရမည့်အရာများမှာ-

  podSelector: {}
  egress:
  - {}
  policyTypes:
  - Egress

အစုအဖွဲ့တစ်ခုအတွက် CNI ပလပ်အင်ရွေးချယ်မှုသို့ ပြန်သွားသည်မှာ သတိပြုသင့်သည်။ ကွန်ရက်ပလပ်အင်တိုင်းသည် NetworkPolicy ကို မပံ့ပိုးပါ။. ဥပမာအားဖြင့်၊ ဖော်ပြပြီးသား Flannel သည် ကွန်ရက်မူဝါဒများကို မည်သို့စီစဉ်သတ်မှတ်ရမည်ကို မသိပါ။ တိုက်ရိုက်ပြောတာ တရားဝင် repository ထဲမှာ။ အခြားရွေးချယ်စရာတစ်ခု - Open Source ပရောဂျက်တစ်ခုကိုလည်း ဖော်ပြထားပါသည်။ Calicoကွန်ရက်မူဝါဒများနှင့်ပတ်သက်၍ Kubernetes APIs ၏ စံသတ်မှတ်မှုကို သိသိသာသာ ချဲ့ထွင်ပေးသည်။

Kubernetes ရှိ ကွန်ရက်ချိတ်ဆက်မှုအတွက် Calico- မိတ်ဆက်ခြင်းနှင့် အတွေ့အကြုံအနည်းငယ်

Calico: သီအိုရီကို သိလာခြင်း

Calico ပလပ်အင်ကို Flannel (ပရောဂျက်ခွဲ) နှင့် ပေါင်းစည်းရာတွင် အသုံးပြုနိုင်သည်။ တူးမွောငျး) သို့မဟုတ် သီးခြား၊ ကွန်ရက်ချိတ်ဆက်မှုနှင့် ရရှိနိုင်မှု စီမံခန့်ခွဲမှုစွမ်းရည် နှစ်ခုစလုံးကို အကျုံးဝင်သည်။

K8s “boxed” solution နှင့် Calico မှ သတ်မှတ်ထားသော API ကို အသုံးပြု၍ မည်သည့်အခွင့်အလမ်းများကို ပေးစွမ်းသနည်း။

ဤသည်မှာ NetworkPolicy တွင်တည်ဆောက်ထားသည့်အရာဖြစ်သည်-

  • နိုင်ငံရေးသမားများကို ပတ်ဝန်းကျင်က ကန့်သတ်ထားသည်။
  • မူဝါဒများကို အညွှန်းများဖြင့် အမှတ်အသားပြုထားသည့် pods များတွင် ကျင့်သုံးသည်၊
  • စည်းမျဉ်းများကို pods၊ ပတ်ဝန်းကျင် သို့မဟုတ် subnets များတွင် အသုံးချနိုင်သည်။
  • စည်းမျဉ်းများတွင် ပရိုတိုကောများ၊ အမည်ရှိ သို့မဟုတ် သင်္ကေတဆိုင်ရာ ဆိပ်ကမ်းသတ်မှတ်ချက်များ ပါဝင်နိုင်သည်။

Calico သည် ဤလုပ်ဆောင်ချက်များကို မည်ကဲ့သို့ ချဲ့ထွင်သည် ။

  • မူဝါဒများကို မည်သည့်အရာဝတ္တုတွင်မဆို အသုံးချနိုင်သည်- pod၊ container၊ virtual machine သို့မဟုတ် interface;
  • စည်းမျဉ်းများတွင် သီးခြားလုပ်ဆောင်ချက် (တားမြစ်ခြင်း၊ ခွင့်ပြုချက်၊ သစ်ခုတ်ခြင်း) ပါ၀င်နိုင်သည်။
  • ပစ်မှတ် သို့မဟုတ် စည်းမျဉ်းများ၏ရင်းမြစ်သည် ဆိပ်ကမ်းတစ်ခု၊ ဆိပ်ကမ်းများ၊ ပရိုတိုကောများ၊ HTTP သို့မဟုတ် ICMP ရည်ညွှန်းချက်များ၊ IP သို့မဟုတ် ကွန်ရက်ခွဲ (4th သို့မဟုတ် 6th မျိုးဆက်)၊ မည်သည့်ရွေးချယ်မှုမဆို (nodes၊ hosts၊ ပတ်ဝန်းကျင်များ) ဖြစ်နိုင်သည်။
  • ထို့အပြင်၊ သင်သည် DNAT ဆက်တင်များနှင့် ယာဉ်အသွားအလာ ထပ်ဆင့်ခြင်းမူဝါဒများကို အသုံးပြု၍ အသွားအလာလမ်းကြောင်းကို ထိန်းညှိနိုင်သည်။

Calico repository တွင် GitHub တွင် ပထမဆုံးလုပ်ဆောင်မှုသည် ဇူလိုင်လ 2016 မှစတင်ပြီး တစ်နှစ်အကြာတွင် ပရောဂျက်သည် Kubernetes ကွန်ရက်ချိတ်ဆက်မှုကို စည်းရုံးရာတွင် ဦးဆောင်နေရာယူခဲ့သည် - ၎င်းကို ဥပမာအားဖြင့် စစ်တမ်းရလဒ်များအရ သက်သေပြပါသည်။ The New Stack မှဆောင်ရွက်သည်။:

Kubernetes ရှိ ကွန်ရက်ချိတ်ဆက်မှုအတွက် Calico- မိတ်ဆက်ခြင်းနှင့် အတွေ့အကြုံအနည်းငယ်

K8s ကဲ့သို့သော ကြီးမားသော စီမံခန့်ခွဲသည့် ဖြေရှင်းချက်များစွာ Amazon EKS, Azure AKS, Google GKE အခြားသူများက ၎င်းကို အသုံးပြုရန် အကြံပြုလာကြသည်။

စွမ်းဆောင်ရည်ပိုင်းအရတော့ အရာအားလုံးက ဒီမှာ ကောင်းပါတယ်။ ၎င်းတို့၏ထုတ်ကုန်ကို စမ်းသပ်ရာတွင်၊ Calico ဖွံ့ဖြိုးတိုးတက်ရေးအဖွဲ့သည် တစ်စက္ကန့်လျှင် ကွန်တိန်နာ 50000 နှုန်းဖြင့် ဖန်တီးမှုနှုန်းဖြင့် ကွန်တိန်နာ 500 ကျော်တွင် ကွန်တိန်နာ 20 ကျော်ကို သရုပ်ပြခဲ့သည်။ အတိုင်းအတာ ချဲ့ထွင်ခြင်းတွင် မည်သည့်ပြဿနာမျှ မတွေ့ရှိရပါ။ အဲဒီလိုဖြစ်မှာပဲ။ ကြေငြာခဲ့ကြသည်။ ပထမဗားရှင်းကို ကြေငြာထားပြီးသားပါ။ ဖြတ်သန်းမှုနှင့် အရင်းအမြစ်သုံးစွဲမှုအပေါ် အာရုံစိုက်သည့် လွတ်လပ်သောလေ့လာမှုများသည် Calico ၏စွမ်းဆောင်ရည်သည် Flannel နီးပါးကောင်းကြောင်း အတည်ပြုသည်။ ဥပမာအား:

Kubernetes ရှိ ကွန်ရက်ချိတ်ဆက်မှုအတွက် Calico- မိတ်ဆက်ခြင်းနှင့် အတွေ့အကြုံအနည်းငယ်

ပရောဂျက်သည် အလွန်လျင်မြန်စွာ ဖွံ့ဖြိုးတိုးတက်နေပြီး၊ ၎င်းသည် လူကြိုက်များသော K8s၊ OpenShift၊ OpenStack စီမံခန့်ခွဲသည့် ဖြေရှင်းချက်များတွင် အလုပ်လုပ်ရန် ပံ့ပိုးပေးသည်၊ ၎င်းကို အသုံးပြု၍ အစုအဝေးတစ်ခုကို အသုံးပြုသည့်အခါ Calico ကို အသုံးပြုနိုင်သည်။ ကန်တယ်။Service Mesh ကွန်ရက်များ တည်ဆောက်ခြင်းဆိုင်ရာ ရည်ညွှန်းချက်များ ရှိသည် (ဒီနေရာမှာဥပမာတစ်ခုဖြစ်ပါသည် Istio နှင့် တွဲဖက်အသုံးပြုသည်။

Calico နှင့်လေ့ကျင့်ပါ။

vanilla Kubernetes ကိုအသုံးပြုခြင်း၏ ယေဘူယျအခြေအနေတွင်၊ CNI ကိုထည့်သွင်းခြင်းသည် ဖိုင်ကိုအသုံးပြုခြင်းတွင် အကျုံးဝင်ပါသည်။ calico.yaml, တရားဝင်ဝက်ဘ်ဆိုက်မှဒေါင်းလုဒ်လုပ်ထားသည်။, အသုံးပြု kubectl apply -f.

စည်းကမ်းအရ၊ ပလပ်အင်၏ လက်ရှိဗားရှင်းသည် Kubernetes ၏ နောက်ဆုံးဗားရှင်း 2-3 ဗားရှင်းနှင့် ကိုက်ညီမှုရှိသည်- ဗားရှင်းအဟောင်းများတွင် လုပ်ဆောင်မှုကို မစမ်းသပ်ရသေးဘဲ အာမခံချက်မရှိပါ။ developer များအဆိုအရ Calico သည် iptables သို့မဟုတ် IPVS ၏ထိပ်တွင် CentOS 3.10၊ Ubuntu 7 သို့မဟုတ် Debian 16 ကိုအသုံးပြုသည့် 8 အထက် Linux kernels ပေါ်တွင်အလုပ်လုပ်သည်။

ပတ်ဝန်းကျင်အတွင်း အထီးကျန်

ယေဘူယျနားလည်သဘောပေါက်ရန်အတွက် Calico အမှတ်အသားရှိ ကွန်ရက်မူဝါဒများသည် စံသတ်မှတ်ချက်များနှင့် မည်သို့ကွာခြားကြောင်းနှင့် စည်းမျဉ်းများဖန်တီးရာတွင် ချဉ်းကပ်ပုံသည် ၎င်းတို့၏ဖတ်ရှုနိုင်မှုနှင့် ဖွဲ့စည်းမှုပုံစံပြောင်းလွယ်ပြင်လွယ်ကို မည်သို့ရိုးရှင်းလွယ်ကူစေကြောင်း နားလည်ရန် ရိုးရှင်းသောကိစ္စရပ်ကို ကြည့်ကြပါစို့။

Kubernetes ရှိ ကွန်ရက်ချိတ်ဆက်မှုအတွက် Calico- မိတ်ဆက်ခြင်းနှင့် အတွေ့အကြုံအနည်းငယ်

အစုအဝေးတွင် အသုံးပြုထားသော ဝဘ်အက်ပလီကေးရှင်း ၂ ခုရှိသည်- Node.js နှင့် PHP တွင်၊ တစ်ခုမှာ Redis ကိုအသုံးပြုသည်။ PHP မှ Redis သို့ ဝင်ရောက်ခွင့်ကို ပိတ်ဆို့ရန် Node.js နှင့် ချိတ်ဆက်မှုကို ထိန်းသိမ်းထားစဉ်၊ အောက်ပါ မူဝါဒကို ကျင့်သုံးရုံသာ။

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-redis-nodejs
spec:
  podSelector:
    matchLabels:
      service: redis
  ingress:
  - from:
    - podSelector:
        matchLabels:
          service: nodejs
    ports:
    - protocol: TCP
      port: 6379

အခြေခံအားဖြင့် ကျွန်ုပ်တို့သည် Node.js မှ Redis ဆိပ်ကမ်းသို့ အဝင်အသွားအလာကို ခွင့်ပြုထားသည်။ ပြီးတော့ သူတို့က တခြားဘာကိုမှ တားမြစ်တာ မဟုတ်ဘူးဆိုတာ ရှင်းပါတယ်။ NetworkPolicy ပေါ်လာသည်နှင့်တပြိုင်နက်၊ ၎င်းတွင်ဖော်ပြထားသော ရွေးချယ်မှုအားလုံးကို အခြားနည်းဖြင့် မသတ်မှတ်ပါက သီးခြားခွဲထုတ်သွားပါမည်။ သို့သော်၊ သီးခြားခွဲထုတ်ခြင်းစည်းမျဉ်းများသည် ရွေးချယ်သူမှ မဖုံးလွှမ်းထားသော အခြားအရာများနှင့် သက်ဆိုင်ခြင်းမရှိပါ။

ဥပမာကိုအသုံးပြုသည်။ apiVersion Kubernetes သည် သေတ္တာထဲတွင် ရှိနေသော်လည်း မည်သည့်အရာကမှ သင့်ကို အသုံးမပြုအောင် တားဆီးထားသည်။ Calico ပေးပို့မှုမှ အမည်တူ အရင်းအမြစ်. အဲဒီမှာ syntax က ပိုအသေးစိတ်ရှိတယ်၊ ဒါကြောင့် အထက်ဖော်ပြပါ ကိစ္စအတွက် စည်းကမ်းချက်ကို အောက်ပါပုံစံနဲ့ ပြန်ရေးရပါလိမ့်မယ်။

apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: allow-redis-nodejs
spec:
  selector: service == 'redis'
  ingress:
  - action: Allow
    protocol: TCP
    source:
      selector: service == 'nodejs'
    destination:
      ports:
      - 6379

ပုံမှန် NetworkPolicy API မှတဆင့် အသွားအလာအားလုံးကို ခွင့်ပြုခြင်း သို့မဟုတ် ငြင်းပယ်ခြင်းအတွက် အထက်ဖော်ပြပါ တည်ဆောက်မှုများတွင် နားလည်ရန်နှင့် မှတ်မိရန်ခက်ခဲသော ကွင်းစဥ်များပါရှိသည်။ Calico ၏ဖြစ်ရပ်တွင်၊ firewall စည်းမျဉ်း၏ယုတ္တိကိုဆန့်ကျင်ဘက်သို့ပြောင်းရန်၊ ပြောင်းရုံသာဖြစ်သည်။ action: Allow အပေါ် action: Deny.

ပတ်ဝန်းကျင်က အထီးကျန်

ယခု Prometheus တွင် စုဆောင်းခြင်းအတွက် လုပ်ငန်းမက်ထရစ်များကို အပလီကေးရှင်းတစ်ခုမှထုတ်ပေးသည့် အခြေအနေနှင့် Grafana ကိုအသုံးပြု၍ နောက်ထပ်ခွဲခြမ်းစိတ်ဖြာမှုကို စိတ်ကူးကြည့်ပါ။ အပ်လုဒ်တွင် အထိခိုက်မခံသောဒေတာ ပါဝင်နိုင်သည်၊ ၎င်းကို မူရင်းအတိုင်း အများသူငှာကြည့်ရှုနိုင်ပြန်သည်။ ဒီဒေတာကို မျက်စိမှိတ်ဝှက်ထားလိုက်ရအောင်။

Kubernetes ရှိ ကွန်ရက်ချိတ်ဆက်မှုအတွက် Calico- မိတ်ဆက်ခြင်းနှင့် အတွေ့အကြုံအနည်းငယ်

စည်းကမ်းအနေဖြင့် Prometheus ကို သီးခြားဝန်ဆောင်မှုပတ်ဝန်းကျင်တွင် ထားရှိသည် - ဥပမာတွင် ၎င်းသည် ဤကဲ့သို့သော namespace ဖြစ်လိမ့်မည်။

apiVersion: v1
kind: Namespace
metadata:
  labels:
    module: prometheus
  name: kube-prometheus

လယ်ယာ metadata.labels ဒါက မတော်တဆမှု မဟုတ်ဘူး။ အထက်ဖော်ပြပါအတိုင်း၊ namespaceSelector (လည်းပဲ podSelector) တံဆိပ်များဖြင့် လုပ်ဆောင်သည်။ ထို့ကြောင့်၊ သတ်မှတ်ထားသော port တစ်ခုရှိ pods များအားလုံးမှ မက်ထရစ်များကို ထုတ်ယူခွင့်ပြုရန်၊ သင်သည် အညွှန်းအမျိုးအစားအချို့ကို ပေါင်းထည့်ရမည်ဖြစ်ပြီး (သို့မဟုတ် ရှိပြီးသားအရာများထံမှယူပါ)၊ ထို့နောက် ကဲ့သို့သော configuration ကိုအသုံးပြုရန်-

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-metrics-prom
spec:
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          module: prometheus
    ports:
    - protocol: TCP
      port: 9100

Calico မူဝါဒများကို သင်အသုံးပြုပါက၊ syntax သည် ဤကဲ့သို့ဖြစ်လိမ့်မည်-

apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
  name: allow-metrics-prom
spec:
  ingress:
  - action: Allow
    protocol: TCP
    source:
      namespaceSelector: module == 'prometheus'
    destination:
      ports:
      - 9100

ယေဘုယျအားဖြင့်၊ သီးခြားလိုအပ်ချက်များအတွက် ဤမူဝါဒအမျိုးအစားများကို ထည့်သွင်းခြင်းဖြင့်၊ အစုအဖွဲ့အတွင်းရှိ အပလီကေးရှင်းများ၏ လုပ်ဆောင်မှုတွင် အန္တရာယ်ရှိသော သို့မဟုတ် မတော်တဆ ဝင်ရောက်စွက်ဖက်ခြင်းမှ ကာကွယ်နိုင်ပါသည်။

Calico ၏ဖန်တီးသူများ၏အဆိုအရ အကောင်းဆုံးအလေ့အကျင့်မှာ “အရာရာကိုပိတ်ဆို့ပြီး သင်လိုအပ်သောအရာကို ပြတ်သားစွာဖွင့်ဆိုခြင်းဖြစ်သည်” ချဉ်းကပ်နည်းကို မှတ်တမ်းတင်ထားသည်။ တရားဝင်စာရွက်စာတမ်း (အခြားသူများကလည်း အလားတူချဉ်းကပ်နည်းကို လိုက်နာကြသည်၊ အထူးသဖြင့်၊ ဖော်ပြပြီးသားဆောင်းပါး).

Additional Calico Objects ကို အသုံးပြုခြင်း။

Calico APIs ၏ တိုးချဲ့ထားသော set မှတဆင့် pods များသာ အကန့်အသတ်မရှိ၊ node များရရှိနိုင်မှုကို ထိန်းညှိပေးနိုင်ကြောင်း သတိပေးပါရစေ။ အောက်ဖော်ပြပါ ဥပမာတွင် အသုံးပြုသည်။ GlobalNetworkPolicy အစုအဝေးရှိ ICMP တောင်းဆိုမှုများကို ကျော်ဖြတ်နိုင်မှုအား ပိတ်ထားသည် (ဥပမာ၊ ပေါ့ဒ်တစ်ခုမှ node တစ်ခု၊ pods များကြား သို့မဟုတ် node မှ IP pod သို့ pings)

apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
  name: block-icmp
spec:
  order: 200
  selector: all()
  types:
  - Ingress
  - Egress
  ingress:
  - action: Deny
    protocol: ICMP
  egress:
  - action: Deny
    protocol: ICMP

အထက်ဖော်ပြပါကိစ္စရပ်တွင်၊ ICMP မှတစ်ဆင့် အစုအဝေးများအချင်းချင်း “ရောက်ရှိ” ရန် ဖြစ်နိုင်သေးသည်။ ပြီးတော့ ဒီပြဿနာကို နည်းလမ်းနဲ့ ဖြေရှင်းတယ်။ GlobalNetworkPolicy၊ အဖွဲ့အစည်းတစ်ခုသို့ အသုံးချခဲ့သည်။ HostEndpoint:

apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
  name: deny-icmp-kube-02
spec:
  selector: "role == 'k8s-node'"
  order: 0
  ingress:
  - action: Allow
    protocol: ICMP
  egress:
  - action: Allow
    protocol: ICMP
---
apiVersion: crd.projectcalico.org/v1
kind: HostEndpoint
metadata:
  name: kube-02-eth0
  labels:
    role: k8s-node
spec:
  interfaceName: eth0
  node: kube-02
  expectedIPs: ["192.168.2.2"]

VPN Case

နောက်ဆုံးအနေနဲ့၊ စံသတ်မှတ်ထားတဲ့ မူဝါဒတွေ မလုံလောက်တဲ့အခါ၊ အနီးအနားက အစုအဝေး အပြန်အလှန် ဆက်သွယ်မှုကိစ္စအတွက် Calico လုပ်ဆောင်ချက်တွေကို အသုံးပြုတဲ့ တကယ့်ဥပမာကို ပြောပြမယ်။ ဖောက်သည်များသည် ဝဘ်အပလီကေးရှင်းကို ဝင်ရောက်ရန် VPN ဥမင်လိုဏ်ခေါင်းကို အသုံးပြုကာ၊ ဤဝင်ရောက်ခွင့်ကို တင်းတင်းကျပ်ကျပ် ထိန်းချုပ်ထားပြီး အသုံးပြုရန် ခွင့်ပြုထားသော ဝန်ဆောင်မှုစာရင်းတစ်ခုတွင် ကန့်သတ်ထားသည်-

Kubernetes ရှိ ကွန်ရက်ချိတ်ဆက်မှုအတွက် Calico- မိတ်ဆက်ခြင်းနှင့် အတွေ့အကြုံအနည်းငယ်

ဖောက်သည်များသည် စံ UDP အပေါက် 1194 မှတစ်ဆင့် VPN သို့ ချိတ်ဆက်ပြီး၊ ချိတ်ဆက်သည့်အခါ၊ pods နှင့် ဝန်ဆောင်မှုများ၏ အစုအဖွဲ့ခွဲများသို့ လမ်းကြောင်းများ လက်ခံရယူပါ။ ပြန်လည်စတင်ခြင်းနှင့် လိပ်စာပြောင်းလဲမှုများအတွင်း ဝန်ဆောင်မှုများ မဆုံးရှုံးစေရန်အတွက် ကွန်ရက်ခွဲတစ်ခုလုံးကို တွန်းပို့ပါသည်။

ဖွဲ့စည်းမှုစနစ်ရှိ ဆိပ်ကမ်းသည် စံဖြစ်ပြီး၊ ၎င်းသည် အပလီကေးရှင်းကို ပြင်ဆင်သတ်မှတ်ခြင်းနှင့် Kubernetes အစုအဝေးသို့ လွှဲပြောင်းခြင်းလုပ်ငန်းစဉ်တွင် ကွဲလွဲချက်အချို့ကို ချမှတ်ပေးသည်။ ဥပမာအားဖြင့်၊ UDP အတွက် တူညီသော AWS LoadBalancer သည် ယမန်နှစ်အကုန်တွင် ဒေသများ၏ ကန့်သတ်စာရင်းတွင် စာသားအတိုင်းပေါ်လာပြီး NodePort သည် ၎င်း၏အစုအဝေးများအားလုံးသို့ ထပ်ဆင့်ပေးပို့ခြင်းကြောင့် အသုံးပြု၍မရသည့်အပြင် ဆာဗာအတွက် ဖြစ်ရပ်အရေအတွက်ကို တိုင်းတာရန် မဖြစ်နိုင်ပေ။ အမှားခံနိုင်ရည်ရှိခြင်း ရည်ရွယ်ချက်များ။ ထို့အပြင်၊ သင်သည် ports များ၏ပုံမှန်အကွာအဝေးကိုပြောင်းလဲရလိမ့်မည်...

ဖြစ်နိုင်ချေရှိသော ဖြေရှင်းနည်းများကို ရှာဖွေခြင်း၏ရလဒ်အနေဖြင့် အောက်ပါတို့ကို ရွေးချယ်ခဲ့ပါသည်။

  1. VPN ပါသော Pods များကို node တစ်ခုစီတွင် စီစဉ်ထားသည်။ hostNetworkဆိုလိုတာက တကယ့် IP ပါ။
  2. ဝန်ဆောင်မှုကို အပြင်မှာတင်ထားတယ်။ ClusterIP. အသေးစားကြိုတင်မှာယူမှုများဖြင့် ပြင်ပမှဝင်ရောက်နိုင်သည် (အမှန်တကယ် IP လိပ်စာတစ်ခု၏ အခြေအနေအရ ရှိနေခြင်း) ဖြင့် ဝင်ရောက်နိုင်သော ဆိပ်ကမ်းတစ်ခုအား node တွင် ရုပ်ပိုင်းဆိုင်ရာထည့်သွင်းထားသည်။
  3. pod rose ပေါ်သည့် node ကို သတ်မှတ်ခြင်းသည် ကျွန်ုပ်တို့၏ဇာတ်လမ်း၏ နယ်ပယ်ထက်ကျော်လွန်ပါသည်။ ဝန်ဆောင်မှုကို node တစ်ခုတွင် တင်းတင်းကျပ်ကျပ် ရေးနိုင်သည် သို့မဟုတ် VPN ဝန်ဆောင်မှု၏ လက်ရှိ IP လိပ်စာကို စောင့်ကြည့်ပြီး ဖောက်သည်များနှင့် မှတ်ပုံတင်ထားသော DNS မှတ်တမ်းများကို တည်းဖြတ်နိုင်သည် - စိတ်ကူးစိတ်သန်းရှိသူတိုင်း လုံလောက်သော စိတ်ကူးစိတ်သန်းရှိသူတိုင်း ဝန်ဆောင်မှုကို node တစ်ခုတွင် တင်းတင်းကျပ်ကျပ် ရေးနိုင်သည်ဟုသာ ကျွန်ုပ်ပြောပါမည်။

လမ်းကြောင်းလမ်းကြောင်း ရှုထောင့်မှနေ၍ VPN ဆာဗာမှ ထုတ်ပေးသော ၎င်း၏ IP လိပ်စာဖြင့် VPN သုံးစွဲသူကို ထူးခြားစွာ ခွဲခြားနိုင်ပါသည်။ အထက်ဖော်ပြပါ Redis တွင် ဖော်ပြထားသည့် ဤဖောက်သည်တစ်ဦး၏ ဝန်ဆောင်မှုများသို့ ဝင်ရောက်ခွင့်ကို ကန့်သတ်ခြင်း၏ မူလဥပမာတစ်ခုဖြစ်သည်။

apiVersion: crd.projectcalico.org/v1
kind: HostEndpoint
metadata:
  name: vpnclient-eth0
  labels:
    role: vpnclient
    environment: production
spec:
  interfaceName: "*"
  node: kube-02
  expectedIPs: ["172.176.176.2"]
---
apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
  name: vpn-rules
spec:
  selector: "role == 'vpnclient'"
  order: 0
  applyOnForward: true
  preDNAT: true
  ingress:
  - action: Deny
    protocol: TCP
    destination:
      ports: [6379]
  - action: Allow
    protocol: UDP
    destination:
      ports: [53, 67]

ဤတွင်၊ ဆိပ်ကမ်း 6379 သို့ချိတ်ဆက်ခြင်းကို တင်းတင်းကျပ်ကျပ်တားမြစ်ထားသော်လည်း တစ်ချိန်တည်းတွင် DNS ဝန်ဆောင်မှု၏လုပ်ဆောင်ချက်ကို ထိန်းသိမ်းထားပြီး စည်းမျဉ်းများရေးဆွဲသည့်အခါ မကြာခဏဆိုသလို ကြုံတွေ့ရသည့်လုပ်ဆောင်ချက်ကို ထိန်းသိမ်းထားသည်။ အဘယ်ကြောင့်ဆိုသော် ယခင်ဖော်ပြခဲ့သည့်အတိုင်း၊ ရွေးချယ်မှုတစ်ခု ပေါ်လာသောအခါ၊ အခြားနည်းဖြင့် မသတ်မှတ်ထားဘဲ ၎င်းတွင် ပုံသေငြင်းဆိုမှုမူဝါဒကို အသုံးပြုထားသည်။

ရလဒ်များကို

ထို့ကြောင့် Calico ၏အဆင့်မြင့် API ကိုအသုံးပြုခြင်းဖြင့်၊ သင်သည် အစုအဝေးအတွင်းနှင့်တစ်ဝိုက်ရှိ လမ်းကြောင်းလမ်းကြောင်းကို လိုက်လျောညီထွေဖြစ်အောင် ပြင်ဆင်သတ်မှတ်နိုင်ပြီး ဒိုင်းနမစ်ပုံစံပြောင်းလဲနိုင်သည်။ ယေဘူယျအားဖြင့်၊ ၎င်း၏အသုံးပြုမှုသည် အမြောက်များဖြင့် စာငှက်များကို ပစ်သတ်ခြင်းကဲ့သို့ဖြစ်နိုင်ပြီး BGP နှင့် IP-IP ဥမင်လိုဏ်ခေါင်းများပါရှိသော L3 ကွန်ရက်ကို အကောင်အထည်ဖော်ရာတွင် ရိုးရှင်းသော Kubernetes တပ်ဆင်မှုတွင် ဆိုးရွားလှသည်... သို့သော်၊ သို့မဟုတ်ပါက အဆိုပါကိရိယာသည် အလွန်အသုံးဝင်ပြီး အသုံးဝင်ပုံရသည်။ .

လုံခြုံရေးလိုအပ်ချက်များပြည့်မီရန် အစုအဝေးတစ်ခုကို သီးခြားခွဲထုတ်ခြင်းသည် အမြဲတမ်းမဖြစ်နိုင်ပေ၊ ဤနေရာတွင် Calico (သို့မဟုတ် အလားတူဖြေရှင်းချက်) ရောက်ရှိလာပါသည်။ ဤဆောင်းပါးတွင်ဖော်ပြထားသောဥပမာများကို (အသေးအဖွဲပြုပြင်မွမ်းမံမှုများနှင့်အတူ) ကို AWS ရှိကျွန်ုပ်တို့၏ clients များတပ်ဆင်မှုအများအပြားတွင်အသုံးပြုသည်။

PS

ကျွန်ုပ်တို့၏ဘလော့ဂ်တွင်လည်းဖတ်ပါ

source: www.habr.com

မှတ်ချက် Add