برنامه نویسی

اشتباه تایپی باعث تفاوت در فایل 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، دو محدودیت مجزا برای خروج ارائه می دهد:

  1. اجازه می دهد تا ترافیک به تمام پادها در فضای نام space2 بدون تعیین هیچ پورتی
  2. اجازه می دهد تا ترافیک به هر مقصدی در پورت های 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 زمینه

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا