اشتباه تایپی باعث تفاوت در فایل yaml NetworkPolicy شد

دو مورد زیر را بررسی کنید networkpolicy فایل yaml np1.yaml و np2.yaml:
# np1.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: np
namespace: space1
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: space2
ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
# np2.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: np
namespace: space1
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: space2
- ports:
- port: 53
protocol: TCP
- port: 53
protocol: UDP
به نظر شبیه است، اما یک اشتباه تایپی کوچک در اینجا باعث نتایج متفاوتی شد.
اگر به دقت بررسی کنیم متوجه خواهیم شد که در np2.yaml، دو محدودیت مجزا برای خروج ارائه می دهد:
- اجازه می دهد تا ترافیک به تمام پادها در فضای نام
space2بدون تعیین هیچ پورتی - اجازه می دهد تا ترافیک به هر مقصدی در پورت های 53 (TCP و UDP) — ترافیک DNS.
“-” قوانین جداگانه ای را در YAML نشان می دهد. در np1.yaml، این دو قانون منطقی هستند OR: اگر با قانون اول (تطابق فضای نام) یا قانون دوم (تطابق پورت ها) مطابقت داشته باشد، ترافیک مطابقت دارد.
در حالی که در np2.yaml، to و ports بخشی از یک قانون واحد هستند که به ترافیک نیاز دارد تا هر دو محدودیت را برآورده کند (تطابق فضای نام و مطابقت پورت)، به معنای واقعی کلمه یک AND رابطه
به طور خلاصه، در np1.yaml دو قانون دارد: egress.to و egress.ports; در np2.yaml فقط یک قانون وجود دارد: egress.to، اما زیر to میدان، وجود دارد egress.to.ports زمینه



