【问题标题】:kubectl apply ingress: Unknown field errorkubectl apply ingress:未知字段错误
【发布时间】:2022-01-24 13:38:21
【问题描述】:

我的入口为:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mongoexpress-ingress
spec:
  rules:
  - host: mylocalmongoexpress.com
    http:
      paths:
      - backend:
          serviceName: mongoexpress-service
          servicePort: 8081

当我运行“kubectl apply -f mongoexpress-ingress.yaml”时,出现错误:

错误:验证错误“mongoexpress-ingress.yaml”:验证错误 数据:[ValidationError(Ingress.spec.rules[0].http.paths[0].backend): 未知字段“serviceName”在 io.k8s.api.networking.v1.IngressBackend, ValidationError(Ingress.spec.rules[0].http.paths[0].backend):未知 io.k8s.api.networking.v1.IngressBackend 中的字段“servicePort”, ValidationError(Ingress.spec.rules[0].http.paths[0]):缺少必需的 io.k8s.api.networking.v1.HTTPIngressPath] 中的字段“pathType”;如果你 选择忽略这些错误,关闭验证 --validate=false

浏览网上资源,我在 yaml 文件中找不到问题。

那么我在这里错过了什么?

【问题讨论】:

  • 您是否使用了正确的 apiversion,初始检查看起来像 networking.k8s.io/v1beta1 中引入了这种格式。在 v1 中,我认为您需要在后端定义服务,然后在服务中定义名称和端口

标签: kubernetes kubernetes-ingress kubectl


【解决方案1】:

从 v1beta1 到 v1 的入口规范 has changed。试试:

...
spec:
  rules:
  - host: mylocalmongoexpress.com
     http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: mongoexpress-service
            port:
              number: 8081

【讨论】:

    【解决方案2】:

    作为其他答案的补充,在这种情况下,您始终可以使用kubectl explain,如果您尝试这样做:kubectl explain ingress.spec.rules.http.paths.backend.service --api-version=networking.k8s.io/v1,那么您将得到:

    FIELDS:
       name <string> -required-
         Name is the referenced service. The service must exist in the same
         namespace as the Ingress object.
    
       port <Object>
         Port of the referenced service. A port name or port number is required for
         a IngressServiceBackend.
    

    通过这种方式,您可以轻松找到哪些字段可用于哪些 API 版本中的哪些资源。

    【讨论】:

      【解决方案3】:

      您似乎混合了 Ingress 版本。您声明了 networking.k8s.io/v1,但您的 YAML 块对应于 networking.k8s.io/v1beta1 - 自 1.22 起不再可用。

      v1beta1

      - backend:
          serviceName: mongoexpress-service
          servicePort: 8081
      

      v1

      - backend:
          service:
            name: mongoexpress-service
            port:
              number: 8081
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        • 1970-01-01
        • 2018-06-14
        • 2019-11-18
        • 2019-05-15
        • 1970-01-01
        • 2021-01-15
        相关资源
        最近更新 更多