Metallb layer2 módban:

Written in

by

Van egy metallb load balancerünk, ami figyel a 192.168.1.220-on , és a forgalmat az egyik figyelő ingress kontrollerhez továbbítja. De melyikhez ?

Emlékeztetőnek a load balancer tekepítésekor lefuttatott yaml, a cluster a 192.168.1.220 ip cimet kapta külső ip címnek:

apiVersion: v1
kind: Service
metadata:
  name: ingress
  namespace: ingress
spec:
  selector:
    name: nginx-ingress-microk8s
  type: LoadBalancer
  loadBalancerIP: 192.168.1.220
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
    - name: https
      protocol: TCP
      port: 443
      targetPort: 443
NAMESPACE        NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE    SELECTOR
default          service/kubernetes        ClusterIP      10.152.183.1     <none>          443/TCP                      5d8h   <none>
kube-system      service/kube-dns          ClusterIP      10.152.183.10    <none>          53/UDP,53/TCP,9153/TCP       5d5h   k8s-app=kube-dns
metallb-system   service/webhook-service   ClusterIP      10.152.183.46    <none>          443/TCP                      5d5h   component=controller
default          service/service1          ClusterIP      10.152.183.38    <none>          80/TCP                       5d5h   app=service1
default          service/service2          ClusterIP      10.152.183.89    <none>          80/TCP                       5d5h   app=service2
default          service/service3          ClusterIP      10.152.183.23    <none>          80/TCP                       5d5h   app=service3
ingress          service/ingress           LoadBalancer   10.152.183.152   192.168.1.220   80:32292/TCP,443:31537/TCP   5d5h   name=nginx-ingress-microk8s

A pfsense ARP táblája:

A 192.168.1.220-as ip (a load balancer “lebegő ip-je, ezt mutatjuk a külvilágnak, ez a metallb ip-pooljának első ip-je) és a 192.198.1.202-es ip (ez az as202-es node ip-je) mac addresse ugyanaz. A metallb a forgalmat az as202-es node-nak küldi, a két ip címnek ugyanaz a mac address címe:

Ha kikapcsoljuk as as202-es node-ot, az ARP tábla igy változik:

A metallb észlelte, hogy az as202 leállt és a forgalmat az as203 as node-ra küldi.  Valódi “nyilvános útválasztási HA”-val rendelkezünk. Ha egy csomópont leáll, a MetalLB-nek egyszerűen át kell adnia a lebegő IP-címet egy másik csomópontnak.
A hálózat szemszögéből tehát úgy tűnik, hogy a gépnek több IP-címe van hozzárendelve a hálózati interfészhez.
A MetalLB válaszol ARP IPv4 vonatkozó kérésekre illetve az  NDP IPv6 kérésekre. A layer2. mód legnagyobb előnye , hogy univerzális: bármilyen Ethernet hálózaton működik, speciális hardver nélkül.

A Layer2. módban egyetlen kiválasztott csomópont fogadja a szolgáltatás IP-címéhez tartozó összes forgalmat. Ez azt jelenti, hogy a szolgáltatás bemeneti sávszélessége egyetlen csomópont sávszélességére korlátozódik. Ez az ARP és az NDP (IPV6) használatának alapvető korlátja a forgalom irányítására.
A csomópontok közötti feladatátvétel az ügyfelek együttműködésétől is függ. Feladatátvétel esetén a MetalLB több “layer 2” csomagot küld , hogy értesítse az ügyfeleket: a szolgáltatás IP-jéhez társított MAC-cím megváltozott.
A legtöbb operációs rendszer azonnal frissíti a szomszédos gyorsítótárakat. Ebben az esetben a feladatátvétel néhány másodpercen belül megtörténik. 
A főbb operációs rendszerek (Windows, Mac, Linux) minden modern verziója helyesen valósítja meg a 2. réteg feladatátvételét.
Egy nem tervezett feladatátvétel során a szolgáltatás IP-címei elérhetetlenek lesznek mindaddig, amíg a kliensek nem frissítik a gyorsítótár-bejegyzéseiket. Ez 10 másodpercen belül megtörténik.


A MetalLB úgy „néz ki” a kliens szemszögéből, hogy a szolgáltatás IP-címe egyik gépről a másikra vándorol, amikor egy feladatátvétel történik, vagyis amikor megszűnik az egyik node.






Tags

Leave a Reply

Your email address will not be published. Required fields are marked *