ืžื‘ื•ื ืœืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืœืื ืฉื™ ืื‘ื˜ื—ื”

ืžื‘ื•ื ืœืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืœืื ืฉื™ ืื‘ื˜ื—ื”

ื”ืขืจื”. ืชืจื’ื•ื: ืœื›ื•ืชื‘ ื”ืžืืžืจ, ืจืื•ื‘ืŸ ื”ืจื™ืกื•ืŸ, ื ื™ืกื™ื•ืŸ ืฉืœ ืœืžืขืœื” ืž-20 ืฉื ื” ื‘ืคื™ืชื•ื— ืชื•ื›ื ื”, ื•ื›ื™ื•ื ื”ื•ื CTO ื•ืžื™ื™ืกื“ ืฉื•ืชืฃ ืฉืœ ื—ื‘ืจืช Tufin, ืฉื™ื•ืฆืจืช ืคืชืจื•ื ื•ืช ืœื ื™ื”ื•ืœ ืžื“ื™ื ื™ื•ืช ืื‘ื˜ื—ื”. ืœืžืจื•ืช ืฉื”ื•ื ืจื•ืื” ื‘ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ื›ืœื™ ื—ื–ืง ืœืžื“ื™ ืœืคื™ืœื•ื— ืจืฉืช ื‘ืืฉื›ื•ืœ, ื”ื•ื ื’ื ืžืืžื™ืŸ ืฉืœื ื›ืœ ื›ืš ืงืœ ืœื™ื™ืฉื ืื•ืชืŸ ื‘ืคื•ืขืœ. ื—ื•ืžืจ ื–ื” (ื“ื™ ื ืจื—ื‘) ื ื•ืขื“ ืœืฉืคืจ ืืช ื”ืžื•ื“ืขื•ืช ืฉืœ ืžื•ืžื—ื™ื ืœื ื•ืฉื ื–ื” ื•ืœืขื–ื•ืจ ืœื”ื ืœื™ืฆื•ืจ ืืช ื”ืชืฆื•ืจื•ืช ื”ื“ืจื•ืฉื•ืช.

ื›ื™ื•ื, ื—ื‘ืจื•ืช ืจื‘ื•ืช ื‘ื•ื—ืจื•ืช ื™ื•ืชืจ ื•ื™ื•ืชืจ ื‘-Kubernetes ืœื”ืคืขืœืช ื”ืืคืœื™ืงืฆื™ื•ืช ืฉืœื”ืŸ. ื”ื”ืชืขื ื™ื™ื ื•ืช ื‘ืชื•ื›ื ื” ื–ื• ื›ื” ื’ื‘ื•ื”ื” ืขื“ ืฉื™ืฉ ื”ืžื›ื ื™ื ืืช Kubernetes "ืžืขืจื›ืช ื”ื”ืคืขืœื” ื”ื—ื“ืฉื” ืฉืœ ืžืจื›ื– ื”ื ืชื•ื ื™ื". ื‘ื”ื“ืจื’ื”, Kubernetes (ืื• k8s) ืžืชื—ื™ืœื™ื ืœื”ื™ืชืคืก ื›ื—ืœืง ืงืจื™ื˜ื™ ื‘ืขืกืง, ืฉื“ื•ืจืฉ ืืจื’ื•ืŸ ืฉืœ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ื‘ื•ื’ืจื™ื, ื›ื•ืœืœ ืื‘ื˜ื—ืช ืจืฉืช.

ืขื‘ื•ืจ ืื ืฉื™ ืื‘ื˜ื—ื” ืฉืžืชืœื‘ื˜ื™ื ื‘ืขื‘ื•ื“ื” ืขื Kubernetes, ื™ื™ืชื›ืŸ ืฉื”ื’ื™ืœื•ื™ ื”ืืžื™ืชื™ ื”ื•ื ืžื“ื™ื ื™ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ื”ืคืœื˜ืคื•ืจืžื”: ืืคืฉืจ ื”ื›ืœ.

ืžื“ืจื™ืš ื–ื” ื™ืขื–ื•ืจ ืœืš ืœื”ื‘ื™ืŸ ืืช ื”ืžื‘ื ื” ื”ืคื ื™ืžื™ ืฉืœ ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช; ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ื”ื ืฉื•ื ื™ื ืžื”ื›ืœืœื™ื ืขื‘ื•ืจ ื—ื•ืžื•ืช ืืฉ ืจื’ื™ืœื•ืช. ื–ื” ื’ื ื™ื›ืกื” ื›ืžื” ืžืœื›ื•ื“ื•ืช ื•ื™ืกืคืง ื”ืžืœืฆื•ืช ืฉื™ืกื™ื™ืขื• ื‘ืื‘ื˜ื—ืช ื™ื™ืฉื•ืžื™ื ื‘- Kubernetes.

ืžื“ื™ื ื™ื•ืช ืจืฉืช Kubernetes

ืžื ื’ื ื•ืŸ ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืžืืคืฉืจ ืœืš ืœื ื”ืœ ืืช ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ื™ื™ืฉื•ืžื™ื ื”ืคืจื•ืกื™ื ื‘ืคืœื˜ืคื•ืจืžื” ื‘ืฉื›ื‘ืช ื”ืจืฉืช (ื”ืฉืœื™ืฉื™ืช ื‘ืžื•ื“ืœ OSI). ืžื“ื™ื ื™ื•ืช ืจืฉืช ื—ืกืจื” ื—ืœืง ืžื”ืชื›ื•ื ื•ืช ื”ืžืชืงื“ืžื•ืช ืฉืœ ื—ื•ืžื•ืช ืืฉ ืžื•ื“ืจื ื™ื•ืช, ื›ื’ื•ืŸ ืื›ื™ืคื” ืฉืœ OSI Layer 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 create -f policy.yaml

ืžืคืจื˜ ืžื“ื™ื ื™ื•ืช ืจืฉืช

ืžืคืจื˜ ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ื›ื•ืœืœ ืืจื‘ืขื” ืืœืžื ื˜ื™ื:

  1. podSelector: ืžื’ื“ื™ืจ ืืช ื”ืชืจืžื™ืœื™ื ื”ืžื•ืฉืคืขื™ื ืžืžื“ื™ื ื™ื•ืช ื–ื• (ื™ืขื“ื™ื) - ื ื“ืจืฉื™ื;
  2. policyTypes: ืžืฆื™ื™ืŸ ืื™ืœื• ืกื•ื’ื™ ืžื“ื™ื ื™ื•ืช ื›ืœื•ืœื™ื ื‘ื–ื”: ื›ื ื™ืกื” ื•/ืื• ื™ืฆื™ืื” - ืื•ืคืฆื™ื•ื ืœื™, ืืš ืื ื™ ืžืžืœื™ืฅ ืœืฆื™ื™ืŸ ื–ืืช ื‘ืžืคื•ืจืฉ ื‘ื›ืœ ื”ืžืงืจื™ื;
  3. ingress: ืžื’ื“ื™ืจ ืžื•ืชืจ ื ื›ื ืก ืชื ื•ืขื” ืœืชืจืžื™ืœื™ื - ืื•ืคืฆื™ื•ื ืœื™;
  4. egress: ืžื’ื“ื™ืจ ืžื•ืชืจ ื™ื•ึนืฆึตื ืชื ื•ืขื” ืžืชืจืžื™ืœื™ื ื”ื™ื ืื•ืคืฆื™ื•ื ืœื™ืช.

ื”ื“ื•ื’ืžื” ื ืœืงื—ื” ืžืืชืจ 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, ื”ืžื“ื™ื ื™ื•ืช ืชืชืคืจืฉ ื›ื“ืœืงืžืŸ:

  • ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื”ื”ื ื—ื” ื”ื™ื ืฉื”ื™ื ืžื’ื“ื™ืจื” ืืช ืฆื“ ื”ื›ื ื™ืกื”. ืื ื”ืžื“ื™ื ื™ื•ืช ืœื ืžืฆื™ื™ื ืช ื–ืืช ื‘ืžืคื•ืจืฉ, ื”ืžืขืจื›ืช ืชื ื™ื— ืฉื›ืœ ืชืขื‘ื•ืจื” ืืกื•ืจื”.
  • ื”ื”ืชื ื”ื’ื•ืช ื‘ืฆื“ ื”ื™ืฆื™ืื” ืชื™ืงื‘ืข ืขืœ ืคื™ ื ื•ื›ื—ื•ืช ืื• ื”ื™ืขื“ืจื• ืฉืœ ืคืจืžื˜ืจ ื”ื™ืฆื™ืื” ื”ืžืชืื™ื.

ื›ื“ื™ ืœืžื ื•ืข ื˜ืขื•ื™ื•ืช ืื ื™ ืžืžืœื™ืฅ ืชืžื™ื“ ื”ืคื•ืš ืืช ื–ื” ืœืžืคื•ืจืฉ policyTypes.

ืขืœ ืคื™ ื”ื”ื™ื’ื™ื•ืŸ ืœืขื™ืœ, ืื ื”ืคืจืžื˜ืจื™ื ingress ื• / ืื• egress ื ืฉืžื˜ื”, ื”ืžื“ื™ื ื™ื•ืช ืชืžื ืข ื›ืœ ืชืขื‘ื•ืจื” (ืจืื” "ื›ืœืœ ื”ืคืฉื˜ื”" ืœื”ืœืŸ).

ืžื“ื™ื ื™ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืืคืฉืจ

ืื ืœื ืžื•ื’ื“ืจื•ืช ืžื“ื™ื ื™ื•ืช, Kubernetes ืžืืคืฉืจืช ืืช ื›ืœ ื”ืชืขื‘ื•ืจื” ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ื›ืœ ื”ืคื•ื“ื™ื ื™ื›ื•ืœื™ื ืœื”ื—ืœื™ืฃ ืžื™ื“ืข ื‘ื™ื ื™ื”ื ื‘ืื•ืคืŸ ื—ื•ืคืฉื™. ื–ื” ืื•ืœื™ ื ืจืื” ืžื ื•ื’ื“ ืœืื™ื ื˜ื•ืื™ืฆื™ื” ืžื ืงื•ื“ืช ืžื‘ื˜ ืื‘ื˜ื—ื”, ืื‘ืœ ื–ื›ื•ืจ ืฉ-Kubernetes ืชื•ื›ื ืŸ ื‘ืžืงื•ืจ ืขืœ ื™ื“ื™ ืžืคืชื—ื™ื ื›ื“ื™ ืœืืคืฉืจ ื™ื›ื•ืœืช ืคืขื•ืœื” ื”ื“ื“ื™ืช ืฉืœ ื™ื™ืฉื•ืžื™ื. ืžื“ื™ื ื™ื•ืช ืจืฉืช ื ื•ืกืคื” ืžืื•ื—ืจ ื™ื•ืชืจ.

ืžืจื—ื‘ื™ ืฉืžื•ืช

ืžืจื—ื‘ื™ ืฉืžื•ืช ื”ื ืžื ื’ื ื•ืŸ ืฉื™ืชื•ืฃ ื”ืคืขื•ืœื” ืฉืœ 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 ื‘ืžื“ื™ื ื™ื•ืช ื™ื‘ื—ืจ ืคื•ื“ื™ื ืžืžืจื—ื‘ ื”ืฉืžื•ืช ืฉืืœื™ื• ืฉื™ื™ื›ืช ื”ืžื“ื™ื ื™ื•ืช (ื ืžื ืขืช ื’ื™ืฉื” ืœืคื•ื“ื™ื ืžืžืจื—ื‘ ืฉืžื•ืช ืื—ืจ).

ื‘ืื•ืคืŸ ื“ื•ืžื”, podSelectors ื‘ื—ืกื™ืžื•ืช ื›ื ื™ืกื” ื•ื™ืฆื™ืื” ื™ื›ื•ืœื™ื ืœื‘ื—ื•ืจ ืจืง ืคื•ื“ื™ื ืžืžืจื—ื‘ ื”ืฉืžื•ืช ืฉืœื”ื, ืืœื ืื ื›ืžื•ื‘ืŸ ืชืฉืœื‘ ืื•ืชื ืขื 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, ื›ื’ื•ืŸ ืชืจืžื™ืœื™ื ื•ืžืจื—ื‘ื™ ืฉืžื•ืช. ืชื•ื•ื™ื•ืช (ืชื•ื•ื™ื•ืช - ืชื’ื™ื•ืช) ื”ืŸ ื”ืžืงื‘ื™ืœื•ืช ืœืชื’ื™ื•ืช ื‘ืขื ืŸ. ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืžืฉืชืžืฉืช ื‘ืชื•ื•ื™ื•ืช ืœื‘ื—ื™ืจื” ืชืจืžื™ืœื™ืืขืœื™ื”ื ื”ื ื—ืœื™ื:

podSelector:
  matchLabels:
    role: db

โ€ฆ ืื• ืžืจื—ื‘ื™ ืฉืžื•ืชืืœื™ื”ื ื”ื ื—ืœื™ื. ื“ื•ื’ืžื” ื–ื• ื‘ื•ื—ืจืช ืืช ื›ืœ ื”ืคื•ื“ื™ื ื‘ืžืจื—ื‘ื™ ื”ืฉืžื•ืช ืขื ื”ืชื•ื•ื™ื•ืช ื”ืžืชืื™ืžื•ืช:

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 ืžื•ื’ื“ืจืช ืขื‘ื•ืจ ื™ืขื“ - ืงื‘ื•ืฆื” ืฉืœ ืชืจืžื™ืœื™ื ืขืœื™ื”ื ื”ื ื—ืœื™ื - ื•ืœืื—ืจ ืžื›ืŸ ืงื•ื‘ืขื™ื ื›ืœืœื™ื ืœืชืขื‘ื•ืจืช ื›ื ื™ืกื” ื•/ืื• ื™ืฆื™ืื”. ื‘ื“ื•ื’ืžื” ืฉืœื ื•, ื”ื™ืขื“ ืฉืœ ื”ืžื“ื™ื ื™ื•ืช ื™ื”ื™ื” ื›ืœ ื”ืคื•ื“ื™ื ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช 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 ืœืื ืฉื™ ืื‘ื˜ื—ื”

ื–ื” ืฉื•ื•ื” ืขืจืš ืœืฉื ื™ ื—ื•ืงื™ ื—ื•ืžืช ืืฉ: ื›ื ื™ืกื” โ† ื™ืขื“; ื™ืขื“ โ† ื™ืฆื™ืื”.

ื™ืฆื™ืื” ื•-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 ื”ื•ื ืจื™ืง, ื•ืœื›ืŸ ื”ื•ื ื‘ื•ื—ืจ ื‘ืขืงื™ืคื™ืŸ ื›ืœ ื”ืคื•ื“ื™ื ื‘ื›ืœ ืžืจื—ื‘ื™ ื”ืฉืžื•ืช, ืžืืคืฉืจ 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 ื‘ืชื•ืš ืžืจื—ื‘ ื”ืฉืžื•ืช ื‘ืœื‘ื“ 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. ืื ืฉื™ื ืคืจื ื•ืื™ื“ื™ื ื™ื›ื•ืœื™ื ืœืœื›ืช ืจื—ื•ืง ื™ื•ืชืจ ื•ืœื”ื’ื‘ื™ืœ ืฉืื™ืœืชื•ืช DNS ืœืฉื™ืจื•ืช DNS ืกืคืฆื™ืคื™ ื‘ kube-system. ื”ืกืขื™ืฃ "ืกื ืŸ ืœืคื™ ืžืจื—ื‘ื™ ืฉืžื•ืช ื•ืชืจืžื™ืœื™ื" ื™ื’ื™ื“ ืœืš ืื™ืš ืœื”ืฉื™ื’ ื–ืืช.

ืืคืฉืจื•ืช ื ื•ืกืคืช ื”ื™ื ืœืคืชื•ืจ DNS ื‘ืจืžืช ืžืจื—ื‘ ื”ืฉืžื•ืช. ื‘ืžืงืจื” ื–ื”, ืœื ื™ื”ื™ื” ืฆื•ืจืš ืœืคืชื•ื— ืื•ืชื• ืขื‘ื•ืจ ื›ืœ ืฉื™ืจื•ืช:

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

null podSelector ื‘ื•ื—ืจ ืืช ื›ืœ ื”ืคื•ื“ื™ื ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช.

ืžื‘ื•ื ืœืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืœืื ืฉื™ ืื‘ื˜ื—ื”

ื”ืชืืžื” ืจืืฉื•ื ื” ื•ืกื“ืจ ื›ืœืœ

ื‘ื—ื•ืžื•ืช ืืฉ ืงื•ื ื‘ื ืฆื™ื•ื ืœื™ื•ืช, ื”ืคืขื•ืœื” (Allow or Deny) ืขืœ ื—ื‘ื™ืœื” ื ืงื‘ืขืช ืœืคื™ ื”ื›ืœืœ ื”ืจืืฉื•ืŸ ืฉื”ื™ื ืขื•ืžื“ืช ื‘ื”. ื‘-Kubernetes, ืกื“ืจ ื”ืžื“ื™ื ื™ื•ืช ืื™ื ื• ืžืฉื ื”.

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื›ืืฉืจ ืœื ืžื•ื’ื“ืจืช ืžื“ื™ื ื™ื•ืช, ืชืงืฉื•ืจืช ื‘ื™ืŸ ืคื•ื“ื™ื ืžื•ืชืจืช ื•ื”ื ื™ื›ื•ืœื™ื ืœื”ื—ืœื™ืฃ ืžื™ื“ืข ื‘ืื•ืคืŸ ื—ื•ืคืฉื™. ื‘ืจื’ืข ืฉืžืชื—ื™ืœื™ื ืœื’ื‘ืฉ ืžื“ื™ื ื™ื•ืช, ื›ืœ ืคื•ื“ ื”ืžื•ืฉืคืข ืžืื—ื“ ืžื”ื ืœืคื—ื•ืช ื”ื•ืคืš ืœืžื‘ื•ื“ื“ ื‘ื”ืชืื ืœื ื™ืชื•ืง (OR ืœื•ื’ื™) ืฉืœ ื›ืœ ื”ืคื•ืœื™ืกื•ืช ืฉื‘ื—ืจื• ื‘ื•. ืชืจืžื™ืœื™ื ืฉืื™ื ื ืžื•ืฉืคืขื™ื ืžืžื“ื™ื ื™ื•ืช ื›ืœืฉื”ื™ ื ืฉืืจื™ื ืคืชื•ื—ื™ื.

ืืชื” ื™ื›ื•ืœ ืœืฉื ื•ืช ื”ืชื ื”ื’ื•ืช ื–ื• ื‘ืืžืฆืขื•ืช ื›ืœืœ ื”ืคืฉื˜ื”.

ื›ืœืœ ื”ืคืฉื˜ื” ("ื”ื›ื—ืฉื”")

ืžื“ื™ื ื™ื•ืช ื—ื•ืžืช ืืฉ ืžื•ื ืขืช ื‘ื“ืจืš ื›ืœืœ ื›ืœ ืชืขื‘ื•ืจื” ืฉืื™ื ื” ืžื•ืชืจืช ื‘ืžืคื•ืจืฉ.

ื‘-Kubernetes ืื™ืŸ ืคืขื•ืœื” ืฉืœ ื”ื›ื—ืฉื”ืขื ื–ืืช, ื ื™ืชืŸ ืœื”ืฉื™ื’ ืืคืงื˜ ื“ื•ืžื” ืขื ืžื“ื™ื ื™ื•ืช ืจื’ื™ืœื” (ืžืชื™ืจื ื™ืช) ืขืœ ื™ื“ื™ ื‘ื—ื™ืจืช ืงื‘ื•ืฆื” ืจื™ืงื” ืฉืœ ืชืจืžื™ืœื™ื (ื›ื ื™ืกื”):

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

ืžื‘ื•ื ืœืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืœืื ืฉื™ ืื‘ื˜ื—ื”

ืžื“ื™ื ื™ื•ืช ื–ื• ื‘ื•ื—ืจืช ืืช ื›ืœ ื”ืคื•ื“ื™ื ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช ื•ืžืฉืื™ืจื” ื›ื ื™ืกื” ื‘ืœืชื™ ืžื•ื’ื“ืจืช, ื•ืžื•ื ืขืช ืืช ื›ืœ ื”ืชืขื‘ื•ืจื” ื”ื ื›ื ืกืช.

ื‘ืื•ืคืŸ ื“ื•ืžื”, ืชื•ื›ืœ ืœื”ื’ื‘ื™ืœ ืืช ื›ืœ ื”ืชื ื•ืขื” ื”ื™ื•ืฆืืช ืžืžืจื—ื‘ ืฉืžื•ืช:

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

ืžื‘ื•ื ืœืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืœืื ืฉื™ ืื‘ื˜ื—ื”

ืฉื™ื ืœื‘ ื›ืœ ืžื“ื™ื ื™ื•ืช ื ื•ืกืคืช ื”ืžืืคืฉืจืช ืชืขื‘ื•ืจื” ืœ-pods ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช ืชืงื‘ืœ ืขื“ื™ืคื•ืช ืขืœ ื›ืœืœ ื–ื” (ื‘ื“ื•ืžื” ืœื”ื•ืกืคืช ื›ืœืœ ื”ื™ืชืจ ืœืคื ื™ ื›ืœืœ ื“ื—ื™ื™ื” ื‘ืชืฆื•ืจืช ื—ื•ืžืช ืืฉ).

ืืคืฉืจ ื”ื›ืœ (Any-Any-Any-Allow)

ื›ื“ื™ ืœื™ืฆื•ืจ ืžื“ื™ื ื™ื•ืช 'ืืคืฉืจ ื”ื›ืœ', ืขืœื™ืš ืœื”ื•ืกื™ืฃ ืืช ืžื“ื™ื ื™ื•ืช ื”ื“ื—ื™ื” ืฉืœืžืขืœื” ื‘ืจื›ื™ื‘ ืจื™ืง ingress:

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

ืžื‘ื•ื ืœืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืœืื ืฉื™ ืื‘ื˜ื—ื”

ื–ื” ืžืืคืฉืจ ื’ื™ืฉื” ืž ื›ืœ ื”ืคื•ื“ื™ื ื‘ื›ืœ ืžืจื—ื‘ื™ ื”ืฉืžื•ืช (ื•ื›ืœ ื”-IP) ืœื›ืœ ืคื•ื“ ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช default. ื”ืชื ื”ื’ื•ืช ื–ื• ืžื•ืคืขืœืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื›ืš ืฉื‘ื“ืจืš ื›ืœืœ ืื™ืŸ ืฆื•ืจืš ืœื”ื’ื“ื™ืจ ืื•ืชื” ื™ื•ืชืจ. ืขื ื–ืืช, ืœืคืขืžื™ื ื™ื™ืชื›ืŸ ืฉื™ื”ื™ื” ืขืœื™ืš ืœื”ืฉื‘ื™ืช ื‘ืื•ืคืŸ ื–ืžื ื™ ื›ืžื” ื”ืจืฉืื•ืช ืกืคืฆื™ืคื™ื•ืช ื›ื“ื™ ืœืื‘ื—ืŸ ืืช ื”ื‘ืขื™ื”.

ื ื™ืชืŸ ืœืฆืžืฆื ืืช ื”ื›ืœืœ ื›ื“ื™ ืœืืคืฉืจ ื’ื™ืฉื” ืจืง ืœ ืกื˜ ืกืคืฆื™ืคื™ ืฉืœ ืชืจืžื™ืœื™ื (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 ืœืื ืฉื™ ืื‘ื˜ื—ื”

ื”ืžื“ื™ื ื™ื•ืช ื”ื‘ืื” ืžืืคืฉืจืช ืืช ื›ืœ ืชืขื‘ื•ืจืช ื”ื›ื ื™ืกื” ื•ื”ื™ืฆื™ืื”, ื›ื•ืœืœ ื’ื™ืฉื” ืœื›ืœ IP ืžื—ื•ืฅ ืœืืฉื›ื•ืœ:

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

ืžื‘ื•ื ืœืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืœืื ืฉื™ ืื‘ื˜ื—ื”
ืžื‘ื•ื ืœืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืœืื ืฉื™ ืื‘ื˜ื—ื”

ืฉื™ืœื•ื‘ ืฉืœ ืคื•ืœื™ืกื•ืช ืžืจื•ื‘ื•ืช

ืžื“ื™ื ื™ื•ืช ืžืฉื•ืœื‘ืช ื‘ืืžืฆืขื•ืช OR ืœื•ื’ื™ ื‘ืฉืœื•ืฉ ืจืžื•ืช; ื”ื”ืจืฉืื•ืช ืฉืœ ื›ืœ ืคื•ื“ ื ืงื‘ืขื•ืช ื‘ื”ืชืื ืœื ื™ืชื•ืง ืฉืœ ื›ืœ ื”ืžื“ื™ื ื™ื•ืช ื”ืžืฉืคื™ืขื” ืขืœื™ื•:

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 ืœื•ื’ื™

ืื‘ืœ ื›ืืฉืจ ืžืฉืœื‘ื™ื ืื•ืชื, ื™ืฉ ืžื’ื‘ืœื” ืื—ืช ืขืœื™ื” ื”ืฆื‘ื™ืข ื›ืจื™ืก ืงื•ื ื™: Kubernetes ื™ื›ื•ืœ ืœืฉืœื‘ ืจืง ืžื“ื™ื ื™ื•ืช ืขื ืฉื•ื ื•ืช policyTypes (Ingress ืื• Egress). ืžื“ื™ื ื™ื•ืช ื”ืžื’ื“ื™ืจื” ื›ื ื™ืกื” (ืื• ื™ืฆื™ืื”) ืชื—ืœื™ืฃ ื–ื• ืืช ื–ื•.

ืงืฉืจ ื‘ื™ืŸ ืžืจื—ื‘ื™ ืฉืžื•ืช

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืฉื™ืชื•ืฃ ืžื™ื“ืข ื‘ื™ืŸ ืžืจื—ื‘ื™ ืฉืžื•ืช ืžื•ืชืจ. ื ื™ืชืŸ ืœืฉื ื•ืช ื–ืืช ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘ืžื“ื™ื ื™ื•ืช ื”ื›ื—ืฉื” ืฉืชื’ื‘ื™ืœ ืชื ื•ืขื” ื™ื•ืฆืืช ื•/ืื• ื ื›ื ืกืช ืœืžืจื—ื‘ ื”ืฉืžื•ืช (ืจืื” "ื›ืœืœ ื”ืคืฉื˜ื”" ืœืžืขืœื”).

ืœืื—ืจ ืฉื—ืกืžืช ืืช ื”ื’ื™ืฉื” ืœืžืจื—ื‘ ืฉืžื•ืช (ืจืื” "ื›ืœืœ ื”ื”ืกืจื”" ืœืžืขืœื”), ืชื•ื›ืœ ืœื‘ืฆืข ื—ืจื™ื’ื™ื ืœืžื“ื™ื ื™ื•ืช ื”ื“ื—ื™ื” ืขืœ ื™ื“ื™ ืžืชืŸ ืืคืฉืจื•ืช ืœื—ื™ื‘ื•ืจื™ื ืžืžืจื—ื‘ ืฉืžื•ืช ืกืคืฆื™ืคื™ ื‘ืืžืฆืขื•ืช 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 ืœืื ืฉื™ ืื‘ื˜ื—ื”

ื›ืชื•ืฆืื” ืžื›ืš, ื›ืœ ื”ืคื•ื“ื™ื ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช default ืชื”ื™ื” ื’ื™ืฉื” ืœืชืจืžื™ืœื™ื postgres ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช database. ืื‘ืœ ืžื” ืื ืืชื” ืจื•ืฆื” ืœืคืชื•ื— ื’ื™ืฉื” ืœ postgres ืจืง ืชืจืžื™ืœื™ื ืกืคืฆื™ืคื™ื™ื ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช 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 ืœืื ืฉื™ ืื‘ื˜ื—ื”

ืชื•ื•ื™ื•ืช ืžืจื•ื‘ื•ืช ื—ื•ื‘ืจื•ืช ืœ-I

ื›ืœืœื™ื ืขื‘ื•ืจ ื—ื•ืžืช ืืฉ ืขื ืžืกืคืจ ืื•ื‘ื™ื™ืงื˜ื™ื (ืžืืจื—ื™ื, ืจืฉืชื•ืช, ืงื‘ื•ืฆื•ืช) ืžืฉื•ืœื‘ื™ื ื‘ืืžืฆืขื•ืช OR ืœื•ื’ื™. ื”ื›ืœืœ ื”ื‘ื ื™ืขื‘ื•ื“ ืื ืžืงื•ืจ ื”ื—ื‘ื™ืœื” ืชื•ืื Host_1 ืื• Host_2:

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

ืœื”ื™ืคืš, ื‘ืงื•ื‘ืจื ื˜ืก ื”ืชื•ื•ื™ื•ืช ื”ืฉื•ื ื•ืช ื‘ podSelector ืื• namespaceSelector ืžืฉื•ืœื‘ื™ื ืขื AND ืœื•ื’ื™. ืœื“ื•ื’ืžื”, ื”ื›ืœืœ ื”ื‘ื ื™ื‘ื—ืจ ืชืจืžื™ืœื™ื ื‘ืขืœื™ ืฉืชื™ ื”ืชื•ื•ื™ื•ืช, role=db ะ˜ version=v2:

podSelector:
  matchLabels:
    role: db
    version: v2

ืื•ืชื• ื”ื™ื’ื™ื•ืŸ ื—ืœ ืขืœ ื›ืœ ืกื•ื’ื™ ื”ืื•ืคืจื˜ื•ืจื™ื: ื‘ื•ืจืจื™ ื™ืขื“ื™ ืžื“ื™ื ื™ื•ืช, ื‘ื•ืจืจื™ ืชืจืžื™ืœื™ื ื•ื‘ื•ืจืจื™ ืžืจื—ื‘ ืฉืžื•ืช.

ืจืฉืชื•ืช ืžืฉื ื” ื•ื›ืชื•ื‘ื•ืช IP (IPBlocks)

ื—ื•ืžื•ืช ืืฉ ืžืฉืชืžืฉื•ืช ื‘ืจืฉืชื•ืช VLAN, ื›ืชื•ื‘ื•ืช IP ื•ืจืฉืชื•ืช ืžืฉื ื” ื›ื“ื™ ืœืคืœื— ืจืฉืช.

ื‘-Kubernetes, ื›ืชื•ื‘ื•ืช IP ืžื•ืงืฆื•ืช ืœืชืจืžื™ืœื™ื ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ื•ื™ื›ื•ืœื•ืช ืœื”ืฉืชื ื•ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช, ื›ืš ืฉืชื•ื•ื™ื•ืช ืžืฉืžืฉื•ืช ืœื‘ื—ื™ืจืช ืคื•ื“ื™ื ื•ืžืจื—ื‘ื™ ืฉืžื•ืช ื‘ืžื“ื™ื ื™ื•ืช ืจืฉืช.

ืจืฉืชื•ืช ืžืฉื ื” (ipBlocks) ืžืฉืžืฉื™ื ื‘ืขืช ื ื™ื”ื•ืœ ื—ื™ื‘ื•ืจื™ื ื—ื™ืฆื•ื ื™ื™ื (ืฆืคื•ืŸ-ื“ืจื•ื) ื ื›ื ืกื™ื (ื ื›ื ืกื™ื) ืื• ื™ื•ืฆืื™ื (ื™ื•ืฆืื™ื). ืœื“ื•ื’ืžื”, ืžื“ื™ื ื™ื•ืช ื–ื• ื ืคืชื—ืช ืœื›ืœ ื”ืคื•ื“ื™ื ืžืžืจื—ื‘ ื”ืฉืžื•ืช 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 ืœืื ืฉื™ ืื‘ื˜ื—ื”

ื‘ื•ืจืจ ื”ืคื•ื“ ื”ืจื™ืง ื‘ื“ื•ื’ืžื” ื–ื• ืคื™ืจื•ืฉื• "ื‘ื—ืจ ืืช ื›ืœ ื”ืคื•ื“ื™ื ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช."

ืžื“ื™ื ื™ื•ืช ื–ื• ืžืืคืฉืจืช ื’ื™ืฉื” ืจืง ืœ-8.8.8.8; ื’ื™ืฉื” ืœื›ืœ IP ืื—ืจ ืืกื•ืจื”. ืื– ื‘ืขืฆื, ื—ืกืžืช ืืช ื”ื’ื™ืฉื” ืœืฉื™ืจื•ืช ื”-DNS ื”ืคื ื™ืžื™ ืฉืœ Kubernetes. ืื ืืชื” ืขื“ื™ื™ืŸ ืจื•ืฆื” ืœืคืชื•ื— ืื•ืชื•, ืฆื™ื™ืŸ ื–ืืช ื‘ืžืคื•ืจืฉ.

ื‘ื“ืจืš ื›ืœืœ ipBlocks ะธ podSelectors ืกื•ืชืจื•ืช ื–ื• ืืช ื–ื•, ืžื›ื™ื•ื•ืŸ ืฉืœื ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ื›ืชื•ื‘ื•ืช ื”-IP ื”ืคื ื™ืžื™ื•ืช ืฉืœ ืคื•ื“ื™ื ipBlocks. ืขืœ ื™ื“ื™ ืฆื™ื•ืŸ ืชืจืžื™ืœื™ื ืคื ื™ืžื™ื™ื ืฉืœ IP, ืœืžืขืฉื” ืชืืคืฉืจ ื—ื™ื‘ื•ืจื™ื ืืœ/ืžืคื•ื“ื™ื ืขื ื”ื›ืชื•ื‘ื•ืช ื”ืœืœื•. ื‘ืคื•ืขืœ, ืœื ืชื“ืข ื‘ืื™ื–ื• ื›ืชื•ื‘ืช IP ืœื”ืฉืชืžืฉ, ื•ื–ื• ื”ืกื™ื‘ื” ืฉืืกื•ืจ ืœื”ืฉืชืžืฉ ื‘ื”ื ืœื‘ื—ื™ืจืช ืคื•ื“ื™ื.

ื›ื“ื•ื’ืžื” ื ื’ื“ื™ืช, ื”ืžื“ื™ื ื™ื•ืช ื”ื‘ืื” ื›ื•ืœืœืช ืืช ื›ืœ ื›ืชื•ื‘ื•ืช ื”-IP ื•ืœื›ืŸ ืžืืคืฉืจืช ื’ื™ืฉื” ืœื›ืœ ืฉืืจ ื”ืคื•ื“ื™ื:

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 ืœืื ืฉื™ ืื‘ื˜ื—ื”

ืืชื” ื™ื›ื•ืœ ืœืคืชื•ื— ื’ื™ืฉื” ืจืง ืœื›ืชื•ื‘ื•ืช IP ื—ื™ืฆื•ื ื™ื•ืช, ืœืžืขื˜ ื›ืชื•ื‘ื•ืช ื”-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 ืœืื ืฉื™ ืื‘ื˜ื—ื”

ื™ืฆื™ืื•ืช ื•ืคืจื•ื˜ื•ืงื•ืœื™ื

ื‘ื“ืจืš ื›ืœืœ ืชืจืžื™ืœื™ื ืžืื–ื™ื ื™ื ืœื™ืฆื™ืื” ืื—ืช. ื–ื” ืื•ืžืจ ืฉืืชื” ืคืฉื•ื˜ ืœื ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืžืกืคืจื™ ื™ืฆื™ืื•ืช ื‘ืžื“ื™ื ื™ื•ืช ื•ืœื”ืฉืื™ืจ ื”ื›ืœ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ืขื ื–ืืช, ืžื•ืžืœืฅ ืœื”ื’ื‘ื™ืœ ื›ื›ืœ ื”ืืคืฉืจ ืžื“ื™ื ื™ื•ืช, ื›ืš ืฉื‘ืžืงืจื™ื ืžืกื•ื™ืžื™ื ืขื“ื™ื™ืŸ ืชื•ื›ืœ ืœืฆื™ื™ืŸ ื™ืฆื™ืื•ืช:

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 ื‘ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช.

ืžื ื’ื ื•ืŸ ื›ื–ื” ืฆืจื™ืš ืœื”ื™ื—ืฉื‘ ืœื ืื•ืคื˜ื™ืžืœื™: ืื ื”ืžื‘ื ื” ื”ืคื ื™ืžื™ ืฉืœ ื”ืฉื™ืจื•ืช (ื”ื™ืฆื™ืื•ืช ืฉื”ืคื•ื“ื™ื ืžืื–ื™ื ื™ื) ืžืฉืชื ื”, ื™ื”ื™ื” ืฆื•ืจืš ืœืขื“ื›ืŸ ืืช ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช.

ื’ื™ืฉื” ืื“ืจื™ื›ืœื™ืช ื—ื“ืฉื” ื‘ืืžืฆืขื•ืช Service Mesh (ืœื“ื•ื’ืžื”, ืจืื” ืขืœ Istio ืœื”ืœืŸ - ืชืจื’ื•ื ื‘ืขืจืš) ืžืืคืฉืจ ืœืš ืœื”ืชืžื•ื“ื“ ืขื ื‘ืขื™ื” ื–ื•.

ื”ืื ื™ืฉ ืฆื•ืจืš ืœืจืฉื•ื ื’ื Ingress ื•ื’ื Egress?

ื”ืชืฉื•ื‘ื” ื”ืงืฆืจื” ื”ื™ื ื›ืŸ, ื›ื“ื™ ืฉืคื•ื“ A ื™ืชืงืฉืจ ืขื ืคื•ื“ B, ื™ืฉ ืœืืคืฉืจ ืœื• ืœื™ืฆื•ืจ ื—ื™ื‘ื•ืจ ื™ื•ืฆื (ื‘ืฉื‘ื™ืœ ื–ื” ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ืžื“ื™ื ื™ื•ืช ื™ืฆื™ืื”), ื•ืคื•ื“ B ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืงื‘ืœ ื—ื™ื‘ื•ืจ ื ื›ื ืก ( ืœืฉื ื›ืš, ื‘ื”ืชืื, ืืชื” ืฆืจื™ืš ืžื“ื™ื ื™ื•ืช ื›ื ื™ืกื”).

ืขื ื–ืืช, ื‘ืคื•ืขืœ, ืืชื” ื™ื›ื•ืœ ืœื”ืกืชืžืš ืขืœ ืžื“ื™ื ื™ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืชืืคืฉืจ ื—ื™ื‘ื•ืจื™ื ื‘ืื—ื“ ื”ื›ื™ื•ื•ื ื™ื ืื• ื‘ืฉื ื™ ื”ื›ื™ื•ื•ื ื™ื.

ืื ืื™ื–ื” ืชืจืžื™ืœ-ืžืงื•ืจ ื™ื™ื‘ื—ืจ ืขืœ ื™ื“ื™ ืื—ื“ ืื• ื™ื•ืชืจ ื™ึฐืฆึดื™ืึธื”-ืคื•ืœื™ื˜ื™ืงืื™ื, ื”ื”ื’ื‘ืœื•ืช ืฉื™ื•ื˜ืœื• ืขืœื™ื• ื™ื™ืงื‘ืขื• ืœืคื™ ื ื™ืชื•ืงื. ื‘ืžืงืจื” ื–ื”, ืชืฆื˜ืจืš ืœืืคืฉืจ ื‘ืžืคื•ืจืฉ ื—ื™ื‘ื•ืจ ืœืชืจืžื™ืœ -ืœื ืžืขืŸ. ืื ืคื•ื“ ืœื ื ื‘ื—ืจ ืขืœ ื™ื“ื™ ืžื“ื™ื ื™ื•ืช ื›ืœืฉื”ื™, ืชืขื‘ื•ืจื” ื™ื•ืฆืืช (ื™ืฆื™ืื”) ืฉืœื• ืžื•ืชืจืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.

ื‘ืื•ืคืŸ ื“ื•ืžื”, ื’ื•ืจืœื• ืฉืœ ื”ืชืจืžื™ืœ ื”ื•ืื ึดืžืขึธืŸ, ืฉื ื‘ื—ืจ ืขืœ ื™ื“ื™ ืื—ื“ ืื• ื™ื•ืชืจ ื—ื“ื™ืจื”-ืคื•ืœื™ื˜ื™ืงืื™ื, ื™ื™ืงื‘ืขื• ืœืคื™ ื ื™ืชื•ืงื. ื‘ืžืงืจื” ื–ื”, ืขืœื™ืš ืœืืคืฉืจ ืœื• ื‘ืžืคื•ืจืฉ ืœืงื‘ืœ ืชืขื‘ื•ืจื” ืžืชืจืžื™ืœ ื”ืžืงื•ืจ. ืื ืคื•ื“ ืœื ื ื‘ื—ืจ ืขืœ ื™ื“ื™ ืžื“ื™ื ื™ื•ืช ื›ืœืฉื”ื™, ื›ืœ ืชืขื‘ื•ืจืช ื”ื›ื ื™ืกื” ืขื‘ื•ืจื• ืžื•ืชืจืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.

ืจืื” Stateful ืื• Stateless ืœื”ืœืŸ.

ื™ื•ืžื ื™ื

ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืื™ื ื” ื™ื›ื•ืœื” ืœืจืฉื•ื ืชืขื‘ื•ืจื”. ื–ื” ืžืงืฉื” ืœืงื‘ื•ืข ืื ืžื“ื™ื ื™ื•ืช ืคื•ืขืœืช ื›ืžืชื•ื›ื ืŸ ื•ืžืกื‘ืš ืžืื•ื“ ืืช ื ื™ืชื•ื— ื”ืื‘ื˜ื—ื”.

ื‘ืงืจืช ืชืขื‘ื•ืจื” ืœืฉื™ืจื•ืชื™ื ื—ื™ืฆื•ื ื™ื™ื

ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืื™ื ื” ืžืืคืฉืจืช ืœืš ืœืฆื™ื™ืŸ ืฉื ื“ื•ืžื™ื™ืŸ ืžืœื (DNS) ื‘ืžืงื˜ืขื™ ื™ืฆื™ืื”. ืขื•ื‘ื“ื” ื–ื• ืžื•ื‘ื™ืœื” ืœืื™ ื ื•ื—ื•ืช ืžืฉืžืขื•ืชื™ืช ื›ืืฉืจ ืžื ืกื™ื ืœื”ื’ื‘ื™ืœ ืชื ื•ืขื” ืœื™ืขื“ื™ื ื—ื™ืฆื•ื ื™ื™ื ืฉืื™ืŸ ืœื”ื ื›ืชื•ื‘ืช IP ืงื‘ื•ืขื” (ื›ื’ื•ืŸ aws.com).

ื‘ื“ื™ืงืช ืžื“ื™ื ื™ื•ืช

ื—ื•ืžื•ืช ืืฉ ื™ื–ื”ื™ืจื• ืื•ืชืš ืื• ืืคื™ืœื• ื™ืกืจื‘ื• ืœืงื‘ืœ ืืช ื”ืžื“ื™ื ื™ื•ืช ื”ืฉื’ื•ื™ื”. Kubernetes ื’ื ืขื•ืฉื” ืื™ืžื•ืช ืžืกื•ื™ื. ื‘ืขืช ื”ื’ื“ืจืช ืžื“ื™ื ื™ื•ืช ืจืฉืช ื‘ืืžืฆืขื•ืช kubectl, Kubernetes ืขืฉื•ื™ื” ืœื”ืฆื”ื™ืจ ืฉื”ื™ื ืฉื’ื•ื™ื” ื•ืœืกืจื‘ ืœืงื‘ืœ ืื•ืชื”. ื‘ืžืงืจื™ื ืื—ืจื™ื, Kubernetes ืชื™ืงื— ืืช ื”ืคื•ืœื™ืกื” ื•ืชืžืœื ืื•ืชื” ื‘ืคืจื˜ื™ื ื”ื—ืกืจื™ื. ื ื™ืชืŸ ืœืจืื•ืช ืื•ืชื ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื”:

kubernetes get networkpolicy <policy-name> -o yaml

ื–ื›ื•ืจ ืฉืžืขืจื›ืช ื”ืื™ืžื•ืช ืฉืœ Kubernetes ืื™ื ื” ื ื™ืชื ืช ืœื˜ืขื•ื™ื•ืช ื•ืขืฉื•ื™ื” ืœืคืกืคืก ืกื•ื’ื™ื ืžืกื•ื™ืžื™ื ืฉืœ ืฉื’ื™ืื•ืช.

ื”ื•ืฆืื” ืœืคื•ืขืœ

Kubernetes ืื™ื ื” ืžื™ื™ืฉืžืช ืžื“ื™ื ื™ื•ืช ืจืฉืช ื‘ืขืฆืžื”, ืืœื ื”ื™ื ื‘ืกืš ื”ื›ืœ ืฉืขืจ API ื”ืžืขื‘ื™ืจ ืืช ื ื˜ืœ ื”ืฉืœื™ื˜ื” ืœืžืขืจื›ืช ื”ื‘ืกื™ืกื™ืช ื”ื ืงืจืืช ืžืžืฉืง ืจืฉืช Container (CNI). ื”ื’ื“ืจืช ืžื“ื™ื ื™ื•ืช ื‘ืืฉื›ื•ืœ Kubernetes ืžื‘ืœื™ ืœื”ืงืฆื•ืช ืืช ื”-CNI ื”ืžืชืื™ื ื–ื”ื” ืœื™ืฆื™ืจืช ืžื“ื™ื ื™ื•ืช ื‘ืฉืจืช ื ื™ื”ื•ืœ ื—ื•ืžืช ืืฉ ืžื‘ืœื™ ืœื”ืชืงื™ืŸ ืื•ืชื ืขืœ ื—ื•ืžื•ืช ืืฉ. ื–ื” ืชืœื•ื™ ื‘ืš ืœื”ื‘ื˜ื™ื— ืฉื™ืฉ ืœืš CNI ื”ื’ื•ืŸ ืื•, ื‘ืžืงืจื” ืฉืœ ืคืœื˜ืคื•ืจืžื•ืช Kubernetes, ืžืชืืจื— ื‘ืขื ืŸ (ืชื•ื›ืœ ืœืจืื•ืช ืืช ืจืฉื™ืžืช ื”ืกืคืงื™ื ื›ืืŸ - ืžืฉื•ืขืจ. ืขึธื‘ึธืจ.), ื”ืคืขืœ ืžื“ื™ื ื™ื•ืช ืจืฉืช ืฉืชื’ื“ื™ืจ ืขื‘ื•ืจืš CNI.

ืฉื™ื ืœื‘ ืฉ-Kubernetes ืœื ืชื–ื”ื™ืจ ืื•ืชืš ืื ืชื’ื“ื™ืจ ืžื“ื™ื ื™ื•ืช ืจืฉืช ืœืœื ื”-CNI ื”ืžืชืื™ื.

ืžื“ื™ื ื” ืื• ื—ืกืจืช ืžื“ื™ื ื”?

ื›ืœ ื”-CNIs ืฉืœ Kubernetes ืฉื ืชืงืœืชื™ ื‘ื”ื ื”ื ืกื˜ื˜ื™ืกื˜ื™ื™ื (ืœื“ื•ื’ืžื”, Calico ืžืฉืชืžืฉ ื‘-Linux conntrack). ื–ื” ืžืืคืฉืจ ืœืคื•ื“ ืœืงื‘ืœ ืชื’ื•ื‘ื•ืช ืขืœ ื—ื™ื‘ื•ืจ ื”-TCP ืฉื”ื•ื ื™ื–ื ืžื‘ืœื™ ืฆื•ืจืš ืœื”ืงื™ื ืื•ืชื• ืžื—ื“ืฉ. ืขื ื–ืืช, ืื ื™ ืœื ืžื•ื“ืข ืœืชืงืŸ Kubernetes ืฉื™ื‘ื˜ื™ื— ืืžื™ื ื•ืช.

ื ื™ื”ื•ืœ ืžื“ื™ื ื™ื•ืช ืื‘ื˜ื—ื” ืžืชืงื“ื

ื”ื ื” ื›ืžื” ื“ืจื›ื™ื ืœืฉืคืจ ืืช ืื›ื™ืคืช ืžื“ื™ื ื™ื•ืช ื”ืื‘ื˜ื—ื” ื‘-Kubernetes:

  1. ื”ืชื‘ื ื™ืช ื”ืืจื›ื™ื˜ืงื˜ื•ื ื™ืช ืฉืœ Service Mesh ืžืฉืชืžืฉืช ื‘ืžื›ื•ืœื•ืช ืฆื“ื“ื™ื•ืช ื›ื“ื™ ืœืกืคืง ื˜ืœืžื˜ืจื™ื” ืžืคื•ืจื˜ืช ื•ื‘ืงืจืช ืชืขื‘ื•ืจื” ื‘ืจืžืช ื”ืฉื™ืจื•ืช. ื›ื“ื•ื’ืžื” ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืงื—ืช Istio.
  2. ื—ืœืง ืžืกืคืงื™ ื”-CNI ื”ืจื—ื™ื‘ื• ืืช ื”ื›ืœื™ื ืฉืœื”ื ื›ื“ื™ ืœื—ืจื•ื’ ืžืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes.
  3. ืชื•ืคื™ืŸ ืื•ืจืงื” ืžืกืคืง ื ืจืื•ืช ื•ืื•ื˜ื•ืžืฆื™ื” ืฉืœ ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes.

ื—ื‘ื™ืœืช Tufin Orca ืžื ื”ืœืช ืืช ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes (ื•ื”ื™ื ื”ืžืงื•ืจ ืœืฆื™ืœื•ืžื™ ื”ืžืกืš ืœืžืขืœื”).

ืžื™ื“ืข ื ื•ืกืฃ

ืžืกืงื ื”

ืžื“ื™ื ื™ื•ืช ื”ืจืฉืช ืฉืœ Kubernetes ืžืฆื™ืขื” ืกื˜ ื˜ื•ื‘ ืฉืœ ื›ืœื™ื ืœืคื™ืœื•ื— ืืฉื›ื•ืœื•ืช, ืืš ื”ื ืื™ื ื ืื™ื ื˜ื•ืื™ื˜ื™ื‘ื™ื™ื ื•ื™ืฉ ืœื”ื ื“ืงื•ื™ื•ืช ืจื‘ื•ืช. ื‘ื’ืœืœ ื”ืžื•ืจื›ื‘ื•ืช ื”ื–ื•, ืื ื™ ืžืืžื™ืŸ ืฉืžื“ื™ื ื™ื•ืช ืืฉื›ื•ืœื•ืช ืงื™ื™ืžื•ืช ืจื‘ื•ืช ื”ื™ื ื‘ืขื™ื™ืชื™ืช. ืคืชืจื•ื ื•ืช ืืคืฉืจื™ื™ื ืœื‘ืขื™ื” ื–ื• ื›ื•ืœืœื™ื ืื•ื˜ื•ืžืฆื™ื” ืฉืœ ื”ื’ื“ืจื•ืช ืžื“ื™ื ื™ื•ืช ืื• ืฉื™ืžื•ืฉ ื‘ื›ืœื™ ืคื™ืœื•ื— ืื—ืจื™ื.

ืื ื™ ืžืงื•ื•ื” ืฉื”ืžื“ืจื™ืš ื”ื–ื” ื™ืขื–ื•ืจ ืœื ืงื•ืช ื›ืžื” ืฉืืœื•ืช ื•ืœืคืชื•ืจ ื‘ืขื™ื•ืช ืฉืืชื” ืขืœื•ืœ ืœื”ื™ืชืงืœ ื‘ื”ืŸ.

ื .ื‘ ืžื”ืžืชืจื’ื

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”