获取错误“;“未知字段”;serviceName";在io.k8s.api.networking.v1.IngressBackend中;在Kubernetes入口中从v1beta1切换到v1时

获取错误“;“未知字段”;serviceName";在io.k8s.api.networking.v1.IngressBackend中;在Kubernetes入口中从v1beta1切换到v1时,kubernetes,kubectl,kubernetes-ingress,minikube,Kubernetes,Kubectl,Kubernetes Ingress,Minikube,我在入门时使用了以下YAML,并且它有效(并继续有效): apiVersion:networking.k8s.io/v1beta1 种类:入口 元数据: 名称:测试入口 名称空间:测试层 注释: nginx.ingres.kubernetes.io/rewrite-target://$1 规格: 规则: -主持人:mylocalhost.com http: 路径: -路径:/ 后端: serviceName:测试应用程序 服务端口:5000 但是,它告诉我它已被弃用,我应该改用networki

我在入门时使用了以下YAML,并且它有效(并继续有效):

apiVersion:networking.k8s.io/v1beta1 种类:入口 元数据: 名称:测试入口 名称空间:测试层 注释: nginx.ingres.kubernetes.io/rewrite-target://$1 规格: 规则: -主持人:mylocalhost.com http: 路径: -路径:/ 后端: serviceName:测试应用程序 服务端口:5000 但是,它告诉我它已被弃用,我应该改用
networking.k8s.io/v1
。当我这样做(见下文)时,它会抛出一个错误

apiVersion:networking.k8s.io/v1 种类:入口 元数据: 名称:测试入口 名称空间:测试层 注释: nginx.ingres.kubernetes.io/rewrite-target://$1 规格: 规则: -主持人:mylocalhost.com http: 路径: -路径:/ 后端: serviceName:测试应用程序 服务端口:5000 错误

error: error validating "test-ingress.yaml": 
  error validating data: [ValidationError(Ingress.spec.rules[0].http.paths[0].backend): 
    unknown field "serviceName" in io.k8s.api.networking.v1.IngressBackend, 
    ValidationError(Ingress.spec.rules[0].http.paths[0].backend): 
      unknown field "servicePort" in io.k8s.api.networking.v1.IngressBackend]; 
      if you choose to ignore these errors, turn validation off with --validate=false
除了更改API版本,我没有做其他更改

kubectl版本
返回:

Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:30:33Z", GoVersion:"go1.15", Compiler:"gc", Platform:"windows/amd64"}

Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:23:04Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
我认为这包含了你所问的变化

`Ingress` and `IngressClass` resources have graduated to `networking.k8s.io/v1`. Ingress and IngressClass types in the `extensions/v1beta1` and `networking.k8s.io/v1beta1` API versions are deprecated and will no longer be served in 1.22+. Persisted objects can be accessed via the `networking.k8s.io/v1` API. Notable changes in v1 Ingress objects (v1beta1 field names are unchanged):
* `spec.backend` -> `spec.defaultBackend`
* `serviceName` -> `service.name`
* `servicePort` -> `service.port.name` (for string values)
* `servicePort` -> `service.port.number` (for numeric values)
* `pathType` no longer has a default value in v1; "Exact", "Prefix", or "ImplementationSpecific" must be specified
Other Ingress API updates:
* backends can now be resource or service backends
* `path` is no longer required to be a valid regular expression
如果查看,新语法可能是:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

很遗憾,我没有1.19集群来测试自己,但我认为这就是您遇到的问题。

请尝试以下方法:

% minikube addons enable dashboard
% minikube addons enable metrics-server
然后,将
仪表板入口.yaml
中的
apiVersion
更改为:

apiVersion: networking.k8s.io/v1beta1

谢谢,看起来是这样。希望他们能更新高级文档以匹配他们如何能在这些配置文件中进行如此重大的更改!无法想象那些负责在kubernetes上维护许多复杂部署结构的人会有多么痛苦@lyrio,因为它之前只是测试版,现在是完整版。请注意,以前它是
networking.k8s.io/v1beta1
,现在是发布的
networking.k8s.io/v1
Hi Abdul。欢迎来到Stack Overflow,感谢您的贡献。当你的答案被否决时,这可能会令人沮丧。别这样。这仅仅意味着其他人没有发现这个答案与被问的问题很匹配。你可以(如果你想)删除你的答案(如果你也同意它是不正确的,不会帮助别人),或者让它继续。两种方法都没有坏处。与迈出第一步相反,我期待你们为回答其他问题做出贡献。有时候,问题就是答案。谢谢你的提问。