1. 程式人生 > 其它 >Kubernetes 升級後 ingress api 變化帶來的問題

Kubernetes 升級後 ingress api 變化帶來的問題

將 k8s 從 1.17.0 升級到 1.22.3 之後部署 ingress 時報錯,原來從 1.19 開始 ingress api 版本變成了 `networking.k8s.io/v1`,改為 `networking.k8s.io/v1` 後出現新的報錯,我們新增的 ingress 規則多數是基於域名的,而 v1 版必須要指定 `path` 與 `pathType`

將 k8s 從 1.17.0 升級到 1.22.3 之後部署 ingress 時報錯

error: unable to recognize "cnblogs-ingress.yaml": no matches for kind "Ingress" in version "extensions/v1beta1"

原來從 1.19 開始 ingress api 版本變成了 networking.k8s.io/v1,詳見 https://github.com/kubernetes/kubernetes/issues/90077

改為 networking.k8s.io/v1 後出現新的報錯

missing required field "pathType" in io.k8s.api.networking.v1.HTTPIngressPath

我們新增的 ingress 規則多數是基於域名的,之前正常使用的配置如下

rules:
- host: q.cnblogs.com
  http:
    paths:
      - backend:
          serviceName: q-web
          servicePort: 80

而 v1 版必須要指定 pathpathType,需要改成下面這樣

rules:
- host: q.cnblogs.com
  http:
    paths:
      - path: /
        pathType: Prefix
        backend:
          serviceName: q-web
          servicePort: 80

我們添加了很多這樣的規則,幸好可以通過替換的方式一次修改,不然還挺麻煩,將 - backend: 替換為

- path: /
          pathType: Prefix
          backend:

解決上面的問題後部署又出現新的報錯

unknown field "serviceName" in io.k8s.api.networking.v1.IngressBackend
unknown field "servicePort" in io.k8s.api.networking.v1.IngressBackend

要將

backend:
  serviceName: q-web
  servicePort: 80

改為

backend:
  service:
    name: q-web
    port: 
      number: 80

繼續通過替換進行批量修改,將 serviceName: 替換為

service:
              name:

servicePort: 替換為

  port: 
                number:

搞定!

ingress.networking.k8s.io/cnblogs-ingress configured