Calico เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes: เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเปเบฅเบฐเบ›เบฐเบชเบปเบšเบเบฒเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ

Calico เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes: เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเปเบฅเบฐเบ›เบฐเบชเบปเบšเบเบฒเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ

เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเปเบ™เบฐเบ™เปเบฒเบœเบนเป‰เบญเปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ™เบฐเป‚เบเบšเบฒเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš plugin Calico เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบกเบ—เบตเปˆเบ‚เบฐเบซเบเบฒเบเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™. เปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™, เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบšเบฒเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบˆเบฒเบเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบเบฒเบ™เปเบ™เบฐเบ™เบณเบ”เปˆเบงเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปƒเบŠเป‰เป€เบ„เบทเบญเบ‚เปˆเบฒเบ Kubernetes

เบเบธเปˆเบก Kubernetes เบšเปเปˆเบชเบฒเบกเบฒเบ”เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบกเบตเป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบžเบดเบกโ€‹เป€เบœเบตเบโ€‹เปเบœเปˆโ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹: โ€œ.เบ„เบนเปˆเบกเบทเบ—เบตเปˆเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes"เปเบฅเบฐ"เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบเปˆเบฝเบงเบเบฑเบšเบ™เบฐเป‚เบเบšเบฒเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบ Kubernetes เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบŠเปˆเบฝเบงเบŠเบฒเบ™เบ”เป‰เบฒเบ™เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž".

เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ K8s เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบ•เปเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡ container เปเบฅเบฐ nodes: เบชเปเบฒเบฅเบฑเบšเบ™เบตเป‰, เบ•เปˆเบฒเบ‡เป†. เบ›เบฅเบฑเบเบญเบดเบ™ CNI (Container Networking Interface). เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒ เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบšเบญเบเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡ plugins เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ Flannel โ€” เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เป€เบ„เบทเบญโ€‹เบ‚เปˆเบฒเบโ€‹เบขเปˆเบฒเบ‡โ€‹เป€เบ•เบฑเบกโ€‹เบ—เบตเปˆโ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡ nodes เบเบธเปˆเบกโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เป€เบžเบตเปˆเบกโ€‹เบ‚เบปเบงโ€‹เปƒเบ™โ€‹เปเบ•เปˆโ€‹เบฅเบฐ nodeโ€‹, เบเบฒเบ™โ€‹เบกเบญเบšโ€‹เบซเบกเบฒเบ subnet เบเบฑเบšโ€‹เบกเบฑเบ™โ€‹. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ—เบตเปˆเบชเบปเบกเบšเบนเบ™ เปเบฅเบฐเบšเปเปˆเบกเบตเบฅเบฐเบšเบฝเบšเปเบกเปˆเบ™เบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เบชเบฐเป€เปเบตเป„เบ›. เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเป‚เบ”เบ”เบ”เปˆเบฝเบงเป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™เบเบธเปˆเบก, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปเบŠเบเปเบŠเบ‡เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡ firewall. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบปเปˆเบงเป„เบ›, เบกเบฑเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ‚เบญเบ‡ CNI เบ”เบฝเบงเบเบฑเบ™, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบงเปˆเบฒเบเบฒเบ™เปเบŠเบเปเบŠเบ‡เบ‚เบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบกเปƒเบ™ iptables เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ•เบตเบ„เบงเบฒเบกเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบซเบผเบทเบ–เบทเบเบฅเบฐเป€เบฅเบตเบเบ—เบฑเบ‡เบซเบกเบปเบ”.

เปเบฅเบฐ "เบ™เบญเบเบเปˆเบญเบ‡" เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ™เบฐเป‚เบเบšเบฒเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™เบเบธเปˆเบก Kubernetes เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰ NetworkPolicy API. เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰, เปเบˆเบเบขเบฒเบเบขเบนเปˆเปƒเบ™ namespaces เบ—เบตเปˆเป€เบฅเบทเบญเบ, เบญเบฒเบ”เบˆเบฐเบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบšเป€เบžเบทเปˆเบญเปเบเบเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบˆเบฒเบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบซเบ™เบถเปˆเบ‡เป„เบ›เบซเบฒเบญเบตเบ. เบกเบฑเบ™เบเบฑเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบซเบฒเบฅเบฐเบซเบงเปˆเบฒเบ‡เบžเบญเบ”เบชเบฐเป€เบžเบฒเบฐ, เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก (namespaces) เบซเบผเบทเบšเบฅเบฑเบญเบเบ‚เบญเบ‡เบ—เบตเปˆเบขเบนเปˆ 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

เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡ plugin CNI เบชเปเบฒเบฅเบฑเบšเบเบธเปˆเบก, เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเป† plugin เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ NetworkPolicy. เบ•เบปเบงเบขเปˆเบฒเบ‡, Flannel เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบงเบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ™เบฐเป‚เบเบšเบฒเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เป€เบŠเบดเปˆเบ‡ เบกเบฑเบ™เป€เบงเบปเป‰เบฒเป‚เบ”เบเบเบปเบ‡ เปƒเบ™ repository เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™เบเบฑเบ‡เบ–เบทเบเบเปˆเบฒเบงเป€เบ–เบดเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™ - เป‚เบ„เบ‡เบเบฒเบ™ Open Source Calico, เป€เบŠเบดเปˆเบ‡เบ‚เบฐเบซเบเบฒเบเบŠเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡ Kubernetes APIs เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡เบ™เบฐเป‚เบเบšเบฒเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบ.

Calico เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes: เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเปเบฅเบฐเบ›เบฐเบชเบปเบšเบเบฒเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ

เบฎเบนเป‰เบˆเบฑเบ Calico: เบ—เบดเบ”เบชเบฐเบ”เบต

plugin Calico เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบš Flannel (เป‚เบ„เบ‡เบเบฒเบ™เบเปˆเบญเบ Canal) เบซเบผเบทเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”, เบเบงเบกเป€เบญเบปเบฒเบ—เบฑเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบ เปเบฅเบฐเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบžเป‰เบญเบก.

เป‚เบญเบเบฒเบ”เบญเบฑเบ™เปƒเบ”เบ—เบตเปˆเบเบฒเบ™เปƒเบŠเป‰เบงเบดเบ—เบตเปเบเป‰เป„เบ‚ K8s โ€œboxedโ€ เปเบฅเบฐ API เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบˆเบฒเบ Calico เปƒเบซเป‰?

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ NetworkPolicy:

  • เบ™เบฑเบเบเบฒเบ™เป€เบกเบทเบญเบ‡เบ–เบทเบเบˆเปเบฒเบเบฑเบ”เป‚เบ”เบเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก;
  • เบ™เบฐเป‚เบเบšเบฒเบเบ–เบทเบเบ™เบณเปƒเบŠเป‰เบเบฑเบšเบเบฑเบเบ—เบตเปˆเบกเบตเบ›เป‰เบฒเบเบเบณเบเบฑเบš;
  • เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบเบฑเบš pods, เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบซเบผเบท subnets;
  • เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบฒเบกเบฒเบ”เบ›เบฐเบเบญเบšเบกเบตเป‚เบ›เป‚เบ•เบ„เบญเบ™, เบŠเบทเปˆเบซเบผเบทเบชเบฑเบ™เบเบฒเบฅเบฑเบเบ‚เบญเบ‡เบžเบญเบ”เบชเบฐเป€เบžเบฒเบฐ.

เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™ Calico เบ‚เบฐเบซเบเบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰:

  • เบ™เบฐโ€‹เป‚เบโ€‹เบšเบฒเบโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบฑเบšโ€‹เบงเบฑเบ”โ€‹เบ–เบธโ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹: pod, containerโ€‹, virtual machine เบซเบผเบทโ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ•เบญเบšโ€‹;
  • เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบฒเบกเบฒเบ”เบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฐเป€เบžเบฒเบฐ (เบเบฒเบ™เบซเป‰เบฒเบก, เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”, เบเบฒเบ™เบ•เบฑเบ”เป„เบกเป‰);
  • เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบซเบผเบทเปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบžเบญเบ”, เบŠเปˆเบงเบ‡เบ‚เบญเบ‡เบžเบญเบ”, เป‚เบ›เป‚เบ•เบ„เบญเบ™, HTTP เบซเบผเบท ICMP attributes, IP เบซเบผเบท subnet (เบฎเบธเปˆเบ™เบ—เบต 4 เบซเบผเบท 6), เบ•เบปเบงเป€เบฅเบทเบญเบเปƒเบ”เป† (nodes, hosts, เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก);
  • เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบงเบšเบ„เบธเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ DNAT เปเบฅเบฐเบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™.

เบ—เปเบฒเบญเบดเบ” commits เบชเบธเบ” GitHub เปƒเบ™ calico repository เบงเบฑเบ™เบ—เบตเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เป€เบ”เบทเบญเบ™เบเปเบฅเบฐเบเบปเบ” 2016, เปเบฅเบฐเบซเบ™เบถเปˆเบ‡เบ›เบตเบ•เปเปˆเบกเบฒเป‚เบ„เบ‡เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ•เปเบฒเปเบซเบ™เปˆเบ‡เบ™เปเบฒเบซเบ™เป‰เบฒเปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบ Kubernetes - เบ™เบตเป‰เปเบกเปˆเบ™เบซเบผเบฑเบเบ–เบฒเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡, เป‚เบ”เบเบœเบปเบ™เบเบฒเบ™เบชเปเบฒเบซเบผเบงเบ”, เบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ”เบ The New Stack:

Calico เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes: เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเปเบฅเบฐเบ›เบฐเบชเบปเบšเบเบฒเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ

เบซเบผเบฒเบเบเบฒเบ™เปเบเป‰เป„เบ‚เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ—เบตเปˆเบกเบต K8s, เป€เบŠเบฑเปˆเบ™: Amazon EKS, Azure AKS, Google GKE เปเบฅเบฐเบ„เบปเบ™เบญเบทเปˆเบ™เป„เบ”เป‰เป€เบฅเบตเปˆเบกเปเบ™เบฐเบ™เปเบฒเบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰.

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบเบดเปˆเบ‡เปƒเบซเบเปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เบ—เบตเบกเบ‡เบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ Calico เป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฒเบ‡เบ”เบฒเบฅเบฒเบชเบฒเบ”, เปเบฅเปˆเบ™เบซเบผเบฒเบเบเบงเปˆเบฒ 50000 containers เปƒเบ™ 500 nodes เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเบ—เบตเปˆเบกเบตเบญเบฑเบ”เบ•เบฒเบเบฒเบ™เบชเป‰เบฒเบ‡ 20 containers เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต. เบšเปเปˆเบžเบปเบšเบšเบฑเบ™เบซเบฒเปƒเบ”เป†เบเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบฒเบ” เปเบฅเป‰เบงเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ›เบฐเบเบฒเบ”เบชเบฐเบšเบฑเบšเบ—เปเบฒเบญเบดเบ”. เบเบฒเบ™เบชเบถเบเบชเบฒเป€เบญเบเบฐเบฅเบฒเบ”เบ—เบตเปˆเบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบเบฑเบ‡เบขเบทเบ™เบขเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡ Calico เปเบกเปˆเบ™เบ”เบตเป€เบ—เบปเปˆเบฒเบเบฑเบš Flannel. เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™:

Calico เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes: เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเปเบฅเบฐเบ›เบฐเบชเบปเบšเบเบฒเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ

เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบเปˆเบฒเบงโ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบขเปˆเบฒเบ‡โ€‹เบงเปˆเบญเบ‡โ€‹เป„เบงโ€‹, เบกเบฑเบ™โ€‹เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบนเบ™โ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบ—เบตเปˆโ€‹เบ™เบดโ€‹เบเบปเบก K8sโ€‹, OpenShiftโ€‹, OpenStackโ€‹, เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ Calico เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบธเปˆเบกโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹. เป‚เบ„เบš, เบกเบตเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ Service Mesh (เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ เปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบš Istio).

เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฑเบš Calico

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ vanilla Kubernetes, เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ CNI เบกเบฒเบฅเบปเบ‡เบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป„เบŸเบฅเปŒ calico.yaml, เบ”เบฒเบงเป‚เบซเบผเบ”เบˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบฒเบ‡เบเบฒเบ™, เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹ kubectl apply -f.

เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบ›เบฑเปŠเบเบญเบดเบ™เบชเบฐเบšเบฑเบšเบ›เบฐเบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš Kubernetes 2-3 เบฎเบธเปˆเบ™เบซเบผเป‰เบฒเบชเบธเบ”: เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เปƒเบ™เบฎเบธเปˆเบ™เป€เบเบปเปˆเบฒเปเบกเปˆเบ™เบšเปเปˆเบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™. เบญเบตเบ‡เบ•เบฒเบกเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ, Calico เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™ Linux kernels เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡ 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. syntax เบกเบตเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบ‚เบฝเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบตเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เปƒเบ™เบฎเบนเบšเปเบšเบšเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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, เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ‚เบญเบ‡ Firewall เบเบฑเบšเบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบžเบฝเบ‡เปเบ•เปˆเบ›เปˆเบฝเบ™ action: Allow เบชเบธเบ” action: Deny.

เบเบฒเบ™เป‚เบ”เบ”เบ”เปˆเบฝเบงเป‚เบ”เบเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก

เบ•เบญเบ™เบ™เบตเป‰เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบŠเบตเป‰เบšเบญเบเบ—เบฒเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปƒเบ™ Prometheus เปเบฅเบฐเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ•เบทเปˆเบกเบญเบตเบเป‚เบ”เบเปƒเบŠเป‰ Grafana. เบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เบญเบฒเบ”เบกเบตเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบฅเบฐเบญเบฝเบ”เบญเปˆเบญเบ™, เป€เบŠเบดเปˆเบ‡เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เป„เบ”เป‰เป‚เบ”เบเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบ‚เปโ€‹เปƒเบซเป‰โ€‹เป€เบŠเบทเปˆเบญเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ™เบตเป‰โ€‹เบˆเบฒเบโ€‹เบ•เบฒ pryingโ€‹:

Calico เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes: เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเปเบฅเบฐเบ›เบฐเบชเบปเบšเบเบฒเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ

เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, Prometheus เปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ - เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™ namespace เปเบšเบšเบ™เบตเป‰:

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, syntax เบˆเบฐเป€เบ›เบฑเบ™เปเบšเบšเบ™เบตเป‰:

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 APIs เบ‚เบฐเบซเบเบฒเบเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เบกเบตเบ‚เบญเบ‡ nodes, เบšเปเปˆเบˆเปเบฒเบเบฑเบ” pods. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป‚เบ”เบเปƒเบŠเป‰ GlobalNetworkPolicy เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบœเปˆเบฒเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป ICMP เปƒเบ™ cluster เปเบกเปˆเบ™เบ›เบดเบ” (เบ•เบปเบงเบขเปˆเบฒเบ‡, pings เบˆเบฒเบ pod เบเบฑเบš node, เบฅเบฐเบซเบงเปˆเบฒเบ‡ pods, เบซเบผเบทเบˆเบฒเบ node เบเบฑเบš pod 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

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบš nodes เบเบธเปˆเบกเบ—เบตเปˆเบˆเบฐ "เป€เบญเบทเป‰เบญเบกเบญเบญเบ" เป„เบ›เบซเบฒเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™เป‚เบ”เบเบœเปˆเบฒเบ™ 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 เปเบฅเบฐ, เป€เบกเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เป„เบ”เป‰เบฎเบฑเบšเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเปˆเบญเบเบ‚เบญเบ‡เบžเบญเบ” เปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบเบธเปˆเบก. เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเปˆเบญเบเบ—เบฑเบ‡เปเบปเบ”เบ–เบทเบเบŠเบธเบเบ”เบฑเบ™เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบชเบนเบ™เป€เบชเบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป€เบกเบทเปˆเบญเบฃเบตเบชเบฐเบ•เบฒเบ” เปเบฅเบฐเบ›เปˆเบฝเบ™เบ—เบตเปˆเบขเบนเปˆ.

เบžเบญเบ”เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบกเปˆเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™ nuances เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปเบฅเบฐเป‚เบญเบ™เบกเบฑเบ™เป„เบ›เบซเบฒเบเบธเปˆเบก Kubernetes. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™ AWS LoadBalancer เบ”เบฝเบงเบเบฑเบ™เบชเปเบฒเบฅเบฑเบš UDP เบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบ—เป‰เบฒเบเบ›เบตเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เบžเบฒเบเบžเบทเป‰เบ™, เปเบฅเบฐ NodePort เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเปƒเบ™เบ—เบธเบ nodes เบ‚เบญเบ‡เบเบธเปˆเบกเปเบฅเบฐเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ‚เบฐเบซเบ™เบฒเบ”เบˆเปเบฒเบ™เบงเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเปเบฒเบฅเบฑเบš. เบˆเบธเบ”โ€‹เบ›เบฐโ€‹เบชเบปเบ‡โ€‹เบ„เบงเบฒเบกโ€‹เบ—เบปเบ™โ€‹เบ—เบฒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบ›เปˆเบฝเบ™เบŠเปˆเบงเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบžเบญเบ”...

เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบœเปˆเบฒเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเป€เบฅเบทเบญเบ:

  1. Pods เบ—เบตเปˆเบกเบต VPN เปเบกเปˆเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบ•เปเปˆ node เปƒเบ™ hostNetwork, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบเบฑเบš IP เบ•เบปเบงเบˆเบดเบ‡.
  2. เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เปเบกเปˆเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบญเบญเบโ€‹เบ™เบญเบโ€‹เป‚เบ”เบโ€‹เบœเปˆเบฒเบ™โ€‹เบเบฒเบ™โ€‹ ClusterIP. เบžเบญเบ”เป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เป‚เบซเบ™เบ”, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เบˆเบฒเบเบžเบฒเบเบ™เบญเบเบ”เป‰เบงเบเบเบฒเบ™เบˆเบญเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ (เบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ‚เบญเบ‡เบ—เบตเปˆเบขเบนเปˆ IP เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡).
  3. เบเบฒเบ™เบเปเบฒเบ™เบปเบ” node เบ—เบตเปˆ pod rose เปเบกเปˆเบ™เป€เบเบตเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เป€เบฅเบทเปˆเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” "เป€เบฅเบฑเบš" เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบขเปˆเบฒเบ‡เปเบซเบ™เป‰เบ™เบซเบ™เบฒเบเบฑเบš node เบซเบผเบทเบ‚เบฝเบ™เบšเปเบฅเบดเบเบฒเบ™ sidecar เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒเบ—เบตเปˆเบขเบนเปˆ 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 tunnels เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบ›เบฐเบซเบฅเบฒเบ”เปƒเบˆเปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Kubernetes เบ‡เปˆเบฒเบเป†เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบฎเบฒเบšเบžเบฝเบ‡. .

เบเบฒเบ™เปเบเบเบเบธเปˆเบกเป€เบžเบทเปˆเบญเบ•เบญเบšเบชเบฐเปœเบญเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เป‰เบฒเบ™เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบชเบฐเป€เปเบตเป„เบ›, เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆ Calico (เบซเบผเบทเบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™) เป€เบ‚เบปเป‰เบฒเบกเบฒเบŠเปˆเบงเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰ (เบกเบตเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เป€เบฅเบฑเบเบ™เป‰เบญเบ) เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบฅเบนเบเบ„เป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™ AWS.

PS

เบญเปˆเบฒเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™