kubernetes CRD验证规则:转义字符会覆盖名称为转义格式的字段,

gj3fmq9x  于 6个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(47)

发生了什么?

在 CRD 验证规则中,有一个 CEL 保留关键字列表,这些关键字会应用转义规则。
例如,对于 CRD 模式:

spec:
  ref:
    name: myName
    namespace: myNamespace

由于 namespace 是一个保留关键字,因此需要在 CEL 表达式中使用 __namespace__ 以遵循转义规则,如 self.ref.__namespace__ != ""。但是,如果已经存在与转义格式冲突的字段名,它将被覆盖。
例如,对于 CRD 模式

spec:
  ref:
    name: myName
    namespace: myNamespace 
    __namespace__: 10

字段名 __namespace__ 将被覆盖,因此 __namespace__ 的值将丢失。

你期望发生什么?

任何字段名的值不应该丢失。

我们如何尽可能精确地重现它?

编写包含任何保留关键字和该关键字转义格式的 CRD 模式,并将其用于验证规则中。

我们需要了解其他信息吗?

  • 无响应*

Kubernetes 版本

$ kubectl version
# paste output here

云提供商

OS 版本

# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here

# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here

安装工具

容器运行时(CRI)和版本(如适用)

相关插件(CNI、CSI 等)和版本(如适用)

xriantvc

xriantvc1#

这个问题目前正在等待分类。
如果SIG或子项目确定这是一个相关的问题,他们将通过应用triage/accepted标签并提供进一步的指导来接受它。
组织成员可以通过在评论中写入/triage accepted来添加triage/accepted标签。
有关使用PR评论与我互动的说明,请查看here。如果您对我的行为有任何问题或建议,请针对kubernetes-sigs/prow仓库提出一个问题。

yizd12fk

yizd12fk2#

今天,namespace 无法在CEL表达式中作为字段名使用,因为如果CRD字段名为namespace,我们要求在CEL中使用转义形式(__namespace__)来访问字段。
为了与现有表达式保持向后兼容并支持将来直接使用namespace,我认为我们可以通过namespace__namespace__同时支持访问namespace(以及所有关键字匹配的字段名),并保持所有其他(双引号、三引号等转义名称)不变。

相关问题