为什么明显畸形的 yaml 是有效的?
Why is the apparently malformed yaml the one that validates?
在下面的第一个 yaml 中,第二个 podSelector
子句(在 to
下)似乎格式正确,matchLabels
有两个空格缩进,与标准和其余部分一致yaml.
第二个yaml是一样的,但是matchLabels
有四个空格。此格式遵循 the Kubernetes documentation.(没有制表符。)
然而第一个 yaml 失败 kubectl
验证 错误验证 "p.yaml":错误验证数据:ValidationError(NetworkPolicy.spec.egress[0].to[0]): 未知字段"matchLabels" in io.k8s.api.networking.v1.NetworkPolicyPeer,第二个passes 验证。
这没有通过验证:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: internal-policy
spec:
podSelector:
matchLabels:
name: internal
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
name: mysql
这通过了验证:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: internal-policy
spec:
podSelector:
matchLabels:
name: internal
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
name: mysql
那么文档是错误的。 matchLabels 确实是 podSelector 下的哈希的子键。请在文档上打开一个问题,以便我们修复它:)
显然 matchLabels
应该是 podSelector
映射值中的一个键,因此它必须缩进更多。这个:
- podSelector:
matchLabels:
将 matchLabels
置于与 podSelector
相同的缩进级别,因为根据 YAML 规范,初始 -
被视为缩进的一部分。基本上,这里定义了两个缩进级别:
- 序列的层级,从
-
开始。所有后续序列项的 -
必须处于同一级别。
- 映射的级别,它是序列的一个值,从
p
开始。映射的所有后续键必须从同一级别开始。
因此,如果想让matchLabels
嵌套在podSelector
中,就必须多缩进:
- podSelector:
matchLabels:
在下面的第一个 yaml 中,第二个 podSelector
子句(在 to
下)似乎格式正确,matchLabels
有两个空格缩进,与标准和其余部分一致yaml.
第二个yaml是一样的,但是matchLabels
有四个空格。此格式遵循 the Kubernetes documentation.(没有制表符。)
然而第一个 yaml 失败 kubectl
验证 错误验证 "p.yaml":错误验证数据:ValidationError(NetworkPolicy.spec.egress[0].to[0]): 未知字段"matchLabels" in io.k8s.api.networking.v1.NetworkPolicyPeer,第二个passes 验证。
这没有通过验证:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: internal-policy
spec:
podSelector:
matchLabels:
name: internal
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
name: mysql
这通过了验证:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: internal-policy
spec:
podSelector:
matchLabels:
name: internal
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
name: mysql
那么文档是错误的。 matchLabels 确实是 podSelector 下的哈希的子键。请在文档上打开一个问题,以便我们修复它:)
显然 matchLabels
应该是 podSelector
映射值中的一个键,因此它必须缩进更多。这个:
- podSelector:
matchLabels:
将 matchLabels
置于与 podSelector
相同的缩进级别,因为根据 YAML 规范,初始 -
被视为缩进的一部分。基本上,这里定义了两个缩进级别:
- 序列的层级,从
-
开始。所有后续序列项的-
必须处于同一级别。 - 映射的级别,它是序列的一个值,从
p
开始。映射的所有后续键必须从同一级别开始。
因此,如果想让matchLabels
嵌套在podSelector
中,就必须多缩进:
- podSelector:
matchLabels: