Calico αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ KubernetesαŸ– αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž“αž·αž„αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžαž·αž…αžαž½αž…

Calico αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ KubernetesαŸ– αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž“αž·αž„αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžαž·αž…αžαž½αž…

αž‚αŸ„αž›αž”αŸ†αžŽαž„αž“αŸƒαž’αžαŸ’αžαž”αž‘αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαžŽαŸ‚αž“αžΆαŸ†αž’αŸ’αž“αž€αž’αžΆαž“αž’αŸ†αž–αžΈαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž”αžŽαŸ’αžαžΆαž‰ αž“αž·αž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αž€αŸαžŠαžΌαž…αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Calico αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈαžŠαŸ‚αž›αž–αž„αŸ’αžšαžΈαž€αžŸαž˜αžαŸ’αžαž—αžΆαž–αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαŸ” αž“αŸ…αžαžΆαž˜αž•αŸ’αž›αžΌαžœ αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž“αž·αž„αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž–αžΈαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžšαž αŸαžŸαž…αŸ†αž–αŸ„αŸ‡αž§αž”αž€αžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes

αž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αž˜αž·αž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αžšαž˜αŸƒαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž”αžŽαŸ’αžαžΆαž‰αž‘αŸαŸ” αž™αžΎαž„β€‹αž”αžΆαž“β€‹αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–β€‹αž―αž€αžŸαžΆαžšβ€‹αž›αžΎβ€‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“β€‹αžšαž”αžŸαŸ‹β€‹αž–αž½αž€αž‚αŸβ€‹αžšαž½αž…β€‹αž αžΎαž™αŸ– "αž˜αž‚αŸ’αž‚αž»αž‘αŸ’αž‘αŸαžŸαž€αŸαž”αž„αŸ’αž αžΆαž‰αž’αŸ†αž–αžΈαž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes"αž αžΎαž™"αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–"αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž”αž‘αž“αŸƒαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αžœαžΆαž‡αžΆαžšαžΏαž„αžŸαŸ†αžαžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆ K8s αžαŸ’αž›αž½αž“αžœαžΆαž˜αž·αž“αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αžšαžœαžΆαž„αž€αž»αž„αžαžΊαž“αŸαžš αž“αž·αž„αžαŸ’αž“αžΆαŸ†αž„αž‘αŸαŸ– αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž•αŸ’αžŸαŸαž„αŸ— αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ CNI (αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αžŽαŸ’αžαžΆαž‰αž€αž»αž„αžαžΊαž“αŸαžš) αŸ” αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž’αŸ†αž–αžΈαž‚αŸ†αž“αž·αžαž“αŸαŸ‡αž™αžΎαž„ αž–αž½αž€αž‚αŸαž€αŸαž”αžΆαž“αž”αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αžŠαŸ‚αžšαŸ”.

αž§αž‘αžΆαž αžšαžŽαŸ αž’αž˜αŸ’αž˜αžαžΆαž”αŸ†αž•αž»αžαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊ Flannel β€” αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αž–αŸαž‰αž›αŸαž‰αžšαžœαžΆαž„αžαŸ’αž“αžΆαŸ†αž„αž…αž„αŸ’αž€αŸ„αž˜αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ„αž™αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αžŸαŸ’αž–αžΆαž“αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αž“αžΈαž˜αž½αž™αŸ— αžŠαŸ„αž™αž€αŸ†αžŽαžαŸ‹αž”αžŽαŸ’αžαžΆαž‰αžšαž„αž‘αŸ…αžœαžΆαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž›αž‘αŸ’αž’αž—αžΆαž–αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αŸαž‰αž›αŸαž‰ αž“αž·αž„αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αžΊαž˜αž·αž“αžαŸ‚αž„αžαŸ‚αž˜αžΆαž“αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž—αžΆαž–αž―αž€αŸ„αžαž·αž…αžαž½αž…αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž’αž“αŸ’αžαžšαžΆαž‚αž˜αž“αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‘αžΌαž‘αŸ… αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžšαž”αžŸαŸ‹ CNI αžŠαžΌαž…αž‚αŸ’αž“αžΆ αžŠαŸ‚αž›αž“αŸαŸ‡αž‡αžΆαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αž’αž“αŸ’αžαžšαžΆαž‚αž˜αž“αŸαž—αžΆαž‚αžΈαž‘αžΈαž”αžΈαž“αŸ…αž€αŸ’αž“αž»αž„ iptables αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž€αžŸαŸ’αžšαžΆαž™αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž¬αž˜αž·αž“αž’αžΎαž–αžΎαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ”

αž αžΎαž™ "αž€αŸ’αžšαŸ…αž”αŸ’αžšαž’αž”αŸ‹" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“ NetworkPolicy API. αž’αž“αž’αžΆαž“αž“αŸαŸ‡ αž…αŸ‚αž€αž…αžΆαž™αž›αžΎαž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ αž’αžΆαž…αž˜αžΆαž“αž…αŸ’αž”αžΆαž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ‚αž„αž…αŸ‚αž€αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αž½αž™αž‘αŸ…αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αž½αž™αž‘αŸ€αžαŸ” αžœαžΆαž€αŸαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžšαžœαžΆαž„ pods αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αž”αžšαž·αžŸαŸ’αžαžΆαž“ (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 αž”αŸ’αžšαž—αŸαž‘: αž…αžΌαž›αž•αž (αž…αžΌαž›) αž“αž·αž„αž…αŸαž‰αž–αžΈαžœαžΆ (αž’αŸŠαžΈαž αŸ’αž‚αŸαžŸ) αŸ”

Calico αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ KubernetesαŸ– αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž“αž·αž„αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžαž·αž…αžαž½αž…

αžαžΆαž˜β€‹αž–αž·αž αž“αž™αŸ„αž”αžΆαž™β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ‚αž„β€‹αž…αŸ‚αž€β€‹αž‡αžΆβ€‹αŸ’β€‹αž”αŸ’αžšαž—αŸαž‘β€‹αž“αŸαŸ‡ αžŠαŸ„αž™β€‹αž•αŸ’αž’αŸ‚αž€β€‹αž›αžΎβ€‹αž‘αž·αžŸαžŠαŸ…β€‹αž“αŸƒβ€‹αž…αž›αž“αžΆαŸ”

αž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊαž§αž”αž€αžšαžŽαŸαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ; αž’αŸ’αž“αž€αžŠαŸ‚αž›αž…αŸ’αž”αžΆαž”αŸ‹αž’αž“αž»αžœαžαŸ’αžαŸ” αž“αŸαŸ‡αž’αžΆαž…αž‡αžΆ pods (αž¬αž€αŸ’αžšαž»αž˜αž“αŸƒ pods) αž¬αž”αžšαž·αžŸαŸ’αžαžΆαž“ (ឧ. αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡)αŸ” αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαžŸαŸ†αžαžΆαž“αŸ‹αŸ– αž”αŸ’αžšαž—αŸαž‘αž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸƒαžœαžαŸ’αžαž»αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αžŸαŸ’αž›αžΆαž€ (αžŸαŸ’αž›αžΆαž€ αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž€αŸ’αž™αžŸαŸαž–αŸ’αž‘ Kubernetes) - αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž–αžΆαž€αŸ’αž™αžŠαŸ‚αž›αž’αŸ’αž“αž€αž“αž™αŸ„αž”αžΆαž™αž’αŸ’αžœαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‡αžΆαž˜αž½αž™αŸ”

αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž…αŸ†αž“αž½αž“αž€αŸ†αžŽαžαŸ‹αž“αŸƒαž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ‚αž›αžšαž½αž”αžšαž½αž˜αžŠαŸ„αž™αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαžŸαŸ’αž›αžΆαž€αž˜αž½αž™αž…αŸ†αž“αž½αž“ αžœαžΆαž’αžΆαž…αžŸαžšαžŸαŸαžšαž…αŸ’αž”αžΆαž”αŸ‹αžŠαžΌαž…αž‡αžΆ "αž’αž“αž»αž‰αŸ’αž‰αžΆαž/αž”αžŠαž·αžŸαŸαž’αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„/αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆ" αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ” αž…αŸ†αž–αŸ„αŸ‡αž‚αŸ„αž›αž”αŸ†αžŽαž„αž“αŸαŸ‡ αžŸαŸ†αžŽαž„αŸ‹αž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ–

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

β€” αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž“αŸαŸ‡ αž•αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αžŸαŸ’αžαžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαžΆαžšαžΆαŸ†αž„αž–αžΈαž…αžšαžΆαž…αžšαžŽαŸαž…αžΌαž›αŸ” αž’αžΆαž€αž”αŸ’αž”αž€αž·αžšαž·αž™αžΆαž•αŸ’αž‘αž»αž™αž’αžΆαž…αžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

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

αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αŸαž‰:

  podSelector: {}
  policyTypes:
  - Egress

- αžŠαžΎαž˜αŸ’αž”αžΈαž”αž·αž‘αžœαžΆαŸ” αž αžΎαž™αž“αŸαŸ‡αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αŸ–

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

αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ CNI αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž…αž„αŸ’αž€αŸ„αž˜αžœαžΆαž‚αž½αžšαž’αŸ„αž™αž€αžαŸ‹αžŸαŸ†αž‚αžΆαž›αŸ‹ αž˜αž·αž“αž˜αŸ‚αž“αž‚αŸ’αžšαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž”αžŽαŸ’αžαžΆαž‰αž‚αžΆαŸ†αž‘αŸ’αžš NetworkPolicy αž‘αŸαŸ”. αž§αž‘αžΆαž αžšαžŽαŸ Flannel αžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αžšαžΆαž”αŸ‹αžšαž½αž…αž αžΎαž™ αž˜αž·αž“αžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž“αž·αž™αžΆαž™αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹ αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž•αŸ’αž›αžΌαžœαž€αžΆαžšαŸ” αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αž€αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αž•αž„αžŠαŸ‚αžš - αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  αž€αžΆαž›αžΈαž€αžΌαŸ”αžŠαŸ‚αž›αž–αž„αŸ’αžšαžΈαž€αž™αŸ‰αžΆαž„αžŸαŸ†αžαžΆαž“αŸ‹αž“αžΌαžœαžŸαŸ†αžŽαž»αŸ†αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž“αŸƒ Kubernetes APIs αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αŸ”

Calico αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ KubernetesαŸ– αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž“αž·αž„αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžαž·αž…αžαž½αž…

αžŸαŸ’αž‚αžΆαž›αŸ‹ Calico: αž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈ

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Calico αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™ Flannel (αž‚αž˜αŸ’αžšαŸ„αž„αžšαž„ αž”αŸ’αžšαž‘αžΆαž™) αž¬αžŠαŸ„αž™αž―αž€αžšαžΆαž‡αŸ’αž™ αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž‘αžΆαŸ†αž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰ αž“αž·αž„αžŸαž˜αžαŸ’αžαž—αžΆαž–αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž—αžΆαž–αž’αžΆαž…αžšαž€αž”αžΆαž“αŸ”

αžαžΎαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ "αž”αŸ’αžšαž’αž”αŸ‹" K8s αž“αž·αž„ API αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž–αžΈ Calico αž•αŸ’αžαž›αŸ‹αž±αž€αžΆαžŸαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡?

αž“αŸαŸ‡αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ NetworkPolicyαŸ–

  • αž’αŸ’αž“αž€αž“αž™αŸ„αž”αžΆαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž”αžšαž·αžŸαŸ’αžαžΆαž“αŸ”
  • αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αž•αžαžƒαŸ‚αžšαžŠαŸ‚αž›αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŠαŸ„αž™αžŸαŸ’αž›αžΆαž€αŸ”
  • αž…αŸ’αž”αžΆαž”αŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž‘αŸ… pods αž”αžšαž·αžŸαŸ’αžαžΆαž“ αž¬αž”αžŽαŸ’αžαžΆαž‰αžšαž„αŸ”
  • αž…αŸ’αž”αžΆαž”αŸ‹αž’αžΆαž…αž˜αžΆαž“αž–αž·αž’αžΈαž€αžΆαžš αžˆαŸ’αž˜αŸ„αŸ‡ αž¬αž›αž€αŸ’αžαžŽαŸˆαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž…αŸ’αžšαž€αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαŸ”

αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž› Calico αž–αž„αŸ’αžšαžΈαž€αž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ–

  • αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αžœαžαŸ’αžαž»αžŽαžΆαž˜αž½αž™αŸ– αž•αž αž€αž»αž„αžαžΊαž“αŸαžš αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž αž¬αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αŸ”
  • αž…αŸ’αž”αžΆαž”αŸ‹αž’αžΆαž…αž˜αžΆαž“αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™ (αž€αžΆαžšαž αžΆαž˜αžƒαžΆαžαŸ‹ αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž αž€αžΆαžšαž€αžΆαž”αŸ‹αžˆαžΎ);
  • αž‚αŸ„αž›αžŠαŸ… αž¬αž”αŸ’αžšαž—αž–αž“αŸƒαž…αŸ’αž”αžΆαž”αŸ‹αž’αžΆαž…αž‡αžΆαž…αŸ’αžšαž€ αž‡αž½αžšαž“αŸƒαž…αŸ’αžšαž€ αž–αž·αž’αžΈαž€αžΆαžš αž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆ HTTP ឬ ICMP IP αž¬αž”αžŽαŸ’αžαžΆαž‰αžšαž„ (αž‡αŸ†αž“αžΆαž“αŸ‹αž‘αžΈ 4 αž¬αž‘αžΈ 6) αž§αž”αž€αžšαžŽαŸαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŽαžΆαž˜αž½αž™ (αžαŸ’αž“αžΆαŸ†αž„ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž”αžšαž·αžŸαŸ’αžαžΆαž“) αŸ”
  • αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αž αž’αŸ’αž“αž€αž’αžΆαž…αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž“αŸƒαž…αžšαžΆαž…αžšαžŽαŸαžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ DNAT αž“αž·αž„αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαž…αžšαžΆαž…αžšαžŽαŸαŸ”

αž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαž›αžΎαž€αžŠαŸ†αž”αžΌαž„αž“αŸ…αž›αžΎ GitHub αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„ Calico αž˜αžΆαž“αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘αžαŸ’αžšαž‘αž”αŸ‹αž‘αŸ…αžαŸ‚αž€αž€αŸ’αž€αžŠαžΆ αž†αŸ’αž“αžΆαŸ† 2016 αž αžΎαž™αž˜αž½αž™αž†αŸ’αž“αžΆαŸ†αž€αŸ’αžšαŸ„αž™αž˜αž€ αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž”αžΆαž“αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αž˜αž»αžαžαŸ†αžŽαŸ‚αž„αžˆαžΆαž“αž˜αž»αžαž‚αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰ Kubernetes - αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ„αž™αž›αž‘αŸ’αž’αž•αž›αžŸαŸ’αž‘αž„αŸ‹αž˜αžαž·αŸ” αžŠαžΉαž€αž“αžΆαŸ†αžŠαŸ„αž™ The New Stack:

Calico αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ KubernetesαŸ– αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž“αž·αž„αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžαž·αž…αžαž½αž…

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ‚αž›αž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž’αŸ†αŸ—αž‡αžΆαž…αŸ’αžšαžΎαž“αž‡αžΆαž˜αž½αž™ K8s αžŠαžΌαž…αž‡αžΆ αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“ Amazon EX, Azure AKS, Google GKE αž“αž·αž„αž’αŸ’αž“αž€αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŽαŸ‚αž“αžΆαŸ†αžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαž˜αŸ’αžαŸ‚αž„ αž’αŸ’αžœαžΈαŸ—αž‚αžΊαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ” αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αž•αž›αž·αžαž•αž›αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Calico αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžΆαžšαžΆαžŸαžΆαžŸαŸ’αžαŸ’αžš αžŠαŸ„αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž„ 50000 αž€αž»αž„αžαžΊαž“αŸαžšαž›αžΎαžαŸ’αž“αžΆαŸ†αž„ 500 αžŠαŸ‚αž›αž˜αžΆαž“αž’αžαŸ’αžšαžΆαž”αž„αŸ’αž€αžΎαž 20 αž’αž»αž„αž€αŸ’αž“αž»αž„αž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈαŸ” αž˜αž·αž“αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αž‘αŸαŸ” αž›αž‘αŸ’αž’αž•αž›αž”αŸ‚αž”αž“αŸαŸ‡ αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸ αžšαž½αž…αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαž“αŸƒαž€αŸ†αžŽαŸ‚αžŠαŸ†αž”αžΌαž„αŸ” αž€αžΆαžšαžŸαž·αž€αŸ’αžŸαžΆαž―αž€αžšαžΆαž‡αŸ’αž™αžŠαŸ‚αž›αž•αŸ’αžαŸ„αžαž›αžΎαž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“ αž“αž·αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž’αžΆαž“αž€αŸαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž•αž„αžŠαŸ‚αžšαžαžΆ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž”αžŸαŸ‹ Calico αž‚αžΊαžŸαŸ’αž‘αžΎαžšαžαŸ‚αž›αŸ’αž’αžŠαžΌαž… Flannel αžŠαŸ‚αžšαŸ” αž§αž‘αžΆαž αžšαžŽαŸ:

Calico αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ KubernetesαŸ– αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž“αž·αž„αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžαž·αž…αžαž½αž…

αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž€αŸ†αž–αž»αž„αž’αž—αž·αžœαžŒαŸ’αžαž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αžœαžΆαž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž„αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αžŠαŸ‚αž›αž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ K8s, OpenShift, OpenStack αžœαžΆαž’αžΆαž…αž”αŸ’αžšαžΎ Calico αž“αŸ…αž–αŸαž›αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž…αž„αŸ’αž€αŸ„αž˜αžŠαŸ„αž™αž”αŸ’αžšαžΎ αž‘αžΆαžαŸ‹αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž™αŸ„αž„αž‘αŸ…αž›αžΎαž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αž”αžŽαŸ’αžαžΆαž‰ Service Mesh (αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αŸ” αž”αŸ’αžšαžΎαž‡αžΆαž˜αž½αž™ Istio) αŸ”

αž αŸ’αžœαžΉαž€αž αžΆαžαŸ‹αž‡αžΆαž˜αž½αž™ Calico

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‘αžΌαž‘αŸ…αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžœαŸ‰αžΆαž“αžΈαž‘αžΆ Kubernetes αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ CNI αž˜αž€αž›αžΎαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž―αž€αžŸαžΆαžš calico.yaml, αž‘αžΆαž‰αž™αž€αž–αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžšαž•αŸ’αž›αžΌαžœαž€αžΆαžš, αžŠαŸ„αž™αž”αŸ’αžšαžΎ kubectl apply -f.

αžαžΆαž˜αž€αŸ’αž”αž½αž“αž˜αž½αž™ αž€αŸ†αžŽαŸ‚αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‚αžΊαžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž€αŸ†αžŽαŸ‚ 2-3 αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαžšαž”αžŸαŸ‹ KubernetesαŸ– αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž…αžΆαžŸαŸ‹αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„ αž“αž·αž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αžΆαž‘αŸαŸ” αž™αŸ„αž„αžαžΆαž˜αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Calico αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž›αžΎαžŸαž–αžΈ 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

αžŸαŸ†αžŽαž„αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αžšαžΆαž”αŸ‹αžαžΆαž„αž›αžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž αž¬αž”αžŠαž·αžŸαŸαž’αž…αžšαžΆαž…αžšαžŽαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαžΆαž˜αžšαž™αŸˆ NetworkPolicy API αž’αž˜αŸ’αž˜αžαžΆαž˜αžΆαž“αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαž„αŸ‹αž€αŸ’αžšαž…αž€αžŠαŸ‚αž›αž–αž·αž”αžΆαž€αž™αž›αŸ‹ αž“αž·αž„αž…αž„αž…αžΆαŸ†αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈ 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 αž”αž“αŸ’αžαŸ‚αž˜

αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžšαŸ†αž›αžΉαž€αž’αŸ’αž“αž€αžαžΆ αžαžΆαž˜αžšαž™αŸˆαžŸαŸ†αžŽαž»αŸ†αž”αž“αŸ’αžαŸ‚αž˜αž“αŸƒ Calico APIs αž’αŸ’αž“αž€αž’αžΆαž…αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž—αžΆαž–αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸƒ nodes αž˜αž·αž“αž€αŸ†αžŽαžαŸ‹αž…αŸ†αž–αŸ„αŸ‡ pods αž“αŸ„αŸ‡αž‘αŸαŸ” αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŠαŸ„αž™αž”αŸ’αžšαžΎ GlobalNetworkPolicy αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αžŸαŸ†αžŽαžΎ ICMP αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘ (αž§αž‘αžΆαž αžšαžŽαŸ pings αž–αžΈ pods αž‘αŸ… node αžšαžœαžΆαž„ pods αž¬αž–αžΈ node αž‘αŸ… 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

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžαžΆαž„αž›αžΎ αžœαžΆαž“αŸ…αžαŸ‚αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž“αžΆαŸ†αž„αž…αž„αŸ’αž€αŸ„αž˜αžŠαžΎαž˜αŸ’αž”αžΈ "αžˆαžΆαž“αžŠαž›αŸ‹" αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αžαžΆαž˜αžšαž™αŸˆ 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. Pods αž‡αžΆαž˜αž½αž™ VPN αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž–αŸαž›αž€αŸ’αž“αž»αž„αž˜αž½αž™ node αž€αŸ’αž“αž»αž„ 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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹