Calico Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° Π² Kubernetes: въвСдСниС ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ‚

Calico Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° Π² Kubernetes: въвСдСниС ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ‚

Π¦Π΅Π»Ρ‚Π° Π½Π° статията Π΅ Π΄Π° Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ читатСля с основитС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π² Kubernetes, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ с приставката Calico Π½Π° Ρ‚Ρ€Π΅Ρ‚Π° страна, която Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π° стандартнитС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ. По ΠΏΡŠΡ‚Ρ, лСснотата Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ ΠΈ някои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ дСмонстрирани с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ€Π΅Π°Π»Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΎΡ‚ нашия ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΎΠΏΠΈΡ‚.

ΠšΡ€Π°Ρ‚ΠΊΠΎ въвСдСниС Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎΡ‚ΠΎ устройство Kubernetes

ΠšΠ»ΡŠΡΡ‚Π΅Ρ€ Π½Π° Kubernetes Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС прСдстави Π±Π΅Π· ΠΌΡ€Π΅ΠΆΠ°. Π’Π΅Ρ‡Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ…ΠΌΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ Π·Π° Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ основи: β€žΠ˜Π»ΡŽΡΡ‚Ρ€ΠΎΠ²Π°Π½ΠΎ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° Π² Kubernetes"И"Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° Kubernetes Π·Π° спСциалисти ΠΏΠΎ сигурността".

Π’ контСкста Π½Π° Ρ‚Π°Π·ΠΈ статия Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ самият K8s Π½Π΅ Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎΡΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈ възли: Π·Π° Ρ‚ΠΎΠ²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ CNI Π΄ΠΎΠ±Π°Π²ΠΊΠΈ (ΠœΡ€Π΅ΠΆΠΎΠ² интСрфСйс Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€). ΠŸΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚Π°Π·ΠΈ концСпция Π½ΠΈΠ΅ ΡΡŠΡ‰ΠΎ ΠΌΠΈ ΠΊΠ°Π·Π°Ρ…Π°.

НапримСр, Π½Π°ΠΉ-чСсто срСщаният ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π΅ Π±Π°Ρ€Ρ…Π΅Ρ‚ β€” осигурява пълна ΠΌΡ€Π΅ΠΆΠΎΠ²Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎΡΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ всички възли Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Ρ‡Ρ€Π΅Π· ΠΈΠ·Π΄ΠΈΠ³Π°Π½Π΅ Π½Π° мостовС Π½Π° всСки възСл, присвояванС Π½Π° ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ° към Π½Π΅Π³ΠΎ. Но ΠΏΡŠΠ»Π½Π°Ρ‚Π° ΠΈ Π½Π΅Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΠΎΡ‚ ΠΏΠΎΠ»Π·Π°. Π—Π° Π΄Π° сС осигури някаква ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° изолация Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС намСси Π² конфигурацията Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна. Π’ общия случай Ρ‚ΠΎΠΉ Π΅ поставСн ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° ΡΡŠΡ‰ΠΈΡ CNI, ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ всякакви намСси Π½Π° Ρ‚Ρ€Π΅Ρ‚ΠΈ страни Π² iptables ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π°Π½ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈΠ»ΠΈ напълно ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½ΠΈ.

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Ρ сС β€žΠΈΠ·Π²ΡŠΠ½ ΠΊΡƒΡ‚ΠΈΡΡ‚Π°β€œ Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π½Π° Kubernetes API Π½Π° NetworkPolicy. Π’ΠΎΠ·ΠΈ рСсурс, Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² ΠΈΠ·Π±Ρ€Π°Π½ΠΈ пространства ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° ΠΎΡ‚ Π΅Π΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ към Π΄Ρ€ΡƒΠ³ΠΎ. Π’ΠΎΠΉ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π²ΠΈ позволява Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅, срСди (ΠΈΠΌΠ΅Π½Π½ΠΈ пространства) ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΎΡ‚ 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).

Calico Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° Π² Kubernetes: въвСдСниС ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ‚

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° сС Π΄Π΅Π»ΠΈ Π½Π° Ρ‚Π΅Π·ΠΈ 2 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ спорСд посоката Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅.

БлСдващият Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΅ сСлСктор; Ρ‚ΠΎΠ·ΠΈ, Π·Π° ΠΊΠΎΠ³ΠΎΡ‚ΠΎ Π²Π°ΠΆΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΠΎΠ΄ (ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠ° ΠΎΡ‚ ΠΏΠΎΠ΄) ΠΈΠ»ΠΈ срСда (Ρ‚.Π΅. пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°). Π’Π°ΠΆΠ½Π° подробност: ΠΈ Π΄Π²Π°Ρ‚Π° Ρ‚ΠΈΠΏΠ° Π½Π° Ρ‚Π΅Π·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ (Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ Π² тСрминологията Π½Π° Kubernetes) - Ρ‚ΠΎΠ²Π° са Ρ‚Π΅Π·ΠΈ, с ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠΏΠ΅Ρ€ΠΈΡ€Π°Ρ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΡ†ΠΈΡ‚Π΅.

Π’ допълнСниС към ΠΊΡ€Π°Π΅Π½ Π±Ρ€ΠΎΠΉ сСлСктори, ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ‚ някакъв Π²ΠΈΠ΄ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚, Π΅ възмоТно Π΄Π° сС Π½Π°ΠΏΠΈΡˆΠ°Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊΠ°Ρ‚ΠΎ β€žΠ Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅/ΠΎΡ‚ΠΊΠ°Π· Π½Π° всичко/Π²ΡΠΈΡ‡ΠΊΠΈβ€œ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ. Π—Π° Ρ‚Π°Π·ΠΈ Ρ†Π΅Π» сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ конструкции Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°:

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

β€” Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ всички ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² срСдата са Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ входящ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС постигнС със слСдната конструкция:

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

По ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½ Π·Π° изходящи:

  podSelector: {}
  policyTypes:
  - Egress

- Π·Π° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅. И Π΅Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅:

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

Π’Ρ€ΡŠΡ‰Π°ΠΉΠΊΠΈ сС към ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° CNI плъгин Π·Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, заслуТава Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Π½Π΅ всСки ΠΌΡ€Π΅ΠΆΠΎΠ² плъгин ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° NetworkPolicy. НапримСр, Π²Π΅Ρ‡Π΅ спомСнатият Flannel Π½Π΅ Π·Π½Π°Π΅ ΠΊΠ°ΠΊ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π’Π°ΠΌ сС спомСнава ΠΈ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° – ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π°ΠΌΠ΅Ρ€ΠΈΠΊΠ°Π½, ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π° стандартния Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ API Π½Π° Kubernetes ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ.

Calico Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° Π² Kubernetes: въвСдСниС ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ‚

Π—Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ с Calico: тСория

ΠŸΡ€ΠΈΡΡ‚Π°Π²ΠΊΠ°Ρ‚Π° Calico ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² интСграция с Flannel (ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Канал) ΠΈΠ»ΠΈ нСзависимо, ΠΎΠ±Ρ…Π²Π°Ρ‰Π°ΠΉΠΊΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎΡΡ‚, Ρ‚Π°ΠΊΠ° ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° наличността.

Какви Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ прСдоставя ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° β€žΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½ΠΎΡ‚ΠΎβ€œ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° K8s ΠΈ Π½Π°Π±ΠΎΡ€Π° API ΠΎΡ‚ Calico?

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΎ Π² NetworkPolicy:

  • ΠΏΠΎΠ»ΠΈΡ‚ΠΈΡ†ΠΈΡ‚Π΅ са ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ ΠΎΡ‚ срСдата;
  • ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ към капсули, ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ;
  • ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ към ΠΏΠΎΠ΄ΠΎΠ²Π΅, срСди ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ;
  • ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ, Π½Π°ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ ΠΈΠ»ΠΈ символни спСцификации Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ Calico Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π° Ρ‚Π΅Π·ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ към всСки ΠΎΠ±Π΅ΠΊΡ‚: pod, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΈΠ»ΠΈ интСрфСйс;
  • ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ дСйствиС (Π·Π°Π±Ρ€Π°Π½Π°, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, рСгистриранС);
  • Ρ†Π΅Π»Ρ‚Π° ΠΈΠ»ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΠΎΡ€Ρ‚, Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ, HTTP ΠΈΠ»ΠΈ ICMP Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ, IP ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ° (4-Ρ‚ΠΎ ΠΈΠ»ΠΈ 6-Ρ‚ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅), всякакви сСлСктори (възли, хостовС, срСди);
  • ОсвСн Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ настройкитС Π½Π° DNAT ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° прСнасочванС Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°.

ΠŸΡŠΡ€Π²ΠΈΡ‚Π΅ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° GitHub Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Calico Π΄Π°Ρ‚ΠΈΡ€Π°Ρ‚ ΠΎΡ‚ юли 2016 Π³., Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΏΠΎ-късно ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π·Π°Π΅ Π²ΠΎΠ΄Π΅Ρ‰Π° позиция Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎΡΡ‚ Π½Π° Kubernetes - Ρ‚ΠΎΠ²Π° сС Π΄ΠΎΠΊΠ°Π·Π²Π° Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ ΠΎΡ‚ The New Stack:

Calico Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° Π² Kubernetes: въвСдСниС ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ‚

Много Π³ΠΎΠ»Π΅ΠΌΠΈ управлявани Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ с K8, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ Amazon EKS, Azure AKS, Google GKE ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…Π° Π΄Π° Π³ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°Ρ‚ Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°.

Π©ΠΎ сС отнася Π΄ΠΎ производитСлността, Ρ‚ΡƒΠΊ всичко Π΅ страхотно. ΠŸΡ€ΠΈ тСстванСто Π½Π° своя ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π΅ΠΊΠΈΠΏΡŠΡ‚ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Calico дСмонстрира астрономичСска производитСлност, Ρ€Π°Π±ΠΎΡ‚Π΅ΠΉΠΊΠΈ с ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 50000 500 ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° 20 физичСски възСла със скорост Π½Π° създаванС ΠΎΡ‚ XNUMX ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² сСкунда. НС са установСни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ. Π’Π°ΠΊΠΈΠ²Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ бяха обявСни ΠΎΡ‰Π΅ ΠΏΡ€ΠΈ обявяванСто Π½Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° вСрсия. НСзависими проучвания, фокусирани Π²ΡŠΡ€Ρ…Ρƒ производитСлността ΠΈ консумацията Π½Π° рСсурси, ΡΡŠΡ‰ΠΎ ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π°Π²Π°Ρ‚, Ρ‡Π΅ производитСлността Π½Π° Calico Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π΄ΠΎΠ±Ρ€Π°, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Ρ‚Π°Π·ΠΈ Π½Π° Flannel. НапримСр:

Calico Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° Π² Kubernetes: въвСдСниС ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ‚

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ сС Ρ€Π°Π·Π²ΠΈΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡŠΡ€Π·ΠΎ, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Ρ€Π°Π±ΠΎΡ‚Π° Π² популярни Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, управлявани K8s, OpenShift, OpenStack, възмоТно Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Calico ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Ρ€ΠΈΡ‚Π½ΠΈΠΊ, ΠΈΠΌΠ° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ към ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Service Mesh ΠΌΡ€Π΅ΠΆΠΈ (Π΅Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС във Π²Ρ€ΡŠΠ·ΠΊΠ° с Istio).

Π’Ρ€Π΅Π½ΠΈΡ€Π°ΠΉΡ‚Π΅ с Calico

Π’ общия случай Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π²Π°Π½ΠΈΠ»Π΅Π½ Kubernetes, инсталиранСто Π½Π° CNI сС свСТда Π΄ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»Π° calico.yaml, ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈ ΠΎΡ‚ официалния сайт, Ρ‡Ρ€Π΅Π· kubectl apply -f.

По ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° вСрсия Π½Π° плъгина Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠ° с послСднитС 2-3 вСрсии Π½Π° Kubernetes: Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π² ΠΏΠΎ-стари вСрсии Π½Π΅ Π΅ тСствана ΠΈ Π½Π΅ Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π°. Π‘ΠΏΠΎΡ€Π΅Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Calico Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Linux ядра Π½Π°Π΄ 3.10, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ ΠΏΠΎΠ΄ CentOS 7, Ubuntu 16 ΠΈΠ»ΠΈ Debian 8, Π²ΡŠΡ€Ρ…Ρƒ iptables ΠΈΠ»ΠΈ IPVS.

Π˜Π·ΠΎΠ»Π°Ρ†ΠΈΡ Π² ΠΎΠΊΠΎΠ»Π½Π°Ρ‚Π° срСда

Π—Π° ΠΎΠ±Ρ‰ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π½Π΅ΠΊΠ° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ прост случай, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π² нотацията Π½Π° Calico сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΎΡ‚ стандартнитС ΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚ Π·Π° създаванС Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° опростява тяхната чСтливост ΠΈ Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚ Π½Π° конфигурацията:

Calico Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° Π² Kubernetes: въвСдСниС ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ‚

Π’ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° са Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ 2 ΡƒΠ΅Π± прилоТСния: Π² Node.js ΠΈ PHP, Π΅Π΄Π½ΠΎΡ‚ΠΎ ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Redis. Π—Π° Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ Redis ΠΎΡ‚ PHP, ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅ Π²Ρ€ΡŠΠ·ΠΊΠ° с 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

По ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ входящ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ към ΠΏΠΎΡ€Ρ‚Π° Π½Π° Redis ΠΎΡ‚ Node.js. И явно Π½Π΅ са Π·Π°Π±Ρ€Π°Π½ΠΈΠ»ΠΈ Π½ΠΈΡ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ. Π’Π΅Π΄Π½Π°Π³Π° Ρ‰ΠΎΠΌ сС появи NetworkPolicy, всички сСлСктори, спомСнати Π² Π½Π΅Π³ΠΎ, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Ρ‚, освСн Π°ΠΊΠΎ Π½Π΅ Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ. ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° изолация ΠΎΠ±Π°Ρ‡Π΅ Π½Π΅ сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са ΠΎΠ±Ρ…Π²Π°Π½Π°Ρ‚ΠΈ ΠΎΡ‚ сСлСктора.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° apiVersion Kubernetes Π΅ Π³ΠΎΡ‚ΠΎΠ², Π½ΠΎ Π½ΠΈΡ‰ΠΎ Π½Π΅ Π²ΠΈ ΠΏΡ€Π΅Ρ‡ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ рСсурс със ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ ΠΎΡ‚ доставката Calico. Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ Ρ‚Π°ΠΌ Π΅ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π΅Π½, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ трябва Π΄Π° ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π·Π° горния случай Π² слСдната Ρ„ΠΎΡ€ΠΌΠ°:

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

ГорСспомСнатитС конструкции Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Π· Π½Π° цСлия Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΡ€Π΅Π· обикновСния API Π½Π° NetworkPolicy ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ конструкции със скоби, ΠΊΠΎΠΈΡ‚ΠΎ са Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ запомнянС. Π’ случая с Calico, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ, просто ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ action: Allow Π½Π° action: Deny.

Π˜Π·ΠΎΠ»Π°Ρ†ΠΈΡ ΠΎΡ‚ ΠΎΠΊΠΎΠ»Π½Π°Ρ‚Π° срСда

Π‘Π΅Π³Π° си прСдставСтС ситуация, Π² която ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° бизнСс ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π² Prometheus ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ Π°Π½Π°Π»ΠΈΠ· с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Grafana. ΠšΠ°Ρ‡Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° чувствитСлни Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‚Π½ΠΎΠ²ΠΎ са общСствСно Π²ΠΈΠ΄ΠΈΠΌΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. НСка скриСм Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π»ΡŽΠ±ΠΎΠΏΠΈΡ‚Π½ΠΈ ΠΎΡ‡ΠΈ:

Calico Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° Π² Kubernetes: въвСдСниС ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ‚

Prometheus, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, сС поставя Π² ΠΎΡ‚Π΄Π΅Π»Π½Π° сСрвизна срСда - Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π°:

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

ΠžΠ±Π»Π°ΡΡ‚ metadata.labels Ρ‚ΠΎΠ²Π° сС ΠΎΠΊΠ°Π·Π° нСслучайно. ΠšΠ°ΠΊΡ‚ΠΎ Π΅ спомСнато ΠΏΠΎ-Π³ΠΎΡ€Π΅, namespaceSelector (ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ podSelector) Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π·Π° Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π²Π·Π΅ΠΌΠ°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΎΡ‚ всички ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΏΠΎΡ€Ρ‚, Ρ‰Π΅ трябва Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ някакъв Π²ΠΈΠ΄ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ (ΠΈΠ»ΠΈ Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ) ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ конфигурация ΠΊΠ°Ρ‚ΠΎ:

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, ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ Ρ‰Π΅ бъдС ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ:

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, Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚ β€žΠ‘Π»ΠΎΠΊΠΈΡ€Π°ΠΉΡ‚Π΅ всичко ΠΈ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅β€œ, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация (Π΄Ρ€ΡƒΠ³ΠΈ слСдват ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ - ΠΏΠΎ-спСциално, Π² Π²Π΅Ρ‡Π΅ спомСнатата статия).

ИзползванС Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Calico ΠΎΠ±Π΅ΠΊΡ‚ΠΈ

ΠŸΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚Π΅ ΠΌΠΈ Π΄Π° Π²ΠΈ напомня, Ρ‡Π΅ Ρ‡Ρ€Π΅Π· Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ API Π½Π° Calico ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€Π°Ρ‚Π΅ наличността Π½Π° възли, Π±Π΅Π· Π΄Π° сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Ρ‚Π΅ Π΄ΠΎ pods. Π’ слСдващия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° GlobalNetworkPolicy Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ICMP заявки Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΅ Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ping ΠΎΡ‚ ΠΏΠΎΠ΄ към възСл, ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ΄ΠΎΠ²Π΅ ΠΈΠ»ΠΈ ΠΎΡ‚ възСл към 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

Π’ горния случай всС ΠΎΡ‰Π΅ Π΅ възмоТно Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΄Π° β€žΡΠ΅ ΡΠ²ΡŠΡ€ΠΆΠ°Ρ‚β€œ Π΅Π΄ΠΈΠ½ с Π΄Ρ€ΡƒΠ³ Ρ‡Ρ€Π΅Π· 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

И накрая, Ρ‰Π΅ Π΄Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π°Π»Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Calico Π·Π° случай Π½Π° взаимодСйствиС Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, ΠΊΠΎΠ³Π°Ρ‚ΠΎ стандартСн Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½. Π—Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ VPN Ρ‚ΡƒΠ½Π΅Π» ΠΈ Ρ‚ΠΎΠ·ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΅ строго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π΄ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ списък ΠΎΡ‚ услуги, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅:

Calico Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΌΡ€Π΅ΠΆΠ° Π² Kubernetes: въвСдСниС ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ‚

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ към VPN Ρ‡Ρ€Π΅Π· стандартСн UDP ΠΏΠΎΡ€Ρ‚ 1194 ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΡΠ²ΡŠΡ€ΠΆΠ°Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ към ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ ΠΈ услуги. Π¦Π΅Π»ΠΈ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ сС натискат, Π·Π° Π΄Π° Π½Π΅ сС загубят услуги ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° рСстартиранС ΠΈ промяна Π½Π° адрСса.

ΠŸΠΎΡ€Ρ‚ΡŠΡ‚ Π² конфигурацията Π΅ стандартСн, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°Π»Π°Π³Π° някои нюанси Π²ΡŠΡ€Ρ…Ρƒ процСса Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ ΠΌΡƒ към ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Kubernetes. НапримСр, Π² ΡΡŠΡ‰ΠΈΡ AWS LoadBalancer Π·Π° UDP сС появи Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ Π² края Π½Π° ΠΌΠΈΠ½Π°Π»Π°Ρ‚Π° Π³ΠΎΠ΄ΠΈΠ½Π° Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ списък ΠΎΡ‚ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΈ, Π° NodePort Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΡ€Π°Π΄ΠΈ прСнасочванСто ΠΌΡƒ към всички ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½ΠΈ възли ΠΈ Π΅ нСвъзмоТно Π΄Π° сС ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π° броят Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΈΡ‚Π΅ СкзСмпляри Π·Π° Ρ†Π΅Π»ΠΈΡ‚Π΅ Π½Π° толСрантността към Π³Ρ€Π΅ΡˆΠΊΠΈ. ОсвСн Ρ‚ΠΎΠ²Π° Ρ‰Π΅ трябва Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅...

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° възмоТни Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ бСшС ΠΈΠ·Π±Ρ€Π°Π½ΠΎ слСдното:

  1. ΠŸΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅ с VPN сС ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚ Π½Π° възСл Π² hostNetwork, тоСст към дСйствитСлното IP.
  2. Услугата Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π° извън Ρ‡Ρ€Π΅Π· ClusterIP. На възСла физичСски Π΅ инсталиран ΠΏΠΎΡ€Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ΠΎΡ‚Π²ΡŠΠ½ с ΠΌΠ°Π»ΠΊΠΈ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈ (условно Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° Ρ€Π΅Π°Π»Π΅Π½ IP адрСс).
  3. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ½Π΅Ρ‚ΠΎ Π½Π° възСла, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΡˆΡƒΡˆΡƒΠ»ΠΊΠ°Ρ‚Π° Π΅ извън ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° история. Π©Π΅ ΠΊΠ°ΠΆΠ° само, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ»ΡŠΡ‚Π½ΠΎ Π΄Π° β€žΠ·Π°ΠΊΠΎΠ²Π°Ρ‚Π΅β€œ услугата към възСл ΠΈΠ»ΠΈ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΌΠ°Π»ΠΊΠ° услуга Π·Π° странични ΠΊΠΎΠ»ΠΈ, която Ρ‰Π΅ слСди тСкущия IP адрСс Π½Π° VPN услугата ΠΈ Ρ‰Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π° DNS записитС, рСгистрирани с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ - ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π²ΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

ΠžΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅, ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΎ Π΄Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ 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 услугата, Ρ‡ΠΈΠ΅Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅ доста чСсто страда ΠΏΡ€ΠΈ изготвянСто Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°. Въй ΠΊΠ°Ρ‚ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ бСшС спомСнато ΠΏΠΎ-Ρ€Π°Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС появи сСлСктор, към Π½Π΅Π³ΠΎ сС ΠΏΡ€ΠΈΠ»Π°Π³Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π·Π° ΠΎΡ‚ΠΊΠ°Π· ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, освСн Π°ΠΊΠΎ Π½Π΅ Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ API Π½Π° Calico, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ гъвкаво Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Π΄Π° промСнятС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π² ΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. ΠšΠ°Ρ‚ΠΎ цяло ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ стрСлба ΠΏΠΎ Π²Ρ€Π°Π±Ρ‡Π΅Ρ‚Π° с ΠΎΡ€ΡŠΠ΄ΠΈΠ΅, Π° внСдряванСто Π½Π° L3 ΠΌΡ€Π΅ΠΆΠ° с BGP ΠΈ IP-IP Ρ‚ΡƒΠ½Π΅Π»ΠΈ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‡ΡƒΠ΄ΠΎΠ²ΠΈΡ‰Π½ΠΎ Π² проста инсталация Π½Π° Kubernetes Π² плоска ΠΌΡ€Π΅ΠΆΠ°... Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай ΠΎΠ±Π°Ρ‡Π΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° доста ТизнСспособСн ΠΈ ΠΏΠΎΠ»Π΅Π·Π΅Π½ .

Π˜Π·ΠΎΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, Π·Π° Π΄Π° отговаря Π½Π° изискванията Π·Π° сигурност, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΈΠΌΠΎ ΠΈ Ρ‚ΡƒΠΊ Calico (ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅) ΠΈΠ΄Π²Π° Π½Π° ΠΏΠΎΠΌΠΎΡ‰. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅, Π΄Π°Π΄Π΅Π½ΠΈ Π² Ρ‚Π°Π·ΠΈ статия (с ΠΌΠ°Π»ΠΊΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ), сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² няколко инсталации Π½Π° наши ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π² AWS.

PS

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€