Калико Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ: Π²ΠΎΠ²Π΅Π΄ ΠΈ ΠΌΠ°Π»ΠΊΡƒ искуство

Калико Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ: Π²ΠΎΠ²Π΅Π΄ ΠΈ ΠΌΠ°Π»ΠΊΡƒ искуство

Π¦Π΅Π»Ρ‚Π° Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° Π΅ Π΄Π° Π³ΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΎΡ‚ со основитС Π½Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ со ΠΌΡ€Π΅ΠΆΠ½ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π²ΠΎ Kubernetes, ΠΊΠ°ΠΊΠΎ ΠΈ со Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊΠΎΡ‚ Calico ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ‚Π° страна кој Π³ΠΈ ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π° стандарднитС моТности. На ΠΏΠ°Ρ‚ΠΎΡ‚, Π»Π΅ΡΠ½ΠΎΡ‚ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΈ Π½Π΅ΠΊΠΎΠΈ карактСристики ќС сС дСмонстрираат ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ вистински ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΎΠ΄ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ искуство.

Π‘Ρ€Π· Π²ΠΎΠ²Π΅Π΄ Π²ΠΎ ΠΌΡ€Π΅ΠΆΠ½ΠΈΠΎΡ‚ Π°ΠΏΠ°Ρ€Π°Ρ‚ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΎΡ‚ Kubernetes Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС замисли Π±Π΅Π· ΠΌΡ€Π΅ΠΆΠ°. Π’Π΅ΡœΠ΅ објавивмС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈ Π·Π° Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ основи: β€œΠ˜Π»ΡƒΡΡ‚Ρ€ΠΈΡ€Π°Π½ Π²ΠΎΠ΄ΠΈΡ‡ Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ"И"Π’ΠΎΠ²Π΅Π΄ Π²ΠΎ ΠΌΡ€Π΅ΠΆΠ½ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π½Π° ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π·Π° профСсионалци Π·Π° бСзбСдност".

Π’ΠΎ контСкст Π½Π° овој напис, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π΄Π΅ΠΊΠ° самиот K8s Π½Π΅ Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° ΠΌΡ€Π΅ΠΆΠ½ΠΎΡ‚ΠΎ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ Ρ˜Π°Π·Π»ΠΈΡ‚Π΅: Π·Π° ΠΎΠ²Π°, Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ (Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅). ПовСќС Π·Π° овој ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ Π½ΠΈΠ΅ ΠΌΠΈ ΠΊΠ°ΠΆΠ°Π° ΠΈ Ρ‚ΠΈΠ΅.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Ρ˜Ρ‡Π΅ΡΡ‚ΠΈΠΎΡ‚ ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ Π΅ Π€Π»Π°Π½Π΅Π» β€” ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° цСлосна ΠΌΡ€Π΅ΠΆΠ½Π° ΠΊΠΎΠ½Π΅ΠΊΡ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ситС јазли Π½Π° кластСри со подигањС мостови Π½Π° сСкој јазол, Π΄ΠΎΠ΄Π΅Π»ΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΌΡƒ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ°. Π‘Π΅ΠΏΠ°ΠΊ, цСлосната ΠΈ Π½Π΅Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€Π°Π½Π° пристапност Π½Π΅ Π΅ сСкогаш корисна. Π—Π° Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ Π½Π΅ΠΊΠ°ΠΊΠ²Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° ΠΈΠ·ΠΎΠ»Π°Ρ†ΠΈΡ˜Π° Π²ΠΎ кластСрот, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π΅ Π΄Π° сС ΠΈΠ½Ρ‚Π΅Ρ€Π²Π΅Π½ΠΈΡ€Π° Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° Π·Π°ΡˆΡ‚ΠΈΡ‚Π½ΠΈΠΎΡ‚ Ρ•ΠΈΠ΄. Π’ΠΎ ΠΎΠΏΡˆΡ‚ΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜, Ρ‚ΠΎΡ˜ Π΅ ставСн ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° истиот CNI, ΠΏΠΎΡ€Π°Π΄ΠΈ ΡˆΡ‚ΠΎ ситС ΠΈΠ½Ρ‚Π΅Ρ€Π²Π΅Π½Ρ†ΠΈΠΈ ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ‚Π° страна Π²ΠΎ iptables ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ‚ΠΎΠ»ΠΊΡƒΠ²Π°Π°Ρ‚ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎ ΠΈΠ»ΠΈ цСлосно Π΄Π° сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π°Ρ‚.

ОбСзбСдСно Π΅ ΠΈ β€žΠ½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ ΠΊΡƒΡ‚ΠΈΡ˜Π°Ρ‚Π°β€œ Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со ΠΌΡ€Π΅ΠΆΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π²ΠΎ кластСр Π½Π° ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ NetworkPolicy API. Овој рСсурс, дистрибуиран ΠΏΡ€Π΅ΠΊΡƒ ΠΎΠ΄Π±Ρ€Π°Π½ΠΈ имСнски простори, ΠΌΠΎΠΆΠ΅ Π΄Π° содрТи ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Π΄Π° сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π° пристапот ΠΎΠ΄ Π΅Π΄Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π΄ΠΎ Π΄Ρ€ΡƒΠ³Π°. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ја ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ пристапноста ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ, ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ (имСнски простори) ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΠΎΠ΄ 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) ΠΈ ΠΈΠ·Π»Π΅Π³ΡƒΠ²Π°ΡšΠ΅ ΠΎΠ΄ Π½Π΅Π³ΠΎ (ИзлСз).

Калико Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ: Π²ΠΎΠ²Π΅Π΄ ΠΈ ΠΌΠ°Π»ΠΊΡƒ искуство

Π’ΡΡƒΡˆΠ½ΠΎΡΡ‚, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π΅ ΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° Π½Π° ΠΎΠ²ΠΈΠ΅ Π΄Π²Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Π²Ρ€Π· основа Π½Π° насоката Π½Π° двиТСњС.

Π‘Π»Π΅Π΄Π½ΠΈΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΅ сСлСктор; оној Π·Π° кој Π²Π°ΠΆΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ. Ова ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ pod (ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠ° Π½Π° pods) ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΈΠ½Π° (Ρ‚.Π΅. имСнски простор). Π’Π°ΠΆΠ΅Π½ Π΄Π΅Ρ‚Π°Π»: Π΄Π²Π°Ρ‚Π° Ρ‚ΠΈΠΏΠ° Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ ΠΌΠΎΡ€Π° Π΄Π° содрТат Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚Π° (Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚Π° Π²ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚) - Ρ‚ΠΎΠ° сС ΠΎΠ½ΠΈΠ΅ со ΠΊΠΎΠΈ ΠΎΠΏΠ΅Ρ€ΠΈΡ€Π°Π°Ρ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΡ‡Π°Ρ€ΠΈΡ‚Π΅.

ΠŸΠΎΠΊΡ€Π°Ρ˜ ΠΊΠΎΠ½Π΅Ρ‡Π΅Π½ Π±Ρ€ΠΎΡ˜ Π½Π° ΠΈΠ·Π±ΠΈΡ€Π°Ρ‡ΠΈ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Ρ‚ΠΈ со Π½Π΅ΠΊΠ°ΠΊΠ²Π° ΠΎΠ·Π½Π°ΠΊΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС Π½Π°ΠΏΠΈΡˆΠ°Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊΠ°ΠΊΠΎ β€žΠ”ΠΎΠ·Π²ΠΎΠ»ΠΈ/ΠΎΠ΄Π±ΠΈ сС/ΡΠ΅ΠΊΠΎΡ˜β€œ Π²ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²Π°Ρ€ΠΈΡ˜Π°Ρ†ΠΈΠΈ. Π—Π° Ρ‚Π°Π° Ρ†Π΅Π» сС користат конструкции ΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°:

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

β€” Π²ΠΎ овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ситС ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ Π²ΠΎ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° сС Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ΠΈ ΠΎΠ΄ Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½ΠΈΠΎΡ‚ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜. Π‘ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΡ‚ΠΎ ΠΎΠ΄Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС постигнС со слСдната ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π°:

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

Π‘Π»ΠΈΡ‡Π½ΠΎ Π·Π° појдовни:

  podSelector: {}
  policyTypes:
  - Egress

- Π΄Π° Π³ΠΎ исклучитС. И Π΅Π²Π΅ ΡˆΡ‚ΠΎ Π΄Π° Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅:

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

Π’Ρ€Π°ΡœΠ°Ρ˜ΡœΠΈ сС Π½Π° ΠΈΠ·Π±ΠΎΡ€ΠΎΡ‚ Π½Π° CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ Π·Π° кластСр, Π²Ρ€Π΅Π΄ΠΈ Π΄Π° сС Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π΄Π΅ΠΊΠ° Π½Π΅ сСкој ΠΌΡ€Π΅ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° NetworkPolicy. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вСќС спомСнатиот Flannel Π½Π΅ Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΌΡ€Π΅ΠΆΠ½ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, ΠΊΠΎΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ сС Π²Π΅Π»ΠΈ Π²ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½ΠΎΡ‚ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅. Π’Π°ΠΌΡƒ сС спомСнува ΠΈ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° - ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ АмСрикан, ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π³ΠΎ ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π° стандардниот сСт Π½Π° Kubernetes API Π²ΠΎ однос Π½Π° ΠΌΡ€Π΅ΠΆΠ½ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ.

Калико Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ: Π²ΠΎΠ²Π΅Π΄ ΠΈ ΠΌΠ°Π»ΠΊΡƒ искуство

Π—Π°ΠΏΠΎΠ·Π½Π°Π²Π°ΡšΠ΅ со Калико: Ρ‚Π΅ΠΎΡ€ΠΈΡ˜Π°

ΠŸΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Calico ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи Π²ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° со Flannel (ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Канал) ΠΈΠ»ΠΈ нСзависно, ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ˜ΡœΠΈ Π³ΠΈ ΠΈ ΠΌΡ€Π΅ΠΆΠ½ΠΎΡ‚ΠΎ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ ΠΈ способноститС Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со достапноста.

Какви моТности Π΄Π°Π²Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅Ρ‚ΠΎ Π½Π° K8s β€žboxedβ€œ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ API сСтот ΠΎΠ΄ Calico?

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

  • ΠΏΠΎΠ»ΠΈΡ‚ΠΈΡ‡Π°Ρ€ΠΈΡ‚Π΅ сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ ΠΎΠ΄ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π°;
  • ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ Π½Π° ΠΌΠ΅ΡˆΡƒΠ½ΠΊΠΈΡ‚Π΅ ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈ со Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ;
  • ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠΌΠ΅Π½Π°Ρ‚ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²ΠΈ, ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ;
  • ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° содрТат ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ, ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ ΠΈΠ»ΠΈ симболични спСцификации Π½Π° ΠΏΠΎΡ€Ρ‚Π°Ρ‚Π°.

Π•Π²Π΅ ΠΊΠ°ΠΊΠΎ Calico Π³ΠΈ ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π° ΠΎΠ²ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠΌΠ΅Π½Π°Ρ‚ Π½Π° кој Π±ΠΈΠ»ΠΎ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚: ΠΏΠΎΠ΄, ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€, Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ;
  • ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° содрТат ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° Π°ΠΊΡ†ΠΈΡ˜Π° (Π·Π°Π±Ρ€Π°Π½Π°, Π΄ΠΎΠ·Π²ΠΎΠ»Π°, сСча);
  • Ρ†Π΅Π»Ρ‚Π° ΠΈΠ»ΠΈ ΠΈΠ·Π²ΠΎΡ€ΠΎΡ‚ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠΎΡ€Ρ‚Π°, опсСг Π½Π° ΠΏΠΎΡ€Ρ‚ΠΈ, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ, HTTP ΠΈΠ»ΠΈ ICMP Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ, IP ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ° (Ρ‡Π΅Ρ‚Π²Ρ€Ρ‚Π° ΠΈΠ»ΠΈ 4-Ρ‚Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡ˜Π°), ΠΊΠ°ΠΊΠ²ΠΈ Π±ΠΈΠ»ΠΎ сСлСктори (јазли, хостови, ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ);
  • Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎΠΌΠΈΠ½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ΠΎΡ‚ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΈ поставкитС Π·Π° DNAT ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π·Π° ΠΏΡ€Π΅Π½Π°ΡΠΎΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ΠΎΡ‚.

ΠŸΡ€Π²ΠΈΡ‚Π΅ обврски Π½Π° GitHub Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ Calico Π΄Π°Ρ‚ΠΈΡ€Π°Π°Ρ‚ ΠΎΠ΄ Ρ˜ΡƒΠ»ΠΈ 2016 Π³ΠΎΠ΄ΠΈΠ½Π°, Π° Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΏΠΎΠ΄ΠΎΡ†Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Π·Π°Π·Π΅Π΄Π΅ Π²ΠΎΠ΄Π΅Ρ‡ΠΊΠ° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡ˜Π° Π²ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠ½ΠΎΡ‚ΠΎ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ Π½Π° Kubernetes - ΠΎΠ²Π° Π΅ ΠΏΠΎΡ‚Π²Ρ€Π΄Π΅Π½ΠΎ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, со Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ ΠΈΡΡ‚Ρ€Π°ΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ, спровСдСно ΠΎΠ΄ The ​​New Stack:

Калико Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ: Π²ΠΎΠ²Π΅Π΄ ΠΈ ΠΌΠ°Π»ΠΊΡƒ искуство

ΠœΠ½ΠΎΠ³Ρƒ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π° со K8, ΠΊΠ°ΠΊΠΎ Π½Π° ΠΏΡ€ Амазон Π•ΠšΠ‘, Азур АКБ, Google GKE Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΡ‡Π½Π°Π° Π΄Π° Π³ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°Π°Ρ‚ Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°.

Π¨Ρ‚ΠΎ сС однСсува Π΄ΠΎ пСрформанситС, ΠΎΠ²Π΄Π΅ сС Π΅ ΠΎΠ΄Π»ΠΈΡ‡Π½ΠΎ. ΠŸΡ€ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π½ΠΈΠ²Π½ΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄, Ρ‚ΠΈΠΌΠΎΡ‚ Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° Calico ΠΏΠΎΠΊΠ°ΠΆΠ° астрономски пСрформанси, ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Ρ˜ΡœΠΈ повСќС ΠΎΠ΄ 50000 ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ Π½Π° 500 Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠΈ јазли со Π±Ρ€Π·ΠΈΠ½Π° Π½Π° создавањС ΠΎΠ΄ 20 ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ Π²ΠΎ сСкунда. НС Π±Π΅Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅. Π’Π°ΠΊΠ²ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π±Π΅Π° објавСни вСќС Π½Π° најава Π·Π° ΠΏΡ€Π²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°. НСзависнитС студии ΠΊΠΎΠΈ сС фокусираат Π½Π° пропусната моќ ΠΈ ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΊΠ°Ρ‚Π° Π½Π° рСсурси исто Ρ‚Π°ΠΊΠ° ΠΏΠΎΡ‚Π²Ρ€Π΄ΡƒΠ²Π°Π°Ρ‚ Π΄Π΅ΠΊΠ° пСрформанситС Π½Π° Calico сС рСчиси исто Ρ‚ΠΎΠ»ΠΊΡƒ Π΄ΠΎΠ±Ρ€ΠΈ ΠΊΠ°ΠΊΠΎ ΠΎΠ½ΠΈΠ΅ Π½Π° Flannel. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Калико Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ: Π²ΠΎΠ²Π΅Π΄ ΠΈ ΠΌΠ°Π»ΠΊΡƒ искуство

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ сС Ρ€Π°Π·Π²ΠΈΠ²Π° ΠΌΠ½ΠΎΠ³Ρƒ Π±Ρ€Π·ΠΎ, ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π° Π²ΠΎ ΠΏΠΎΠΏΡƒΠ»Π°Ρ€Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Π½ΠΈ 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 сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π°Π°Ρ‚ ΠΎΠ΄ стандарднитС ΠΈ ΠΊΠ°ΠΊΠΎ пристапот Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ја поСдноставува Π½ΠΈΠ²Π½Π°Ρ‚Π° читливост ΠΈ флСксибилност Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°:

Калико Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ: Π²ΠΎΠ²Π΅Π΄ ΠΈ ΠΌΠ°Π»ΠΊΡƒ искуство

ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ 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

Π’ΠΎ ΡΡƒΡˆΡ‚ΠΈΠ½Π°, Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΠ²ΠΌΠ΅ дојдовСн ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ Π΄ΠΎ ΠΏΡ€ΠΈΡΡ‚Π°Π½ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ РСдис ΠΎΠ΄ Node.js. И Ρ‚ΠΈΠ΅ ΠΎΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΎ Π½Π΅ Π·Π°Π±Ρ€Π°Π½ΠΈΡ˜Π° Π½ΠΈΡˆΡ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ. Π¨Ρ‚ΠΎΠΌ сС појави NetworkPolicy, ситС сСлСктори спомСнати Π²ΠΎ Π½Π΅Π³ΠΎ ΠΏΠΎΡ‡Π½ΡƒΠ²Π°Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π°Ρ‚, освСн Π°ΠΊΠΎ Π½Π΅ Π΅ ΠΏΠΎΠΈΠ½Π°ΠΊΡƒ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ. Π‘Π΅ΠΏΠ°ΠΊ, ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° ΠΈΠ·ΠΎΠ»Π°Ρ†ΠΈΡ˜Π° Π½Π΅ Π²Π°ΠΆΠ°Ρ‚ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ ΠΊΠΎΠΈ Π½Π΅ сС ΠΎΠΏΡ„Π°Ρ‚Π΅Π½ΠΈ со ΠΈΠ·Π±ΠΈΡ€Π°Ρ‡ΠΎΡ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ користи apiVersion Kubernetes Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ ΠΊΡƒΡ‚ΠΈΡ˜Π°Ρ‚Π°, Π½ΠΎ Π½ΠΈΡˆΡ‚ΠΎ Π½Π΅ Π²Π΅ спрСчува Π΄Π° Π³ΠΎ користитС рСсурс со исто ΠΈΠΌΠ΅ ΠΎΠ΄ испораката Π½Π° Калико. Бинтаксата Ρ‚Π°ΠΌΡƒ Π΅ ΠΏΠΎΠ΄Π΅Ρ‚Π°Π»Π½Π°, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ ќС Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π·Π° Π³ΠΎΡ€Π΅Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π²ΠΎ слСдната Ρ„ΠΎΡ€ΠΌΠ°:

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, Π·Π° Π΄Π° ја смСнитС Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π·Π° Π·Π°ΡˆΡ‚ΠΈΡ‚Π΅Π½ Ρ•ΠΈΠ΄ Π²ΠΎ спротивно, само смСнСтС action: Allow Π½Π° action: Deny.

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

Π‘Π΅Π³Π° замислСтС ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π° ΠΊΠΎΠ³Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π΄Π΅Π»ΠΎΠ²Π½ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π·Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ Π²ΠΎ ΠŸΡ€ΠΎΠΌΠ΅Ρ‚Π΅Ρ˜ ΠΈ ΠΏΠΎΠ½Π°Ρ‚Π°ΠΌΠΎΡˆΠ½Π° Π°Π½Π°Π»ΠΈΠ·Π° со помош Π½Π° Π“Ρ€Π°Ρ„Π°Π½Π°. ΠŸΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° содрТи чувствитСлни ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΠΊΠΎΠΈ стандардно ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сС јавно Π²ΠΈΠ΄Π»ΠΈΠ²ΠΈ. АјдС Π΄Π° Π³ΠΈ скриСмС ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Ρ™ΡƒΠ±ΠΎΠΏΠΈΡ‚Π½ΠΈΡ‚Π΅ ΠΎΡ‡ΠΈ:

Калико Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ: Π²ΠΎΠ²Π΅Π΄ ΠΈ ΠΌΠ°Π»ΠΊΡƒ искуство

ΠŸΡ€ΠΎΠΌΠ΅Ρ‚Π΅Ρ˜, ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, сС става Π²ΠΎ посСбна ΠΎΠΏΠΊΡ€ΡƒΠΆΡƒΠ²Π°ΡšΠ΅ Π·Π° услуги - Π²ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ ќС Π±ΠΈΠ΄Π΅ имСнски простор ΠΊΠ°ΠΊΠΎ овој:

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 ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ

Π”ΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚Π΅ ΠΌΠΈ Π΄Π° Π²Π΅ потсСтам Π΄Π΅ΠΊΠ° ΠΏΡ€Π΅ΠΊΡƒ ΠΏΡ€ΠΎΡˆΠΈΡ€Π΅Π½ΠΈΠΎΡ‚ сСт Π½Π° Calico API ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€Π°Ρ‚Π΅ достапноста Π½Π° Ρ˜Π°Π·Π»ΠΈΡ‚Π΅, Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ сС Π½Π° ΠΏΠΎΠ΄ΠΎΠ²ΠΈ. Π’ΠΎ слСдниот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ GlobalNetworkPolicy способноста Π·Π° ΠΏΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ ICMP Π±Π°Ρ€Π°ΡšΠ° Π²ΠΎ кластСрот Π΅ Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½Π° (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΈΠ½Π³ ΠΎΠ΄ ΠΏΠΎΠ΄ Π΄ΠΎ јазол, ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΏΠΎΠ΄ΠΎΠ²ΠΈ ΠΈΠ»ΠΈ ΠΎΠ΄ јазол Π΄ΠΎ 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 Ρ‚ΡƒΠ½Π΅Π» ΠΈ овој пристап Π΅ строго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π½Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° листа Π½Π° услуги Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈ Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°:

Калико Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ: Π²ΠΎΠ²Π΅Π΄ ΠΈ ΠΌΠ°Π»ΠΊΡƒ искуство

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ сС ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°Π°Ρ‚ со 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 ΠΈΠ·Π³Π»Π΅Π΄Π° монструозно Π²ΠΎ Сдноставна ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π½Π° Ρ€Π°ΠΌΠ½Π° ΠΌΡ€Π΅ΠΆΠ°... ΠœΠ΅Ρ“ΡƒΡ‚ΠΎΠ°, ΠΈΠ½Π°ΠΊΡƒ Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° ΠΈΠ·Π³Π»Π΅Π΄Π° доста остварлива ΠΈ корисна .

Π˜Π·ΠΎΠ»ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° кластСрот Π·Π° Π΄Π° сС исполнат бСзбСдноснитС Π±Π°Ρ€Π°ΡšΠ° ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π΅ сСкогаш ΠΈΠ·Π²ΠΎΠ΄Π»ΠΈΠ²ΠΎ, ΠΈ Ρ‚ΠΎΠΊΠΌΡƒ Ρ‚ΡƒΠΊΠ° Calico (ΠΈΠ»ΠΈ слично Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅) Π΄ΠΎΠ°Ρ“Π° Π½Π° помош. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π΄Π΅Π½ΠΈ Π²ΠΎ овој напис (со ΠΌΠ°Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈ) сС користат Π²ΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ инсталации Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π²ΠΎ AWS.

PS

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ ΠΈ Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ Π±Π»ΠΎΠ³:

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€