Calico mo networking i Kubernetes: folasaga ma sina poto masani

Calico mo networking i Kubernetes: folasaga ma sina poto masani

O le faʻamoemoe o le tusiga o le faʻalauiloaina lea o le tagata faitau i faʻavae o fesoʻotaʻiga ma le puleaina o faiga faʻavae fesoʻotaʻiga i Kubernetes, faʻapea foʻi ma le vaega lona tolu o le Calico plugin lea e faʻalauteleina ai gafatia masani. I luga o le ala, o le faigofie o le faʻatulagaina ma nisi o foliga o le a faʻaalia i le faʻaaogaina o faʻataʻitaʻiga moni mai le matou faʻaogaina.

O se fa'amatalaga vave ile meafaigaluega feso'otaiga a Kubernetes

E le mafai ona mafaufauina se kulupu Kubernetes e aunoa ma se feso'otaiga. Ua uma ona matou lolomiina mea e uiga ia latou faavae: "O se faʻataʻitaʻiga faʻataʻitaʻiga i fesoʻotaʻiga i Kubernetes"Ma"Ose Folasaga ile Kubernetes Network Policies for Security Professionals".

I le anotusi o lenei tusiga, e taua le maitauina o K8s lava ia e le nafa ma fesoʻotaʻiga fesoʻotaʻiga i le va o pusa ma nodes: mo lenei, eseese. CNI plugins (Container Networking Interface). E sili atu e uiga i lenei manatu tatou sa latou fai mai foi ia te au.

Mo se faʻataʻitaʻiga, o le sili ona taatele o nei plugins o Fululanu - e maua ai le feso'ota'iga atoa i le va o node fuifui uma e ala i le si'iina o alalaupapa i node ta'itasi, ma tu'uina atu i ai se subnet. Ae ui i lea, o le faʻaogaina atoatoa ma le le faʻatulafonoina e le o taimi uma e aoga. Ina ia tuʻuina atu se ituaiga o tuʻueseese laʻititi i totonu o le fuifui, e tatau ona faʻalavelave i le faʻatulagaina o le firewall. I le tulaga lautele, o loʻo tuʻuina i lalo o le pule a le CNI lava e tasi, o le mafuaʻaga lea e mafai ai ona faʻauiga sese pe le amanaʻiaina soʻo se isi vaega lona tolu i iptables.

Ma "mai le pusa" mo le faʻatulagaina o le pulega o faiga faʻavae fesoʻotaʻiga i totonu o le Kubernetes cluster ua saunia NetworkPolicy API. O lenei punaoa, tufatufaina i luga o igoa avanoa, e mafai ona i ai tulafono e vaʻaia ai avanoa mai le tasi talosaga i le isi. E fa'atagaina ai fo'i oe e fa'atulaga le avanoa i le va o pods fa'apitoa, si'osi'omaga (igoa igoa) po'o poloka o tuatusi 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

E le o le fa'ata'ita'iga sili ona fa'amuamua lea o pepa aloaia atonu e tasi ma mo taimi uma e faʻavaivaia ai le manaʻo e malamalama i le faʻaogaina o faiga faʻavae fesoʻotaʻiga. Ae ui i lea, o le a matou taumafai pea e malamalama i mataupu faavae ma metotia o le faʻaogaina o feoaiga o feoaiga e faʻaaoga ai faiga faʻavae fesoʻotaʻiga...

E fetaui lelei e 2 ituaiga o feoaiga: ulufale i le pod (Ingress) ma alu ese mai ai (Egress).

Calico mo networking i Kubernetes: folasaga ma sina poto masani

O le mea moni, o faiga faʻapolokiki ua vaevaeina i nei vaega e 2 e faʻavae i luga o le itu o le gaioiga.

O le isi uiga mana'omia o se tagata filifilia; le tagata e faatatau i ai le tulafono. E mafai ona avea lenei mea o se pod (po'o se vaega o pods) po'o se si'osi'omaga (e pei o se igoa avanoa). O se fa'amatalaga taua: o ituaiga uma e lua o nei mea faitino e tatau ona iai se fa'ailoga (pepa i upu Kubernetes) - o mea ia e galulue ai le au faipule.

I le faaopoopo atu i se numera faatapulaa o tagata filifilia e tuufaatasia e se ituaiga o igoa, e mafai ona tusia tulafono e pei o le "Faataga / teena mea uma / tagata uma" i fesuiaiga eseese. Mo lenei faʻamoemoe, faʻaogaina o le fomu:

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

- i lenei faʻataʻitaʻiga, o pusa uma o loʻo i totonu o le siʻosiʻomaga ua poloka mai fefaʻatauaiga o loʻo sau. O le amio faafeagai e mafai ona ausia i le fausaga nei:

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

E faapena foi mo le alu i fafo:

  podSelector: {}
  policyTypes:
  - Egress

- ia tape. Ma o mea nei e aofia ai:

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

Toe foʻi i le filifiliga o se CNI plugin mo se fuifui, e taua le matauina e le'o fa'apipi'i feso'ota'iga uma e lagolagoina NetworkPolicy. Mo se faʻataʻitaʻiga, o le Flannel ua uma ona taʻua e le iloa pe faʻafefea ona faʻatulagaina faiga faʻavae fesoʻotaʻiga, lea e fai sa'o mai i le faleteuoloa aloaia. O loʻo taʻua foʻi se isi mea iina - o se poloketi Open Source calico, lea e matua faʻalauteleina ai le seti masani o Kubernetes API i tulaga o faiga faʻavae fesoʻotaʻiga.

Calico mo networking i Kubernetes: folasaga ma sina poto masani

O le iloaina o Calico: aʻoaʻoga

O le Calico plugin e mafai ona faʻaogaina i le tuʻufaʻatasia ma Flannel (subproject alāvai) pe tuto'atasi, e aofia uma ai feso'ota'iga feso'ota'iga ma agava'a fa'atonutonu avanoa.

O a avanoa e faʻaogaina ai le K8s "boxed" solution ma le API seti mai Calico e maua?

Ole mea lea ua fausia ile NetworkPolicy:

  • o faipule e faatapulaaina e le siosiomaga;
  • o faiga fa'avae e fa'aoga i pods ua fa'ailogaina;
  • e mafai ona fa'aoga tulafono i pods, siosiomaga po'o subnets;
  • O tulafono e mafai ona aofia ai fa'amaumauga, igoa po'o fa'ailoga fa'ailoga uafu.

O le auala lenei e faʻalauteleina ai e Calico nei galuega:

  • e mafai ona faʻaoga faiga faʻavae i soʻo se mea: pod, pusa, masini masini poʻo le atinaʻe;
  • tulafono e mafai ona aofia ai se gaioiga faʻapitoa (faʻasaina, faʻatagaga, logging);
  • o le sini poʻo le faʻapogai o tulafono e mafai ona avea ma taulaga, se tele o ports, protocols, HTTP poʻo ICMP uiga, IP poʻo subnet (4th poʻo 6th tupulaga), soʻo se tagata filifilia (nodes, hosts, environments);
  • E le gata i lea, e mafai ona e fa'atonutonuina le felauaiga o fefa'ataua'iga e fa'aoga ai le DNAT ma faiga fa'avae mo felauaiga.

O le mea muamua na faia i GitHub i le Calico repository aso i tua ia Iulai 2016, ma i le tausaga mulimuli ane na avea ai le poloketi ma se tulaga taʻutaʻua i le faʻatulagaina o fesoʻotaʻiga fesoʻotaʻiga Kubernetes - o loʻo faʻamaonia, mo se faʻataʻitaʻiga, e ala i suʻesuʻega, taitaia e le New Stack:

Calico mo networking i Kubernetes: folasaga ma sina poto masani

Le tele o fofo fa'afoe tetele ma K8s, pei ole Amazon EKS, Azure AKS, Google GKE ma ua amata ona fautuaina e isi mo le faaaogaina.

Ae mo le faʻatinoga, e lelei mea uma iinei. I le su'eina o a latou oloa, na fa'aalia ai e le vaega o le atina'e o le Calico le fa'atinoga o le vateatea, fa'atautaia le silia ma le 50000 koneteina i luga o le 500 fa'aletino fa'atasi ma le fua fa'atatau o le 20 koneteina i le sekone. E leai ni fa'afitauli na fa'ailoa ile fa'afuaina. O i'uga faapena na fofogaina ua uma i le faʻaaliga o le lomiga muamua. O su'esu'ega tuto'atasi o lo'o taula'i i le fa'aaogāina ma le fa'aaogāina o puna'oa ua fa'amaonia ai fo'i le fa'atinoga a Calico e toeitiiti lava lelei ma Flannel's. Mo se faʻataʻitaʻiga:

Calico mo networking i Kubernetes: folasaga ma sina poto masani

O loʻo faʻatupulaia vave le poloketi, e lagolagoina le galuega i fofo lauiloa e pulea K8s, OpenShift, OpenStack, e mafai ona faʻaaoga Calico pe a faʻapipiʻi se fuifui faʻaaoga kops, o loʻo i ai faʻamatalaga i le fausiaina o fesoʻotaʻiga Mesh Mesh (o se faataitaiga lenei fa'aoga fa'atasi ma Istio).

Faataitai ma Calico

I le tulaga lautele o le faʻaaogaina o vanilla Kubernetes, faʻapipiʻi CNI e sau i lalo i le faʻaaogaina o le faila calico.yaml, sii mai le upegatafa'ilagi aloaia, e ala i le faʻaaogaina kubectl apply -f.

I le avea ai o se tulafono, o le lomiga o loʻo i ai nei o le plugin e fetaui ma le 2-3 lomiga fou o Kubernetes: faʻaogaina i lomiga tuai e le faʻataʻitaʻiina ma e le faʻamaonia. E tusa ai ma le au atinaʻe, o Calico o loʻo tamoe i luga o Linux kernels i luga aʻe o le 3.10 faʻatautaia CentOS 7, Ubuntu 16 poʻo Debian 8, i luga o iptables poʻo IPVS.

Faaesea i totonu o le siosiomaga

Mo se malamalamaaga lautele, seʻi o tatou vaʻavaʻai i se mataupu faigofie e malamalama ai pe faʻapefea ona ese faiga faʻavae fesoʻotaʻiga i le Calico notation mai tulaga masani ma pe faʻafefea ona faʻafaigofie e le faiga o tulafono a latou faitau ma fetuunaiga fetuutuunai:

Calico mo networking i Kubernetes: folasaga ma sina poto masani

E 2 'upega tafaʻilagi faʻapipiʻiina i totonu o le fuifui: i Node.js ma PHP, o se tasi o loʻo faʻaaogaina Redis. Ina ia poloka le avanoa i Redis mai PHP, aʻo tumau le fesoʻotaʻiga ma Node.js, naʻo le faʻaogaina o le faiga faʻavae:

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

O le mea moni na matou faʻatagaina le ulufale mai i le taulaga Redis mai Node.js. Ma e manino lava latou te leʻi faʻasaina se isi mea. O le taimi lava e aliali mai ai NetworkPolicy, o tagata filifilia uma o loʻo taʻua i totonu e amata ona vavae ese, seʻi vagana ua faʻamaonia. Ae ui i lea, o tulafono faʻaesea e le faʻaogaina i isi mea e le o ufiufi e le tagata filifilia.

E faʻaaogaina e le faʻataʻitaʻiga apiVersion Kubernetes mai le pusa, ae leai se mea e taofia oe mai le faʻaaogaina punaoa o le igoa tutusa mai le Calico delivery. O le syntax o loʻo i ai e sili atu faʻamatalaga, o lea e te manaʻomia ai le toe tusia o le tulafono mo le mataupu o loʻo i luga i le pepa 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

O faufale o loʻo taʻua i luga mo le faʻatagaina poʻo le teenaina o fefaʻatauaiga uma e ala i le NetworkPolicy API masani o loʻo i ai faʻamaufaʻailoga ma puipui e faigata ona malamalama ma manatua. I le tulaga o Calico, ia suia le manatu o se tulafono afi i le faafeagai, na o le suia action: Allow i action: Deny.

Tu'uesea e le si'osi'omaga

Va'ai nei i se tulaga o lo'o fa'atupuina ai e se talosaga ni fua fa'atau pisinisi mo le aoina i le Prometheus ma fa'amatalaga atili e fa'aaoga ai le Grafana. O le la'u i luga e ono iai ni fa'amatalaga ma'ale'ale, lea e toe va'aia fa'alaua'itele ona o le fa'aletonu. Sei o tatou nanaina nei faʻamatalaga mai le prying eyes:

Calico mo networking i Kubernetes: folasaga ma sina poto masani

Prometheus, e pei o se tulafono, o loʻo tuʻuina i totonu o se siʻosiʻomaga eseese auaunaga - i le faʻataʻitaʻiga o le a avea ma igoa avanoa e pei o lenei:

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

laufanua metadata.labels na foliga mai e le o se faalavelave. E pei ona taʻua i luga, namespaceSelector (faa;pei foi ona podSelector) fa'agaoioi ma fa'ailoga. O le mea lea, ina ia fa'ataga fua fa'atatau e ave'ese mai pods uma i luga o se taulaga fa'apitoa, e tatau ona e fa'aopoopoina se ituaiga fa'ailoga (pe ave mai mea o lo'o iai), ona fa'aoga lea o se fa'atulagaga e pei o:

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

Ma afai e te faʻaogaina faiga faʻavae Calico, o le syntax o le a pei o lenei:

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 se tulaga lautele, e ala i le faʻaopoopoina o nei ituaiga o faiga faʻavae mo manaʻoga faʻapitoa, e mafai ona e puipuia mai le faʻalavelave faʻafuaseʻi poʻo le faʻalavelave faʻafuaseʻi i le faʻaogaina o talosaga i le fuifui.

O le faiga sili ona lelei, e tusa ai ma le na faia o Calico, o le "Poka mea uma ma tatala manino mea e te manaʻomia", faʻamaumauga i totonu. pepa aloaia (o isi e mulimuli i se auala tutusa - aemaise lava, i ua uma ona ta'ua tala).

Fa'aaogā Mea Fa'aopoopo Calico

Sei ou faamanatu atu ia te oe e ala i le seti lautele o Calico API e mafai ona e faatonutonuina le maua o nodes, ae le gata i pods. I le faʻataʻitaʻiga o loʻo mulimuli mai faʻaaogaina GlobalNetworkPolicy ua tapunia le mafai ona pasi talosaga ICMP i le fuifui (mo se faʻataʻitaʻiga, pings mai se pod i se node, va o pods, poʻo mai se node i se IP pod):

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 le tulaga o loʻo taʻua i luga, e mafai lava ona "aapa atu" le tasi i le isi e ala i le ICMP. Ma o lenei mataupu e foia i auala GlobalNetworkPolicy, fa'aoga i se fa'alapotopotoga 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"]

O le VPN Case

Mulimuli ane, o le a ou tuʻuina atu se faʻataʻitaʻiga moni o le faʻaaogaina o galuega a Calico mo le tulaga o fesoʻotaʻiga vavalalata, pe a le lava se seti masani o faiga faʻavae. Ina ia maua le talosaga i luga o le upega tafaʻilagi, e faʻaogaina e tagata faʻatau se alalaupapa VPN, ma o lenei avanoa e pulea lelei ma faʻatapulaʻa i se lisi patino o auaunaga e faʻatagaina mo le faʻaaogaina:

Calico mo networking i Kubernetes: folasaga ma sina poto masani

E fa'afeso'ota'i tagata fa'atau i le VPN e ala i le UDP port 1194 ma, pe a fa'afeso'ota'i, maua auala i le vaega pito i lalo o pusa ma auaunaga. O subnets uma e tuleia ina ia aua nei ma'imau auaunaga a'o toe amata ma suiga o tuatusi.

O le taulaga i le faʻatulagaina o se tulaga masani, lea e tuʻuina atu ai ni nuances i luga o le faagasologa o le faʻatulagaina o le talosaga ma tuʻuina atu i le Kubernetes cluster. Mo se faʻataʻitaʻiga, i le AWS LoadBalancer mo UDP na faʻaalia moni lava i le faaiuga o le tausaga talu ai i se lisi faʻatapulaʻaina o itulagi, ma e le mafai ona faʻaaogaina NodePort ona o lona tuʻuina atu i luga o nodes fuifui uma ma e le mafai ona fuaina le numera o faʻataʻitaʻiga mo server. faamoemoega faapalepale sese. E le gata i lea, e tatau ona e suia le tulaga faaletonu o ports...

O se taunuuga o le suʻesuʻeina e ala i fofo talafeagai, o mea nei na filifilia:

  1. Pods ma VPN ua fa'atulagaina i le node i totonu hostNetwork, o lona uiga, i le IP moni.
  2. O le auaunaga e lafoina i fafo e ala i ClusterIP. O se uafu ua faʻapipiʻiina faaletino i luga o le node, lea e mafai ona maua mai fafo ma ni faʻaagaga laiti (tulaga o se tuatusi IP moni).
  3. Fuafuaina o le node o loʻo i ai le rose rose e sili atu i le lautele o la tatou tala. O le a na ona ou fai atu e mafai ona e "fao" le tautua i se node pe tusi se laʻititi laʻititi auaunaga o le a mataʻituina le tuatusi IP o loʻo i ai nei o le VPN auaunaga ma faʻasaʻo faamaumauga DNS ua resitalaina ma tagata faʻatau - poʻo ai lava e lava mafaufauga.

Mai se va'aiga auala, e mafai ona tatou iloa tulaga ese se tagata VPN e ala i lona tuatusi IP na tuʻuina atu e le VPN server. Lalo o se faʻataʻitaʻiga muamua o le faʻatapulaʻaina o sea tagata o tausia le avanoa i auaunaga, o loʻo faʻaalia i luga o le Redis ua taʻua i luga:

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]

O iinei, o le faʻafesoʻotaʻi i le taulaga 6379 e matua faʻasaina, ae i le taimi lava e tasi o loʻo faʻasaoina le faʻaogaina o le DNS, o le gaioiga e masani ona afaina pe a tusia tulafono. Aua, e pei ona taʻua muamua, pe a faʻaalia se tagata filifilia, o le faʻaaogaina o le faʻatagaina o faiga faʻavae e faʻaaogaina sei vagana ua faʻamaonia.

O taunuʻuga

O le mea lea, i le fa'aaogaina o le API maualuga a Calico, e mafai ona e fetu'una'i fetuutuuna'i ma suiga malosi le ta'avale i totonu ma fa'ata'amilo i le fuifui. I se tulaga lautele, o lona faʻaogaina e mafai ona pei o le fanaina o manu iti ma se fana, ma o le faʻaaogaina o se fesoʻotaʻiga L3 ma BGP ma IP-IP tunnels e foliga mataʻutia i se faʻapipiʻi faigofie Kubernetes i luga o se fesoʻotaʻiga mafolafola... Ae peitaʻi, a leai o le meafaigaluega e foliga mai e aoga ma aoga. .

O le fa'amavaeina o se fuifui e fa'amalieina mana'oga saogalemu atonu e le mafai i taimi uma, ma o le mea lea e sau ai Calico (po'o se tali tutusa) e laveai. O faʻataʻitaʻiga o loʻo tuʻuina atu i lenei tusiga (faʻatasi ai ma suiga laiti) o loʻo faʻaaogaina i le tele o faʻapipiʻi a matou tagata faʻatau i le AWS.

SALA

Faitau foi i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga