在Kubernetes Ingress中从v1beta1切换到v1时,获取错误“ io.k8s.api.networking.v1.IngressBackend中的未知字段“ serviceName”

问题描述

对于我的Ingress,我使用了以下YAML,并且它可以正常工作(并继续有效):

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: test-layer
annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: mylocalhost.com
      http:
        paths:
          - path: /
            backend:
              serviceName: test-app
              servicePort: 5000

但是,它告诉我它已被弃用,我应该改为使用networking.k8s.io/v1。当我这样做时(见下文),它将引发错误。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: test-layer
annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: mylocalhost.com
      http:
        paths:
          - path: /
            backend:
              serviceName: test-app
              servicePort: 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 version返回:

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",BuildDate:"2020-08-26T14:23:04Z",Platform:"linux/amd64"}

解决方法

我认为此PR包含您要询问的更改。

`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

如果您查看1.19 Ingress doc,看起来新语法将是:

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

然后,将 apiVersion 中的 dashboard-ingress.yaml 更改为:

apiVersion: networking.k8s.io/v1beta1

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...