观察:ingress
下spec
的字段值。
情况1:拒绝所有到应用程序的流量。这里的入口将一个空数组作为其值。
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: web-deny-all
spec:
podSelector:
matchLabels:
app: web
ingress: [] # <-- This DENIES ALL traffic
情况2:允许到应用程序的所有流量。在这里,入口将使用空地图的列表项作为其值。
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: web-allow-all
namespace: default
spec:
podSelector:
matchLabels:
app: web
ingress:
- {} # <-- This ALLOWS ALL traffic
我只是想知道,如果我要大声读出上面ingress
的赋值,我该如何读取?
答案 0 :(得分:3)
YAML有两种不同的方式来编写列表(就此而言,大多数其他对象)。如果我们都使用相同的列表语法编写这两种代码,这可能会变得更加清晰:
# deny-all
ingress: []
# allow-all
ingress: [{}]
假定其中一项策略是唯一与问题豆荚匹配的策略。第一个策略在ingress
列表中没有任何项目,第二个策略。 The NetworkPolicySpec API documentation告诉我们
如果流量在其podSelector与该pod匹配的所有NetworkPolicy对象中至少匹配一个入口规则,则允许该Pod流量。
因此,在第一种情况下,该策略与pod匹配,但是没有入口规则,因此至少没有一个匹配的入口规则,因此流量被拒绝。
在第二种情况下,只有一个规则,即空NetworkPolicyIngressRule。其中有两个字段from
和ports
,但是这两个字段的文档都说
如果此字段为空或丢失,则此规则匹配所有[源或端口]
因此,空对象规则匹配所有源和所有端口;并且由于存在匹配的入口规则,因此允许流量。