Calico mo te whatunga i Kubernetes: whakataki me te wheako iti

Calico mo te whatunga i Kubernetes: whakataki me te wheako iti

Ko te kaupapa o te tuhinga ko te whakamohio i te kaipanui ki nga kaupapa o te whatunga me te whakahaere i nga kaupapa here whatunga i Kubernetes, me te mono-tuatoru Calico mono e whakawhānui ana i nga kaha paerewa. I te huarahi, ka whakaatuhia te ngawari o te whirihoranga me etahi ahuatanga ma te whakamahi i nga tauira pono mai i to maatau wheako whakahaere.

He whakataki tere ki te taputapu whatunga Kubernetes

Kare e taea te whakaaro he kahui Kubernetes ki te kore he whatunga. Kua whakaputahia e matou nga rauemi mo o raatau kaupapa: "He aratohu whakaahua mo te whatunga i Kubernetes»Na«He Kupu Whakataki ki nga Kaupapahere Whatunga Kubernetes mo nga Ngaio Haumarutanga".

I roto i te horopaki o tenei tuhinga, he mea nui kia mohio ko K8s ake te kawenga mo te hononga whatunga i waenga i nga ipu me nga pona: mo tenei, CNI monomai (Atanga Whatunga Ipu). Ētahi atu e pā ana ki tenei ariā tatou i korero ano ratou ki ahau.

Hei tauira, ko te nuinga o enei monomai Tuhinga — ka whakarato i te hononga whatunga katoa i waenga i nga kohinga kapoi katoa ma te hiki i nga piriti ki ia pona, ka tautapa he kupenga-roto ki a ia. Heoi, ko te whakaurunga oti me te kore ture kaore e whai hua i nga wa katoa. Ki te whakarato i etahi momo wehewehe iti i roto i te tautau, he mea tika ki te wawao i te whirihoranga o te papaahi. I roto i te keehi whanui, ka tukuna ki raro i te mana whakahaere o te CNI ano, na reira ka taea te whakamaoritanga o nga wawaotanga tuatoru-tuatoru i roto i nga iptables ka pohehe, ka warewarehia ranei.

A "i waho o te pouaka" mo te whakarite i te whakahaere kaupapa here whatunga i roto i te roopu Kubernetes ka whakaratohia WhatungaPolicy API. Ko tenei rauemi, ka tohatohahia ki runga i nga mokowāingoa kua tohua, kei roto pea nga ture hei wehe i te urunga mai i tetahi tono ki tetahi atu. Ka taea hoki e koe te whirihora i te urunga i waenga i nga putunga motuhake, nga taiao (mokowā ingoa), poraka ranei o nga wahitau 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

Ehara tenei i te tauira o mua tuhinga whaimana kia kotahi, mo nga wa katoa ka pehia te hiahia ki te mohio ki te arorau o te mahi kaupapa here whatunga. Engari, ka ngana tonu tatou ki te mohio ki nga maapono taketake me nga tikanga o te tukatuka i nga rerenga waka ma te whakamahi i nga kaupapa here whatunga...

E tika ana kia 2 nga momo waka: te uru ki roto i te poka (Ingress) me te puta atu (Egress).

Calico mo te whatunga i Kubernetes: whakataki me te wheako iti

Inaa, kua wehea nga mahi torangapu ki enei waahanga e rua i runga i te ahunga o te neke.

Ko te huanga e hiahiatia ana ko te kaiwhiriwhiri; te tangata e pa ana te ture. Ka taea e tenei he peera (he roopu roopu ranei) he taiao ranei (arā, he mokowā ingoa). He taipitopito nui: me whai tapanga nga momo mea e rua (tapanga i roto i nga kupu Kubernetes) - koinei nga mahi a nga kaitōrangapū.

I tua atu i te maha o nga kaiwhiriwhiri kua whakakotahihia e etahi momo tapanga, ka taea te tuhi i nga ture penei "Tukua/whakakahoretia nga mea katoa/katoa" i roto i nga rereke rereke. Mo tenei kaupapa, ka whakamahia nga hanganga o te ahua:

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

— i roto i tenei tauira, ka aukatihia nga poti katoa o te taiao mai i nga waka taumai. Ko te whanonga rereke ka taea ma te hanga e whai ake nei:

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

Waihoki mo te puta atu:

  podSelector: {}
  policyTypes:
  - Egress

- ki te whakaweto. Anei nga mea hei whakauru:

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

Ka hoki mai ano ki te kowhiringa o te mono CNI mo te tautau, he mea tika kia mahara tera e kore e tautoko nga mono whatunga katoa i te NetworkPolicy. Hei tauira, ko te Flannel kua whakahuatia ake nei kaore e mohio ki te whirihora i nga kaupapa here whatunga, e he korero tika i roto i te whare pupuri mana. Ka whakahuahia ano he momo rereke ki reira - he kaupapa Open Source Calico, e tino whakawhānui ana i te huinga paerewa o nga API Kubernetes mo nga kaupapa here whatunga.

Calico mo te whatunga i Kubernetes: whakataki me te wheako iti

Te mohio ki a Calico: te ariā

Ka taea te whakamahi i te mono Calico ki te whakauru ki te Flannel (kaupapa kaupapa Canal) motuhake ranei, e hipoki ana i nga hononga whatunga me nga mana whakahaere waatea.

He aha nga waahi ka taea e te whakamahi i te otinga "pouaka" K8 me te huinga API mai i Calico e whakarato ana?

Anei nga mea kua whakauruhia ki roto NetworkPolicy:

  • he iti noa nga kaitōrangapū e te taiao;
  • ka whakamahia nga kaupapa here ki nga peera kua tohua ki nga tapanga;
  • Ka taea te whakamahi i nga ture ki nga pene, ki nga taiao, ki nga kupenga-roto ranei;
  • Ka taea e nga ture te whakauru i nga kawa, ingoa, tohu tohu tohu ranei.

Anei me pehea e whakawhānuihia ai e Calico enei mahi:

  • Ka taea te whakamahi kaupapa here ki tetahi mea: te putea, te ipu, te miihini mariko, te atanga ranei;
  • Ka taea e nga ture te whakauru i tetahi mahi motuhake (te aukati, te whakaaetanga, te takiuru);
  • ko te whainga, te puna ranei o nga ture ka taea te tauranga, te whānuitanga o nga tauranga, nga kawa, nga huanga HTTP, ICMP ranei, IP, kupenga-roto ranei (whakatupuranga tua-4, 6th ranei), ahakoa he kaiwhiriwhiri (nga pokapu, ope, taiao);
  • I tua atu, ka taea e koe te whakahaere i te haere o nga waka ma te whakamahi i nga tautuhinga DNAT me nga kaupapa here tuku waka.

Ko te mahi tuatahi i runga i te GitHub i roto i te whare putunga Calico i hoki mai ki te marama o Hurae 2016, a, kotahi tau i muri mai ka whai mana te kaupapa ki te whakarite hononga whatunga Kubernetes - ka kitea tenei, hei tauira, na nga hua rangahau, i whakahaeretia e The New Stack:

Calico mo te whatunga i Kubernetes: whakataki me te wheako iti

He maha nga otinga whakahaere nui me nga K8, penei i Amazon EKS, Azure AKS, Google GKE a ka timata etahi atu ki te taunaki kia whakamahia.

Mo te mahi, he pai nga mea katoa i konei. I te whakamatautau i a raatau hua, i whakaatuhia e te roopu whanaketanga Calico nga mahi arorangi, neke atu i te 50000 nga ipu i runga i te 500 nga pona tinana me te reiti hanga 20 ipu ia hekona. Karekau he raruraru i kitea mo te whakatauine. Ko nga hua pera i panuitia i te panuitanga o te putanga tuatahi. Ko nga rangahau motuhake e aro ana ki te whakaurunga me te kohi rauemi ka whakau i te pai o te mahi a Calico ki ta Flannel. Hei tauira:

Calico mo te whatunga i Kubernetes: whakataki me te wheako iti

Kei te tino tere te whakawhanaketanga o te kaupapa, e tautoko ana i nga mahi i roto i nga otinga rongonui e whakahaerehia ana nga K8s, OpenShift, OpenStack, ka taea te whakamahi i te Calico i te wa e whakamahi ana i te roopu. kopa, he tohutoro mo te hanganga o nga whatunga Ratonga Mesh (he tauira tenei whakamahia i te taha o Istio).

Parakatihi me Calico

I roto i te take whanui mo te whakamahi vanilla Kubernetes, ko te whakauru i te CNI ka heke iho ki te whakamahi i te konae calico.yaml, tangohia mai i te paetukutuku mana, ma te whakamahi kubectl apply -f.

Hei tikanga, ko te putanga o naianei o te mono he hototahi ki nga putanga 2-3 hou o Kubernetes: ko te mahi i roto i nga putanga tawhito kaore i te whakamatauhia, kaore hoki e whakamanahia. E ai ki nga kaihanga, ka rere a Calico i runga i nga kakano Linux i runga ake i te 3.10 e whakahaere ana i te CentOS 7, Ubuntu 16, Debian 8 ranei, i runga ake o nga iptables, IPVS ranei.

Te wehewehe i roto i te taiao

Mo te maaramatanga whanui, me titiro ki tetahi keehi ngawari kia mohio ai he pehea te rereke o nga kaupapa here whatunga i roto i te tohu Calico mai i nga paerewa me pehea te huarahi ki te hanga ture e ngawari ai te panui me te ngawari o te whirihoranga:

Calico mo te whatunga i Kubernetes: whakataki me te wheako iti

E 2 nga tono tukutuku kua tukuna ki roto i te roopu: i Node.js me PHP, ko tetahi e whakamahi ana i a Redis. Hei aukati i te uru ki Redis mai i te PHP, i te wa e mau tonu ana te hononga ki a Node.js, whakamahia noa te kaupapa here e whai ake nei:

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

Ko te mea nui i whakaaetia e matou nga waka taumai ki te tauranga Redis mai i Node.js. A ka tino marama kaore ratou i aukati i tetahi atu mea. Ka puta mai a NetworkPolicy, ka timata nga kaiwhiriwhiri katoa e whakahuahia ana i roto, ki te wehe ke, ki te kore e tohua. Heoi, karekau nga ture wehe e pa ana ki etahi atu mea kaore i kapi i te kaiwhiriwhiri.

Ka whakamahia e te tauira apiVersion Ka puta a Kubernetes i te pouaka, engari kaore he mea hei aukati i a koe ki te whakamahi he rauemi o taua ingoa mai i te tuku Calico. Ko te wetereo kei reira he taipitopito ake, no reira me tuhi ano koe i te ture mo te keehi o runga ake nei ki te ahua e whai ake nei:

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

Ko nga hangahanga kua whakahuahia ake nei mo te whakaae, te whakakore ranei i nga waka katoa ma te NetworkPolicy API auau kei roto nga hanga me nga reu he uaua ki te mohio me te maumahara. I roto i te take o Calico, ki te huri i te arorau o te ture papaahi ki te ritenga atu, huri noa action: Allow i runga i action: Deny.

Wehenga ma te taiao

Inaianei whakaarohia he ahuatanga ka hangaia e tetahi tono nga inenga pakihi mo te kohi i Prometheus me etahi atu tātaritanga ma te whakamahi i te Grafana. He raraunga tairongo pea kei roto i te tukunga ake, ka kitea ano e te marea ma te taunoa. Me huna e tatou enei raraunga mai i nga karu karu:

Calico mo te whatunga i Kubernetes: whakataki me te wheako iti

Ko te Prometheus, hei tikanga, ka tuuhia ki tetahi waahi ratonga motuhake - hei tauira ka waiho hei ingoa mokowhiti penei:

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

mara metadata.labels karekau he aitua tenei. Ka rite ki te korero i runga ake nei, namespaceSelector (me te podSelector) e mahi ana me nga tapanga. No reira, kia taea ai te tango i nga inenga mai i nga putunga katoa i runga i tetahi tauranga motuhake, me taapiri e koe etahi momo tapanga (me tango mai ranei i nga mea o mua), katahi ka tono whirihoranga penei:

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

A, ki te whakamahi koe i nga kaupapa here Calico, ka penei te wetereo:

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

I te nuinga o te waa, ma te taapiri i enei momo kaupapa here mo nga hiahia motuhake, ka taea e koe te whakamarumaru ki te pokanoa kino, pokanoa ranei i roto i te whakahaeretanga o nga tono i roto i te roopu.

Ko te mahi pai rawa atu, e ai ki nga kaihanga o Calico, ko te "Poraka nga mea katoa me te whakatuwhera i nga mea e hiahia ana koe", kua tuhia ki roto. tuhinga whaimana (ko etahi e whai ana i te huarahi rite - ina koa, i roto i tuhinga kua whakahuatia).

Te whakamahi i etahi atu mea Calico

Maku e whakamahara ki a koe na roto i te huinga roa o nga API Calico ka taea e koe te whakarite i te waatea o nga pona, kaua e whakawhäitihia ki nga pene. I roto i te tauira e whai ake nei te whakamahi GlobalNetworkPolicy kua katia te kaha ki te tuku i nga tono ICMP i roto i te tautau (hei tauira, nga pings mai i te poti ki tetahi pona, i waenga i nga poti, mai i tetahi pona ki tetahi poti IP):

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

I roto i te keehi o runga ake nei, ka taea tonu e nga pokapu tautau te "toro atu" ki a raatau ano ma te ICMP. A ka whakatauhia tenei take ma te huarahi GlobalNetworkPolicy, hoatu ki tetahi hinonga 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"]

Ko te keehi VPN

Hei whakamutunga, ka hoatu e ahau he tauira tino pono mo te whakamahi i nga mahi a Calico mo te keehi o te taunekeneke tata-tata, i te mea kaore e ranea te huinga paerewa o nga kaupapa here. Hei uru atu ki te tono tukutuku, ka whakamahi nga kiritaki i te ara VPN, a ka tino whakahaeretia tenei urunga, ka whakawhäitihia ki te rarangi o nga ratonga e whakaaetia ana kia whakamahia:

Calico mo te whatunga i Kubernetes: whakataki me te wheako iti

Ka hono atu nga kaihoko ki te VPN ma te tauranga UDP paerewa 1194, a, ina hono ana, ka whiwhi huarahi ki nga kupenga-roto kapoi o nga poti me nga ratonga. Ka panaia nga kupengaroto katoa kia kore ai e ngaro nga ratonga i te wa o te whakaara ano me te whakatika i nga huringa.

Ko te tauranga i roto i te whirihoranga he paerewa, e kii ana i etahi ahuatanga mo te whirihora i te tono me te whakawhiti ki te roopu Kubernetes. Hei tauira, i roto i te AWS LoadBalancer mo te UDP i puta mooni i te mutunga o tera tau i roto i te raarangi iti o nga rohe, a kaore e taea te whakamahi a NodePort na tona tuku whakamua i runga i nga kohinga kohinga katoa a kaore e taea te tauine i te maha o nga tuunga tuunga mo nga kaupapa whakararu i te he. Hei taapiri, me whakarereke e koe te awhe taunoa o nga tauranga...

Na te rapu i nga otinga ka taea, ko enei e whai ake nei i kowhiria:

  1. Ko nga Pods me te VPN kua whakaritea mo ia node ki roto hostNetwork, ara, ki te IP tūturu.
  2. Ka tukuna te ratonga ki waho ClusterIP. Kua whakauruhia he tauranga ki runga i te node, ka uru mai i waho me nga rahui iti (te waahi o te waahi IP tuuturu).
  3. Ko te whakatau i te node kei runga te poroporo i tua atu i te whanuitanga o to maatau korero. Ka kii noa ahau ka taea e koe te "whao" i te ratonga ki te node, ki te tuhi ranei i tetahi ratonga sidecar iti ka aro turuki i te wahitau IP o naianei o te ratonga VPN me te whakatika i nga rekoata DNS kua rehitatia me nga kaihoko - ko wai e nui ana te whakaaro.

Mai i te tirohanga ararere, ka taea e taatau te tautuhi i tetahi kaihoko VPN ma tana wahitau IP i tukuna e te tūmau VPN. Kei raro nei he tauira tuatahi mo te aukati i te uru o te kiritaki ki nga ratonga, e whakaatuhia ana i runga i te Redis kua whakahuahia ake nei:

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]

I konei, ko te hono ki te tauranga 6379 ka tino aukatihia, engari i te wa ano ka tiakina te mahi o te ratonga DNS, he maha nga wa e raru ana te mahi i te wa e whakatakoto ana i nga ture. Na te mea, pera i te korero i mua ake nei, ka puta mai he kaiwhiriwhiri, ka tukuna te kaupapa here whakahē taunoa ki a ia mena kaore i tohua.

Ngā putanga

No reira, ma te whakamahi i te API matatau a Calico, ka taea e koe te whirihora ngawari me te huri i te ararere ki roto, huri noa i te tautau. I te nuinga o te waa, ko te ahua o tana whakamahinga he rite ki te pupuhi pihoihoi me te pu, me te whakatinana i te whatunga L3 me nga kohanga BGP me te IP-IP he ahua kino i roto i te whakaurunga Kubernetes ngawari ki runga i te whatunga papatahi... Heoi, ki te kore te ahua o te taputapu he tino pai me te whai hua. .

Ko te wehe i te kahui ki te whakatutuki i nga whakaritenga haumarutanga kaore pea e taea i nga wa katoa, a koinei te waahi ka tae mai a Calico (he otinga rite ranei) ki te whakaora. Ko nga tauira i hoatu i roto i tenei tuhinga (me nga whakarereke iti) ka whakamahia i roto i nga whakaurunga maha o o taatau kiritaki i AWS.

PS

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero