اشتباه تایپی باعث تفاوت در فایل 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
زمینه