针对 kubernetes 入口从 v1beta 迁移到 v1 的问题

Sau*_*aha 2 kubernetes kubernetes-helm kubernetes-ingress azure-aks nginx-ingress

在我的公司中,我们的 Kubernetes 集群最近更新到了 1.22+,并且我们正在使用 AKS。因此,我必须更改使用的 ingress yaml 文件的清单:networking.k8s.io/v1beta1,以符合新的 apiVersion:networking.k8s.io/v1

这是入口文件的早期清单:

{{- if .Values.ingress.enabled -}}
{{- $fullName := include "amroingress.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1beta1
{{- else -}}
apiVersion: extensions/v1beta1
{{- end }}
kind: Ingress
metadata:
  name: {{ $fullName }}
  labels:
    {{- include "amroingress.labels" . | nindent 4 }}
  {{- with .Values.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  {{- if .Values.ingress.tls }}
  tls:
    {{- range .Values.ingress.tls }}
    - hosts:
        {{- range .hosts }}
        - {{ . | quote }}
        {{- end }}
      secretName: {{ .secretName }}
    {{- end }}
  {{- end }}
  rules:
    {{- range .Values.ingress.hosts }}
    - host: {{ .host | quote }}
      http:
        paths:
          #{{- range .paths }}
          #- path: {{ . }}
          #  backend:
          #    serviceName: {{ $fullName }}
          #    servicePort: {{ $svcPort }}
          #{{- end }}
          - path: /callista/?(.*)
            backend:
              serviceName: amro-amroingress
              servicePort: 8080
    {{- end }}
  {{- end }}
Run Code Online (Sandbox Code Playgroud)

在我的更改之后,它看起来像这样:

{{- if .Values.ingress.enabled -}}
{{- $fullName := include "amroingress.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
apiVersion: networking.k8s.io/v1
{{- end }}
kind: Ingress
metadata:
  name: {{ include "amroingress.fullname" . }}
  labels:
    {{- include "amroingress.labels" . | nindent 4 }}
  {{- with .Values.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  {{- if .Values.ingress.tls }}
  tls:
    {{- range .Values.ingress.tls }}
    - hosts:
        {{- range .hosts }}
        - {{ . | quote }}
        {{- end }}
      secretName: {{ .secretName }}
    {{- end }}
  {{- end }}
  rules:
    {{- range .Values.ingress.hosts }}
    - host: {{ .host | quote }}
      http:
        paths:
          {{- range .paths }}
          - path: /callista/?(.*)
            pathType: Prefix
            backend:
              service:
                name: amro-amroingres
                port: 
                  number: 8080
    {{- end }}
  {{- end }}

Run Code Online (Sandbox Code Playgroud)

但是,在我进行更改并尝试使用 helm 进行部署后,我收到此错误: Error: UPGRADE FAILED: current release manifest contains removed kubernetes api(s) for this kubernetes version and it is therefore unable to build the kubernetes objects for performing the diff. error from kubernetes: unable to recognize "": no matches for kind "Ingress" in version "networking.k8s.io/v1beta1"

我不确定为什么会发生此错误,即使入口清单已更改并且我已经被困在这个问题上几天了。我对 kubernetes 和 ingress 都很陌生,任何帮助将不胜感激。

sha*_*aws 6

控制平面上的 API 资源已升级,但 helm 中存储的清单(在 Secret 资源内)中的资源是旧的。

这是决议:

$ helm plugin install https://github.com/helm/helm-mapkubeapis 
$ helm mapkubeapis my-release-name --namespace ns
Run Code Online (Sandbox Code Playgroud)

之后helm upgrade再次运行。