αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž…αŸ†αžŽαžΆαŸ†αŸ” αž”αž€αž”αŸ’αžšαŸ‚αŸ– αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž’αžαŸ’αžαž”αž‘ - Reuven Harrison - αž˜αžΆαž“αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž‡αžΆαž„ 20 αž†αŸ’αž“αžΆαŸ†αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž αžΎαž™αžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡αž‚αžΊαž‡αžΆ CTO αž“αž·αž„αž‡αžΆαžŸαž αžŸαŸ’αžαžΆαž”αž“αž·αž€αž“αŸƒ Tufin αžŠαŸ‚αž›αž‡αžΆαž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αžŸαž“αŸ’αžαž·αžŸαž»αžαŸ” αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž‚αžΆαžαŸ‹αž…αžΆαžαŸ‹αž‘αž»αž€αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžαžΆαž˜αžΆαž“αžαžΆαž˜αž–αž›αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ‚αž„αž…αŸ‚αž€αž”αžŽαŸ’αžαžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αž˜αž½αž™ αž‚αžΆαžαŸ‹αž€αŸαž‡αžΏαž‡αžΆαž€αŸ‹αžαžΆαžœαžΆαž˜αž·αž“αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αŸ” αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž“αŸαŸ‡ (αž‡αžΆαž–αž“αŸ’αž›αžΊ) αž˜αžΆαž“αž‚αŸ„αž›αž”αŸ†αžŽαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž“αžΌαžœαž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž―αž€αž‘αŸαžŸαž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž“αž·αž„αž‡αž½αž™αž–αž½αž€αž‚αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ”

αžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡ αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ†αž–αž»αž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ Kubernetes αž€αžΆαž“αŸ‹αžαŸ‚αžαŸ’αž›αžΆαŸ†αž„αž‘αžΎαž„ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αž…αŸ†αžŽαžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸαŸ‡αž‚αžΊαžαŸ’αž–αžŸαŸ‹αžŽαžΆαžŸαŸ‹ αžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αž›αŸ‡αž αŸ… Kubernetes ថអ "αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αž˜αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž‡αŸ’αžˆαž˜αžŽαŸ’αžŒαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™"αŸ” αž”αž“αŸ’αžαž·αž…αž˜αŸ’αžŠαž„αŸ— Kubernetes (ឬ k8s) αž€αŸ†αž–αž»αž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž™αž›αŸ‹αžαžΆαž‡αžΆαž•αŸ’αž“αŸ‚αž€αžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜ αžŠαŸ‚αž›αž‘αžΆαž˜αž‘αžΆαžšαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž˜αžΆαž“αž—αžΆαž–αž…αžΆαžŸαŸ‹αž‘αž»αŸ† αžšαž½αž˜αž‘αžΆαŸ†αž„αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž”αžŽαŸ’αžαžΆαž‰αž•αž„αžŠαŸ‚αžšαŸ”

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

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

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes

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

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžšαžœαžΆαž„αž•αž

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

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰

αžŠαžΌαž…αž‡αžΆαž’αž“αž’αžΆαž“ Kubernetes αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ YAML αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ balance αž”αžΎαž€αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎ postgres:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: balance
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

(αž…αŸ†αžŽαžΆαŸ†αŸ” αž”αž€αž”αŸ’αžšαŸ‚αŸ– αžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹αž“αŸαŸ‡ αžŠαžΌαž…αž‡αžΆαžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸ Kubernetes αžŠαžΎαž˜αž‘αžΎαž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸ Tufin Orca αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž’αžαŸ’αžαž”αž‘αžŠαžΎαž˜ αž αžΎαž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαžŸαž˜αŸ’αž—αžΆαžšαŸˆαŸ”)

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

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ YAML αžŸαžΌαž˜αž”αŸ’αžšαžΎ kubectlαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αŸ–

kubectl create -f policy.yaml

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰

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

  1. podSelectorαŸ– αž€αŸ†αžŽαžαŸ‹ pods αžŠαŸ‚αž›αžšαž„αž•αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαŸ„αž™αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸαŸ‡ (αž‚αŸ„αž›αžŠαŸ…) - αž‘αžΆαž˜αž‘αžΆαžš;
  2. policyTypesαŸ– αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αŸαŸ‡αŸ– ingress αž“αž·αž„/ឬ egress - αžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžœαžΆαž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ’αžšαž”αŸ‹αž€αžšαžŽαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”
  3. ingressαŸ– αž€αŸ†αžŽαžαŸ‹αž’αž“αž»αž‰αŸ’αž‰αžΆαž αž…αžΌαž› αž…αžšαžΆαž…αžšαžŽαŸαž‘αŸ…αž€αžΆαž“αŸ‹αž‚αŸ„αž›αžŠαŸ… pods - αžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αž;
  4. egressαŸ– αž€αŸ†αžŽαžαŸ‹αž’αž“αž»αž‰αŸ’αž‰αžΆαž αž…αŸαž‰ αž…αžšαžΆαž…αžšαžŽαŸαž–αžΈ pods αž‚αŸ„αž›αžŠαŸ…αž‚αžΊαžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αžαŸ”

αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αžŠαŸ‚αž›αž”αžΆαž“αžαŸ’αž…αžΈαž–αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžš Kubernetes (αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‡αŸ†αž“αž½αžŸ role αž“αŸ…αž›αžΎ app) αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž’αžΆαžαž»αž‘αžΆαŸ†αž„αž”αž½αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:    # <<<
    matchLabels:
      app: 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

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–
αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž…αŸ†αžŽαžΆαŸ†αžαžΆαžœαžΆαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž’αžΆαžαž»αž‘αžΆαŸ†αž„αž”αž½αž“αž“αŸ„αŸ‡αž‘αŸαŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ podSelectorαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžαžΆαž˜αž€αžΆαžšαž…αž„αŸ‹αž”αžΆαž“αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž›αž»αž”αž…αŸ„αž› policyTypesαž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž€αžŸαŸ’αžšαžΆαž™αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

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

αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„αž€αŸ†αž αž»αžŸαžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ† αžαŸ‚αž„αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹ policyTypes.

αž™αŸ„αž„αžαžΆαž˜αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžαžΆαž„αž›αžΎαž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš ingress αž“αž·αž„ / αž¬αŸ” egress αž”αžΆαž“αž›αž»αž”αž…αŸ„αž› αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž“αžΉαž„αž”αžŠαž·αžŸαŸαž’αžšαžΆαž›αŸ‹αž…αžšαžΆαž…αžšαžŽαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ (αžŸαžΌαž˜αž˜αžΎαž› "Sweep Rule" αžαžΆαž„αž€αŸ’αžšαŸ„αž˜)αŸ”

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ - αž’αž“αž»αž‰αŸ’αž‰αžΆαž

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

αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡

Namespaces αž‚αžΊαž‡αžΆαž™αž“αŸ’αžαž€αžΆαžšαžŸαž αž€αžΆαžš Kubernetes αŸ” αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž‰αŸ‚αž€αž”αžšαž·αž™αžΆαž€αžΆαžŸαž‘αžΌαž‡αžΈαžαž›αž–αžΈαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžšαžœαžΆαž„αž…αž“αŸ’αž›αŸ„αŸ‡αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ”

αžŠαžΌαž…αžŸαž˜αžΆαžŸαž’αžΆαžαž» Kubernetes αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αžŠαŸ‚αžš αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αžšαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€ metadata αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αžαžΆβ€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αž˜αž½αž™β€‹αžŽαžΆβ€‹αžŠαŸ‚αž›β€‹αž‚αŸ„αž›αž€αžΆαžšαžŽαŸβ€‹αž‡αžΆβ€‹αžšαž”αžŸαŸ‹αŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: my-namespace  # <<<
spec:
...

αž”αŸ’αžšαžŸαž·αž“β€‹αž”αžΎβ€‹αž‘αŸ†αž αŸ†β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž˜αž·αž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αž…αŸ’αž”αžΆαžŸαŸ‹β€‹αž›αžΆαžŸαŸ‹β€‹αž€αŸ’αž“αž»αž„β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αž˜αŸαžαžΆβ€‹αž‘αŸ αž”αŸ’αžšαž–αŸαž“αŸ’αž’β€‹αž“αžΉαž„β€‹αž”αŸ’αžšαžΎβ€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αž€αŸ’αž“αž»αž„ kubectl (αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ namespace=default):

kubectl apply -n my-namespace -f namespace.yaml

αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ† αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αž›αŸ†αž β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž±αŸ’αž™β€‹αž…αŸ’αž”αžΆαžŸαŸ‹αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚αž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αžŸαžšαžŸαŸαžšαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αžŠαŸ…αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αŸ”

មេ αž’αžΆαžαž» podSelector αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αžΉαž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ pods αž–αžΈ namespace αžŠαŸ‚αž›αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž‡αžΆαž€αž˜αŸ’αž˜αžŸαž·αž‘αŸ’αž’αž· (αžœαžΆαž˜αž·αž“αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎ pods αž–αžΈ namespace αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸ)αŸ”

αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžš podSelectors αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€ ingress αž“αž·αž„ egress αž’αžΆαž…αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ pods αž–αžΈ namespace αž•αŸ’αž‘αžΆαž›αŸ‹αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚αž’αŸ’αž“αž€αž”αž‰αŸ’αž…αžΌαž›αž–αž½αž€αžœαžΆαž‡αžΆαž˜αž½αž™ namespaceSelector (αžœαžΆβ€‹αž“αžΉαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž–αž·αž—αžΆαž€αŸ’αžŸαžΆβ€‹αž“αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž•αŸ’αž“αŸ‚αž€ "αžαž˜αŸ’αžšαž„β€‹αžαžΆαž˜β€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αžˆαŸ’αž˜αŸ„αŸ‡ αž“αž·αž„β€‹αž•αž")αŸ”

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž€αŸ†αžŽαžαŸ‹αžˆαŸ’αž˜αŸ„αŸ‡

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

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

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres  # <<<
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αžŸαŸ’αž›αžΆαž€

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

podSelector:
  matchLabels:
    role: db

… ឬ αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž’αž“αž»αžœαžαŸ’αžαŸ” αž§αž‘αžΆαž αžšαžŽαŸαž“αŸαŸ‡αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ pods αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ namespaces αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αž›αžΆαž€αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ–

namespaceSelector:
  matchLabels:
    project: myproject

αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αž˜αž½αž™: αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ namespaceSelector αžŸαžΌαž˜αž”αŸ’αžšαžΆαž€αžŠαžαžΆ αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž˜αžΆαž“αžŸαŸ’αž›αžΆαž€αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ”. αžαŸ’αžšαžΌαžœβ€‹αžŠαžΉαž„β€‹αžαžΆβ€‹αž˜αžΆαž“β€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž‘αžΎαž„β€‹αžŠαžΌαž…β€‹αž‡αžΆβ€‹ default ΠΈ kube-systemαž˜αž·αž“β€‹αž˜αžΆαž“β€‹αžŸαŸ’αž›αžΆαž€β€‹αžαžΆαž˜β€‹αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αžŸαŸ’αž›αžΆαž€αž‘αŸ…αž…αž“αŸ’αž›αŸ„αŸ‡αžŠαžΌαž…αž“αŸαŸ‡αŸ–

kubectl label namespace default namespace=default

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ metadata αž‚αž½αžšβ€‹αž™αŸ„αž„β€‹αž‘αŸ…β€‹αž›αžΎβ€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž–αž·αžβ€‹αž“αŸƒβ€‹αž›αŸ†αž β€‹αž˜αž·αž“β€‹αž˜αŸ‚αž“β€‹αžŸαŸ’αž›αžΆαž€β€‹:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default   # <<<
spec:
...

αž”αŸ’αžšαž—αž– αž“αž·αž„αž‘αž·αžŸαžŠαŸ…

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αž˜αžΆαž“αž…αŸ’αž”αžΆαž”αŸ‹αž”αŸ’αžšαž—αž– αž“αž·αž„αž‘αž·αžŸαžŠαŸ…αŸ” αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž€αŸ’αž“αž»αž„αž˜αž½αž™αž‚αŸ„αž›αžŠαŸ… αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž•αžαžƒαŸ‚αžšαžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž’αž“αž»αžœαžαŸ’αž αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž€αŸ†αžŽαžαŸ‹αž…αŸ’αž”αžΆαž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΌαž› αž“αž·αž„/αž¬αž…αžšαžΆαž…αžšαž…αžΌαž›αŸ” αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„ αž‚αŸ„αž›αžŠαŸ…αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž“αžΉαž„αž‡αžΆαž•αžαžƒαŸ‚αžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ namespace default αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ’αž›αžΆαž€αžŸαž‰αŸ’αž‰αžΆαž‚αž“αŸ’αž›αžΉαŸ‡ app αž“αž·αž„αž’αžαŸ’αžαž“αŸαž™ db:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: 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

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–
αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

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

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž“αŸαŸ‡αž‚αžΊαžŸαŸ’αž˜αžΎαž“αžΉαž„αž…αŸ’αž”αžΆαž”αŸ‹αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αž–αžΈαžšαŸ– Ingress β†’ Target; αž‚αŸ„αž›αžŠαŸ… β†’ Egress αŸ”

Egress αž“αž·αž„ DNS (αžŸαŸ†αžαžΆαž“αŸ‹!)

αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž…αžšαžΆαž…αžšαžŽαŸαž…αŸαž‰ αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž‡αžΆαž–αž·αžŸαŸαžŸαž…αŸ†αž–αŸ„αŸ‡ DNS - Kubernetes αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‘αŸ…αž€αžΆαž“αŸ‹αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž’αŸ’αž“αž€αž˜αž·αž“αž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ balance αž…αžΌαž›αž”αŸ’αžšαžΎ DNSαŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  policyTypes:
  - Egress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž’αŸ’αž“αž€αž’αžΆαž…αž‡αž½αžŸαž‡αž»αž›αžœαžΆαž”αžΆαž“αžŠαŸ„αž™αž”αžΎαž€αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ DNSαŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:               # <<<
    ports:            # <<<
    - protocol: UDP   # <<<
      port: 53        # <<<
  policyTypes:
  - Egress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž’αžΆαžαž»αž…αž»αž„αž€αŸ’αžšαŸ„αž™ to αž‚αžΊαž‘αž‘αŸ αž αžΎαž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αž”αŸ’αžšαž™αŸ„αž›αŸ” pods αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ namespaces αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”, αž’αž“αž»αž‰αŸ’αž‰αžΆαž balance αž•αŸ’αž‰αžΎαžŸαŸ†αžŽαž½αžš DNS αž‘αŸ…αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ Kubernetes αžŠαŸ‚αž›αžŸαž˜αžŸαŸ’αžšαž” (αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž›αŸ†αž  kube-system).

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž– αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž αž½αžŸαž αŸαžαž» αž“αž·αž„αž’αžŸαž“αŸ’αžαž·αžŸαž»αžαž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†αžŸαŸ†αžŽαž½αžš DNS αž“αŸ…αžαžΆαž„αž€αŸ’αžšαŸ…αž…αž„αŸ’αž€αŸ„αž˜αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ‚αž›αž˜αŸ’αž’αžœαžΆαž€αŸ’αž“αž»αž„αž”αžΈαž‡αŸ†αž αžΆαž“αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆαŸ”

1. αž’αž“αž»αž‰αŸ’αž‰αžΆαžαžαŸ‚αžŸαŸ†αžŽαž½αžš DNS αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ αž…αž„αŸ’αž€αŸ„αž˜αžŠαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜ namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:
    - namespaceSelector: {} # <<<
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

2. αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžŸαŸ†αžŽαž½αžš DNS αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„ namespace αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” kube-system.

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αžŸαŸ’αž›αžΆαž€αž˜αž½αž™αž‘αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡ kube-system: kubectl label namespace kube-system namespace=kube-system - αž αžΎαž™αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŠαŸ„αž™αž”αŸ’αžšαžΎ namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:
    - namespaceSelector:         # <<<
        matchLabels:             # <<<
          namespace: kube-system # <<<
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

3. αž˜αž“αž»αžŸαŸ’αžŸ Paranoid αž’αžΆαž…αž‘αŸ…αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž αž“αž·αž„αžŠαžΆαž€αŸ‹αž€αž˜αŸ’αžšαž·αžαž›αžΎαžŸαŸ†αžŽαžΎ DNS αž‘αŸ…αž€αžΆαž“αŸ‹αžŸαŸαžœαžΆ DNS αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ kube-system. αž•αŸ’αž“αŸ‚αž€ "Filter by Namespaces AND Pods" αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž’αŸ’αž“αž€αž–αžΈαžšαž”αŸ€αž”αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αŸ”

αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αž‘αŸ€αžαž‚αžΊαžαŸ’αžšαžΌαžœαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ DNS αž“αŸ…αž€αž˜αŸ’αžšαž·αž namespace αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αžœαžΆαž“αžΉαž„αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αžΎαž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΆαž›αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‘αŸαŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.dns
  namespace: default
spec:
  podSelector: {} # <<<
  egress:
  - to:
    - namespaceSelector: {}
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

αž‘αž‘αŸ podSelector αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ pods αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ namespace αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž€αžΆαžšαž”αŸ’αžšαž€αž½αžαžŠαŸ†αž”αžΌαž„αž“αž·αž„αž›αŸ†αžŠαžΆαž”αŸ‹

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

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

αž’αŸ’αž“αž€αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž₯αžšαž·αž™αžΆαž”αž‘αž“αŸαŸ‡αžŠαŸ„αž™αž”αŸ’αžšαžΎαž…αŸ’αž”αžΆαž”αŸ‹αž”αŸ„αžŸαžŸαŸ†αž’αžΆαžαŸ”

αž…αŸ’αž”αžΆαž”αŸ‹αžŸαž˜αŸ’αž’αžΆαž ("ហអម")

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸ Firewall αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž”αžŠαž·αžŸαŸαž’αž…αžšαžΆαž…αžšαžŽαŸαžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αŸ”

Kubernetes αž˜αž·αž“αž˜αžΆαž“αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– "αž”αžŠαž·αžŸαŸαž’" αž‘αŸαŸ”αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž₯αž‘αŸ’αž’αž·αž–αž›αžŠαžΌαž…αž‚αŸ’αž“αžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž’αž˜αŸ’αž˜αžαžΆ (αž’αž“αž»αž‰αŸ’αž‰αžΆαž) αžŠαŸ„αž™αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž€αŸ’αžšαž»αž˜αž‘αž‘αŸαž“αŸƒαž”αŸ’αžšαž—αž–αž•αž (αž…αžΌαž›)αŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ pods αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ namespace αž αžΎαž™αž‘αž»αž€ ingress αž˜αž·αž“αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ αžŠαŸ„αž™αž”αžŠαž·αžŸαŸαž’αžšαžΆαž›αŸ‹αž…αžšαžΆαž…αžšαž…αžΌαž›αŸ”

αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžš αž’αŸ’αž“αž€αž’αžΆαž…αžŠαžΆαž€αŸ‹αž€αž˜αŸ’αžšαž·αžαž…αžšαžΆαž…αžšαžŽαŸαž…αŸαž‰αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΈ namespaceαŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-egress
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆ αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αž“αŸ’αžαŸ‚αž˜αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž…αžšαžΆαž…αžšαž‘αŸ…αž€αžΆαž“αŸ‹ pods αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹ namespace αž“αžΉαž„αž˜αžΆαž“αž’αžΆαž‘αž·αž—αžΆαž–αž›αžΎαž…αŸ’αž”αžΆαž”αŸ‹αž“αŸαŸ‡αŸ” (αžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αž”αžΆαž”αŸ‹αž’αž“αž»αž‰αŸ’αž‰αžΆαž αž˜αž»αž“αž–αŸαž›αž…αŸ’αž”αžΆαž”αŸ‹αž”αžŠαž·αžŸαŸαž’αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„)αŸ”

αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ (Any-Any-Any-Allow)

αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž‚αŸ„αž›αž€αžΆαžšαžŽαŸ "αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹" αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŠαž·αžŸαŸαž’αžαžΆαž„αž›αžΎαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αžΆαžαž»αž‘αž‘αŸ ingress:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
  namespace: default
spec:
  podSelector: {}
  ingress: # <<<
  - {}     # <<<
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αžœαžΆαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ pods αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ namespaces αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ (αž“αž·αž„ IPs αž‘αžΆαŸ†αž„αž’αžŸαŸ‹) αž‘αŸ…αž€αžΆαž“αŸ‹ pod αžŽαžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ namespace default. αž₯αžšαž·αž™αžΆαž”αžαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžœαžΆαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ†αžŽαžαŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž‘αŸαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž–αŸαž›αžαŸ’αž›αŸ‡ αžœαžΆαž’αžΆαž…αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž·αž‘αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αž‡αžΆαž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžšαŸ„αž‚αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αž”αž‰αŸ’αž αžΆαŸ”

αž…αŸ’αž”αžΆαž”αŸ‹αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž…αžΌαž›αž”αŸ’αžšαžΎαžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αžŸαŸ†αžŽαž»αŸ†αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒ pods (app:balance) αž€αŸ’αž“αž»αž„β€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αžˆαŸ’αž˜αŸ„αŸ‡ default:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-to-balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  ingress: 
  - {}
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž…αžšαžΆαž…αžšαž…αžΌαž› (αž…αžΌαž›) αž“αž·αž„ αž…αŸαž‰ (egress) αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎ IP αžŽαžΆαž˜αž½αž™αž“αŸ…αžαžΆαž„αž€αŸ’αžšαŸ…αž…αž„αŸ’αž€αŸ„αž˜αŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  ingress:
  - {}
  egress:
  - {}
  policyTypes:
  - Ingress
  - Egress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–
αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αŸƒαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”

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

1. αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž› from ΠΈ to αž”αžΈαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž’αžΆαžαž»αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ (αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ OR):

  • namespaceSelector - αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž‘αžΆαŸ†αž„αž˜αžΌαž›;
  • podSelector - αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‚αŸ’αžšαžΆαž”αŸ‹;
  • ipBlock - αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αžŽαŸ’αžαžΆαž‰αžšαž„αŸ”

αž‘αž“αŸ’αž‘αžΉαž˜αž“αžΉαž„αž“αŸαŸ‡αž…αŸ†αž“αž½αž“αž“αŸƒαž’αžΆαžαž» (αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αžŠαžΌαž…αž‚αŸ’αž“αžΆ) αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžšαž„ from/to αž˜αž·αž“αž€αŸ†αžŽαžαŸ‹αŸ” αž–αž½αž€αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžŸαŸ†αž‡αžΆαž˜αž½αž™αž‘αžΌαž‡αžΈαžαž› OR αŸ”

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    - podSelector:
        matchLabels:
          app: admin
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

2. αž•αŸ’αž“αŸ‚αž€αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αžαžΆαž„αž€αŸ’αž“αž»αž„ ingress αž’αžΆαž…αž˜αžΆαž“αž’αžΆαžαž»αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” from (αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž‘αžΌαž‡αžΈαžαž› OR) αŸ” αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžšαž•αŸ’αž“αŸ‚αž€ egress αž’αžΆαž…αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž’αžΆαžαž»αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” to (αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
  - from:
    - podSelector:
        matchLabels:
          app: admin
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

3. αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž€αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžŸαŸ†αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αžΌαž‡αžΈαžαž› OR αž•αž„αžŠαŸ‚αžšαŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆ, αž˜αžΆαž“αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž˜αž½αž™αž“αŸ…αž›αžΎ αž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰ αž›αŸ„αž€ Chris CooneyαŸ– Kubernetes αž’αžΆαž…αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž”αžΆαž“αžαŸ‚αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” policyTypes (Ingress ឬ Egress) αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž…αžΌαž› (ឬ egress) αž“αžΉαž„αžŸαžšαžŸαŸαžšαž‡αžΆαž“αŸ‹αž›αžΎαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αŸ”

αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžšαžœαžΆαž„αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡

αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž–αŸαžαŸŒαž˜αžΆαž“αžšαžœαžΆαž„ namespaces αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžšαžΉαžαžαŸ’αž”αž·αžαžŠαŸ‚αž›αžŠαžΆαž€αŸ‹αž€αž˜αŸ’αžšαž·αžαž€αžΆαžšαž…αŸαž‰αž…αžΌαž› αž“αž·αž„/αž¬αž…αžšαžΆαž…αžšαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž›αŸ†αž αžˆαŸ’αž˜αŸ„αŸ‡ (αžŸαžΌαž˜αž˜αžΎαž› "αž…αŸ’αž”αžΆαž”αŸ‹αž”αŸ„αžŸαžŸαž˜αŸ’αž’αžΆαž" αžαžΆαž„αž›αžΎ)αŸ”

αžŠαŸ„αž™αž€αžΆαžšαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ namespace (αžŸαžΌαž˜αž˜αžΎαž› "Sweep Rule" αžαžΆαž„αž›αžΎ) αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž€αž›αŸ‚αž„αž…αŸ†αž–αŸ„αŸ‡αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŠαž·αžŸαŸαž’αžŠαŸ„αž™αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž–αžΈ namespace αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‡αžΆαž˜αž½αž™ namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector: # <<<
        matchLabels:
          namespace: default
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž‡αžΆαž›αž‘αŸ’αž’αž•αž› pods αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ namespace default αž‘αž‘αž½αž›αž”αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎ pods postgres αž“αŸ…αž€αŸ’αž“αž»αž„ namespace database. αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αž»αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αžΎαž€αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎ postgres αž˜αžΆαž“αžαŸ‚ pods αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ namespace default?

αžαŸ’αžšαž„αžαžΆαž˜αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡ αž“αž·αž„αž•αž

Kubernetes αž€αŸ†αžŽαŸ‚ 1.11 αž“αž·αž„αžαŸ’αž–αžŸαŸ‹αž‡αžΆαž„αž“αŸαŸ‡ αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš namespaceSelector ΠΈ podSelector αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‘αžΌαž‡αžΈαžαž› AND αžœαžΆαž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          namespace: default
      podSelector: # <<<
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž€αž”αŸ’αžšαŸ‚αž‡αžΆ AND αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™ OR αž’αž˜αŸ’αž˜αžαžΆ?

αž…αŸ†αžŽαžΆαŸ†β€‹αžαžΆ podSelector αž˜αž·αž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αžŸαž αžŸαž‰αŸ’αž‰αžΆαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ YAML αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ podSelector αž αžΎαž™αžˆαžšαž“αŸ…αž–αžΈαž˜αž»αžαž‚αžΆαžαŸ‹ namespaceSelector αž™αŸ„αž„αž‘αŸ…αž’αžΆαžαž»αž”αž‰αŸ’αž‡αžΈαžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžŸαŸ†αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αžΌαž‡αžΈαžαž› AND αŸ”

αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αžŸαž‰αŸ’αž‰αžΆαž…αž»αž…αž–αžΈαž˜αž»αž“ podSelector αž“αžΉαž„αž˜αžΆαž“αž›αž‘αŸ’αž’αž•αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžΆαžαž»αž”αž‰αŸ’αž‡αžΈαžαŸ’αž˜αžΈαžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžŸαŸ†αž‡αžΆαž˜αž½αž™αž’αžΆαžαž»αž˜αž»αž“αŸ” namespaceSelector αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‘αžΌαž‡αžΈαžαž› OR αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž•αžαžαž›αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αž›αžΆαž€αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αž“αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž‘αžΆαŸ†αž„β€‹αž’αžŸαŸ‹αž”αž‰αŸ’αž…αžΌαž›αž‘αž‘αŸ namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector: {}
      podSelector:
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αžŸαŸ’αž›αžΆαž€αž‡αžΆαž…αŸ’αžšαžΎαž“αž•αŸ’αžŸαŸ†αž‡αžΆαž˜αž½αž™ AND

αž…αŸ’αž”αžΆαž”αŸ‹αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αžŠαŸ‚αž›αž˜αžΆαž“αž’αž„αŸ’αž‚αž—αžΆαž–αž…αŸ’αžšαžΎαž“ (αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž”αžŽαŸ’αžαžΆαž‰ αž€αŸ’αžšαž»αž˜) αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž‘αžΌαž‡αžΈαžαž› OR αŸ” αž…αŸ’αž”αžΆαž”αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αžΉαž„αžˆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ’αžšαž—αž–αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” Host_1 ឬ Host_2:

| Source | Destination | Service | Action |
| ----------------------------------------|
| Host_1 | Subnet_A    | HTTPS   | Allow  |
| Host_2 |             |         |        |
| ----------------------------------------|

αž•αŸ’αž‘αž»αž™αž‘αŸ…αžœαž·αž‰αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αžŸαŸ’αž›αžΆαž€αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ podSelector ឬ namespaceSelector αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž•αŸ’αžŸαŸ†β€‹αž‡αžΆαž˜αž½αž™β€‹αž“αžΉαž„β€‹αž‘αžΌαž‡αžΈαžαž› ANDαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž…αŸ’αž”αžΆαž”αŸ‹β€‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜β€‹αž“αžΉαž„β€‹αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸβ€‹αž•αžβ€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αžŸαŸ’αž›αžΆαž€β€‹αž‘αžΆαŸ†αž„αž–αžΈαžš role=db И version=v2:

podSelector:
  matchLabels:
    role: db
    version: v2

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

αž”αžŽαŸ’αžαžΆαž‰αžšαž„ αž“αž·αž„αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP (IPBlocks)

Firewalls αž”αŸ’αžšαžΎ VLANs αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž“αž·αž„αž”αžŽαŸ’αžαžΆαž‰αžšαž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ‚αž„αž…αŸ‚αž€αž”αžŽαŸ’αžαžΆαž‰αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸ… pods αž αžΎαž™αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŸαŸ’αž›αžΆαž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ pods αž“αž·αž„ namespaces αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αŸ”

αž”αžŽαŸ’αžαžΆαž‰αžšαž„ (ipBlocks) αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαžΎβ€‹αž“αŸ…β€‹αž–αŸαž›β€‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„β€‹αž€αžΆαžšβ€‹αžαž—αŸ’αž‡αžΆαž”αŸ‹β€‹αž…αžΌαž› (αž…αžΌαž›) αž¬β€‹αž…αŸαž‰ (egress) αžαžΆαž„β€‹αž€αŸ’αžšαŸ… (αžαžΆαž„αž‡αžΎαž„-αžαžΆαž„αžαŸ’αž”αžΌαž„) αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž”αžΎαž€ pods αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΈ namespace default αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ DNS αžšαž”αžŸαŸ‹ GoogleαŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-dns
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 8.8.8.8/32
    ports:
    - protocol: UDP
      port: 53

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž§αž”αž€αžšαžŽαŸαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ pods αž‘αž‘αŸαž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ "αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ pods αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ namespace" αŸ”

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž…αžΌαž›αž”αŸ’αžšαžΎαžαŸ‚ 8.8.8.8; αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎ IP αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž αžΆαž˜αžƒαžΆαžαŸ‹αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž‡αžΆαžšαž½αž˜ αž’αŸ’αž“αž€αž”αžΆαž“αžšαžΆαžšαžΆαŸ†αž„αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ DNS Kubernetes αžαžΆαž„αž€αŸ’αž“αž»αž„αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž“αŸ…αžαŸ‚αž…αž„αŸ‹αž”αžΎαž€αžœαžΆ αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžœαžΆαž±αŸ’αž™αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αŸ”

αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ ipBlocks ΠΈ podSelectors αž‚αžΊαž•αŸ’αžαžΆαž…αŸ‹αž˜αž»αžαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αžαžΆαž„αž€αŸ’αž“αž»αž„αžšαž”αžŸαŸ‹αž•αžαžαž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„ ipBlocks. αž€αžΆαžšαž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰ αž•αž IP αžαžΆαž„αž€αŸ’αž“αž»αž„αž’αŸ’αž“αž€αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…/αž–αžΈαž•αžαž•αžαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž αž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αžŠαžΉαž„αžαžΆαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž˜αž½αž™αžŽαžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎ αžŠαŸ‚αž›αž‡αžΆαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αž’αŸ’αž“αž€αž˜αž·αž“αž‚αž½αžšαž”αŸ’αžšαžΎαž–αž½αž€αžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž•αžαŸ”

αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž•αŸ’αž‘αž»αž™αž‚αŸ’αž“αžΆ αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› IPs αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž…αžΌαž›αž”αŸ’αžšαžΎ pods αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-any
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž’αŸ’αž“αž€αž’αžΆαž…αž”αžΎαž€αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž”αžΆαž“αžαŸ‚ IPs αžαžΆαž„αž€αŸ’αžšαŸ…αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αžŠαŸ„αž™αž˜αž·αž“αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αžαžΆαž„αž€αŸ’αž“αž»αž„αžšαž”αžŸαŸ‹αž•αžαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αžŽαŸ’αžαžΆαž‰αžšαž„αžšαž”αžŸαŸ‹αž•αžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αžΊ 10.16.0.0/14αŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-any
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 10.16.0.0/14

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž…αŸ’αžšαž€αž“αž·αž„αž–αž·αž’αžΈαž€αžΆαžš

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

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    - podSelector:
        matchLabels:
          app: admin
    ports:             # <<<
      - port: 443      # <<<
        protocol: TCP  # <<<
      - port: 80       # <<<
        protocol: TCP  # <<<
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž…αŸ†αžŽαžΆαŸ†αžαžΆαž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ ports αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αž’αžΆαžαž»αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€ to ឬ from, αžŠαŸ‚αž›αž˜αžΆαž“αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž…αŸ’αžšαž€αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαž»αŸ†αž’αžΆαžαž»αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆ αžŸαžΌαž˜αž”αŸ†αž”αŸ‚αž€ ingress ឬ egress αž‘αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžšαž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” to ឬ from αž αžΎαž™αž€αŸ’αž“αž»αž„αž“αžΈαž˜αž½αž™αŸ—αžŸαžšαžŸαŸαžšαž…αŸ’αžšαž€αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ–

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    ports:             # <<<
     - port: 443       # <<<
       protocol: TCP   # <<<
  - from:
    - podSelector:
        matchLabels:
          app: admin
    ports:             # <<<
     - port: 80        # <<<
       protocol: TCP   # <<<
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αž•αŸ’αž“αŸ‚αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

αž…αŸ’αžšαž€αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ–

  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžŠαž·αžŸαŸαž’αž“αž·αž™αž˜αž“αŸαž™αž“αŸƒαž…αŸ’αžšαž€αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ (ports) αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαž–αž·αž’αžΈαž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž“αž·αž„αž…αŸ’αžšαž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹;
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžŠαž·αžŸαŸαž’αž“αž·αž™αž˜αž“αŸαž™αž–αž·αž’αžΈαž€αžΆαžš (protocol) αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆ TCP;
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžŠαž·αžŸαŸαž’αž“αž·αž™αž˜αž“αŸαž™αž…αŸ’αžšαž€ (port) αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαž…αŸ’αžšαž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž›αŸ’αž’αž”αŸ†αž•αž»αžαŸ– αž€αž»αŸ†αž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž›αžΎαžαž˜αŸ’αž›αŸƒαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αŸ”

αž…αŸ†αžŽαžΆαŸ†αžαžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž•αžαž•αž αž˜αž·αž“αž˜αŸ‚αž“αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‘αŸ (αž”αž“αŸ’αžαŸ‚αž˜αž›αžΎαžœαžΆαž“αŸ…αž€αžαžΆαžαžŽαŸ’αžŒαž”αž“αŸ’αž‘αžΆαž”αŸ‹)αŸ”

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αž αž¬αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜?

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

αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŸαŸ’αžαžΆαž”αŸ‹αž“αŸ…αž›αžΎαž…αŸ’αžšαž€ 80 αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αž‰αŸ’αž‡αžΌαž“αž…αžšαžΆαž…αžšαž‘αŸ…αž€αžΆαž“αŸ‹αž…αŸ’αžšαž€ 8080 αž“αŸƒαž•αžαžšαž”αžŸαŸ‹αžœαžΆ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ 8080 αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αŸ”

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

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αžαŸ’αž˜αžΈαžŠαŸ„αž™αž”αŸ’αžšαžΎ Service Mesh (αž§αž‘αžΆαž αžšαžŽαŸ αžŸαžΌαž˜αž˜αžΎαž›αž’αŸ†αž–αžΈ Istio αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ - approx. transl αŸ” ) αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αŸ”

αžαžΎαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαž‘αžΆαŸ†αž„ Ingress αž“αž·αž„ Egress αž‘αŸ?

αž…αŸ†αž›αžΎαž™αžαŸ’αž›αžΈαž‚αžΊαž”αžΆαž‘/αž…αžΆαžŸ αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž•αž A αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž˜αž½αž™αž•αž B αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžœαžΆαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž…αŸαž‰ (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αŸαŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž€αžΆαžšαžŽαŸ egress) αž αžΎαž™αž•αž B αžαŸ’αžšαžΌαžœαžαŸ‚αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž…αžΌαž› (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αŸαŸ‡, αž™αŸ„αž„αž‘αŸ…αžαžΆαž˜, αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžš ingress- policy) αŸ”

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž αž’αŸ’αž“αž€αž’αžΆαž…αž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž€αŸ’αž“αž»αž„αž‘αž·αžŸαžŠαŸ…αž˜αž½αž™ αž¬αž‘αžΆαŸ†αž„αž–αžΈαžšαŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“αž•αžαžαŸ’αž›αŸ‡ -αž”αŸ’αžšαž—αž– αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“αŸ” αž…αŸαž‰- αž’αŸ’αž“αž€αž“αž™αŸ„αž”αžΆαž™ αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αžŠαŸ‚αž›αžŠαžΆαž€αŸ‹αž›αžΎαžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž€αžΆαžšαž•αŸ’αžαžΆαž…αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™ pod αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž’αŸ’αž“αž€αž‘αž‘αž½αž›. αž”αŸ’αžšαžŸαž·αž“αž”αžΎ pod αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŽαžΆαž˜αž½αž™αž‘αŸ αž…αžšαžΆαž…αžšαžŽαŸαž…αŸαž‰ (egress) αžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ”

αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžš αž‡αŸ„αž‚αžœαžΆαžŸαž“αžΆαžšαž”αžŸαŸ‹ pod'a-αž’αŸ’αž“αž€αž‘αž‘αž½αž›αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“αŸ” αž…αžΌαž›- αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž€αžΆαžšαž•αŸ’αžαžΆαž…αŸ‹αžαŸ’αž›αž½αž“αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžœαžΆαž‘αž‘αž½αž›αž”αžΆαž“αž…αžšαžΆαž…αžšαžŽαŸαž–αžΈαž”αŸ’αžšαž—αž–αž•αžαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž•αžαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŽαžΆαž˜αž½αž™αž‘αŸ αž…αžšαžΆαž…αžšαžŽαŸαž…αžΌαž›αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ”

αžŸαžΌαž˜αž˜αžΎαž› "Stateful or Stateless" αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»

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

αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž…αžšαžΆαž…αžšαžŽαŸαž‘αŸ…αž€αžΆαž“αŸ‹αžŸαŸαžœαžΆαžαžΆαž„αž€αŸ’αžšαŸ…

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αž˜αž·αž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž“αžŠαŸ‚αž›αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž–αŸαž‰αž›αŸαž‰ (DNS) αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ egress αž‘αŸαŸ” αž€αžΆαžšαž–αž·αžαž“αŸαŸ‡αž“αžΆαŸ†αž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžšαž’αžΆαž€αŸ‹αžšαž’αž½αž›αžαŸ’αž›αžΆαŸ†αž„αž“αŸ…αž–αŸαž›αž–αŸ’αž™αžΆαž™αžΆαž˜αžŠαžΆαž€αŸ‹αž€αž˜αŸ’αžšαž·αžαž…αžšαžΆαž…αžšαžŽαŸαž‘αŸ…αž€αžΆαž“αŸ‹αž‚αŸ„αž›αžŠαŸ…αžαžΆαž„αž€αŸ’αžšαŸ…αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP ថេរ (αžŠαžΌαž…αž‡αžΆ aws.com)αŸ”

αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™

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

kubernetes get networkpolicy <policy-name> -o yaml

αžŸαžΌαž˜αž…αž„αž…αžΆαŸ†αžαžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαž»αž–αž›αž—αžΆαž– Kubernetes αž˜αž·αž“αž’αžΆαž…αžαŸ’αžœαŸ‡αž”αžΆαž“ αž αžΎαž™αž’αžΆαž…αžαž€αžαžΆαž“αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αŸ†αž αž»αžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ”

αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·

Kubernetes αž˜αž·αž“αž’αž“αž»αžœαžαŸ’αžαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž…αŸ’αžšαž€ API αžŠαŸ‚αž›αžŠαžΆαž€αŸ‹αž”αž“αŸ’αž‘αž»αž€αž“αŸƒαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž αŸ…αžαžΆ Container Networking Interface (CNI) αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸ…αž›αžΎαž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αžŠαŸ„αž™αž˜αž·αž“αž€αŸ†αžŽαžαŸ‹ CNI αžŸαž˜αžŸαŸ’αžšαž”αž‚αžΊαžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αžŠαŸ„αž™αž˜αž·αž“αž€αŸ†αžŽαžαŸ‹αž–αž½αž€αžœαžΆαž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž“αŸ…αž›αžΎαž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αŸ” αžœαžΆαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž’αŸ’αž“αž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžΆαž€αžŠαžαžΆαž’αŸ’αž“αž€αž˜αžΆαž“ CNI αžŸαž˜αžšαž˜αŸ’αž™ αž¬αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαžœαŸαž‘αž·αž€αžΆ Kubernetes αžŠαŸ‚αž›αž”αž„αŸ’αž αŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž–αž€ (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž‡αžΈαž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαžŸαžΌαž˜αž˜αžΎαž› αž“αŸ…αž‘αžΈαž“αŸαŸ‡ - αž”αŸ’αžšαž αŸ‚αž› αž†αŸ’αž›αž„)αž”αžΎαž€αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αžŠαŸ‚αž›αž“αžΉαž„αž€αŸ†αžŽαžαŸ‹ CNI αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αŸ”

αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆ Kubernetes αž“αžΉαž„αž˜αž·αž“αž–αŸ’αžšαž˜αžΆαž“αž’αŸ’αž“αž€αž‘αŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž’αŸ’αž“αž€αž‡αŸ†αž“αž½αž™αžŸαž˜αžšαž˜αŸ’αž™ CNI αŸ”

αžšαžŠαŸ’αž‹αž¬αž‚αŸ’αž˜αžΆαž“αžšαžŠαŸ’αž‹?

Kubernetes CNIs αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž‚αžΊαž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžšαžŠαŸ’αž‹ (αž§αž‘αžΆαž αžšαžŽαŸ Calico αž”αŸ’αžšαžΎ Linux conntrack)αŸ” αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™ pod αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž“αŸ…αž›αžΎαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ TCP αžŠαŸ‚αž›αžœαžΆαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αž„αŸ’αž€αžΎαžαžœαžΆαž‘αžΎαž„αžœαž·αž‰αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αžŠαžΉαž„αž–αžΈαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš Kubernetes αžŠαŸ‚αž›αž“αžΉαž„αž’αžΆαž“αžΆαž—αžΆαž–αž–αŸαž‰αž›αŸαž‰αž“αŸ„αŸ‡αž‘αŸαŸ”

αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžœαž·αž’αžΈαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„ KubernetesαŸ–

  1. αž‚αŸ†αžšαžΌαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ Service Mesh αž”αŸ’αžšαžΎ sidecars αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αžαž›αŸ‹ telemetry αž›αž˜αŸ’αž’αž·αž αž“αž·αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž…αžšαžΆαž…αžšαžŽαŸαž“αŸ…αž€αž˜αŸ’αžšαž·αžαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ” αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž‚αŸαž’αžΆαž…αž™αž€αž”αžΆαž“αŸ” ធ៊ីស៊ីធូ.
  2. αž’αŸ’αž“αž€αž›αž€αŸ‹ CNI αž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αžΆαž“αž–αž„αŸ’αžšαžΈαž€αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžŠαžΎαž˜αŸ’αž”αžΈαž›αžΎαžŸαž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αŸ”
  3. αž’αžΌαž αŸ’αžœαžΈαž“ αž’αŸαžšαž€αžΆ αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžαž˜αŸ’αž›αžΆαž—αžΆαž– αž“αž·αž„αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αž“αŸƒαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes αŸ”

αž€αž‰αŸ’αž…αž”αŸ‹ Tufin Orca αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰ Kubernetes (αž αžΎαž™αž‡αžΆαž”αŸ’αžšαž—αž–αž“αŸƒαžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹αžαžΆαž„αž›αžΎ)αŸ”

αž”αž“αŸ’αžαŸ‚αž˜

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

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

αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž“αŸαŸ‡αž“αžΉαž„αž‡αž½αž™αž‡αž˜αŸ’αžšαŸ‡αžŸαŸ†αžŽαž½αžšαž˜αž½αž™αž…αŸ†αž“αž½αž“ αž“αž·αž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αŸ”

PS αž–αžΈαž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚

αžŸαžΌαž˜αž’αžΆαž“αž•αž„αžŠαŸ‚αžšαž“αŸ…αž›αžΎαž”αŸ’αž›αž€αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

αž”αŸ’αžšαž—αž–: www.habr.com

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