Kubernetes 1.21集群部署Ingress时报unknown field "data"错误如何解决
问题根因
本次校验报错是YAML资源结构错位导致,并非字段弃用或版本兼容问题。
根据Kubernetes API对networking.k8s.io/v1beta1版本Ingress资源的定义,该资源顶层仅允许存在apiVersion、kind、metadata、spec四个固定字段,不存在名为data的顶层属性。配置中的data块是ConfigMap、Secret这类资源才会使用的顶层字段,被错误放置在Ingress资源的根层级,因此触发集群侧的资源校验失败。
你之前检索不到相关字段弃用说明也符合预期——该字段根本不属于Ingress资源的定义范畴,不存在弃用状态一说。
错位配置的正确归属
你放在data块下的两个配置项,本质都是Nginx Ingress控制器支持的注解参数,不属于Ingress资源本身的结构化字段,正确存放位置是metadata.annotations块下:
- 原
data中的proxy-hide-headers: "Server",对应标准注解键为nginx.ingress.kubernetes.io/proxy-hide-headers - 原
data中的server-tokens: "False",对应标准注解键为nginx.ingress.kubernetes.io/server-tokens
修正后的配置示例
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: test-ingress labels: app: test-ingress annotations: nginx.ingress.kubernetes.io/proxy-body-size: 1024m nginx.ingress.kubernetes.io/proxy-read-timeout: 5000 nginx.ingress.kubernetes.io/session-cookie-conditional-samesite-none: "true" nginx.ingress.kubernetes.io/rewrite-target: / # 原错误data块的内容迁移至注解块下 nginx.ingress.kubernetes.io/proxy-hide-headers: "Server" nginx.ingress.kubernetes.io/server-tokens: "False" spec: rules: # 原有规则定义保持不变
快速校验技巧
- 提交配置前可执行
kubectl apply --dry-run=client做本地模拟校验,无需连接集群即可提前发现这类字段错位问题 - Kubernetes 1.21版本已提供GA稳定版的Ingress API
networking.k8s.io/v1,后续版本升级时可逐步迁移到v1版本API,降低后续v1beta1版本被下线的兼容风险
内容的提问来源于stack exchange,提问作者Kyrylo Liubun
相关产品推荐
相关产品推荐

