Quería su orientación sobre un problema al ejecutar un archivo YAML de Kubernetes. Mi versión de kubectl es la siguiente:
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:59:43Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"windows/amd64"} Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.14", GitCommit:"89182bdd065fbcaffefec691908a739d161efc03", GitTreeState:"clean", BuildDate:"2020-12-18T12:02:35Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}Esta es la última versión descargada del sitio de Kubernetes https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows
El YAML tiene apiVersion: networking.k8s.io/v1 tipo: Ingress y el error al ejecutar el YAML es
no matches for kind "Ingress" in version "networking.k8s.io/v1"El problema de Kubernetes https://github.com/kubernetes/kubernetes/issues/90077 menciona que
networking.k8s.io/v1beta1 == 1.14 to 1.18 networking.k8s.io/v1 = 1.19+Así que supongo que debería estar funcionando bien?
He cambiado la versión de la API a
apiVersion: extensions/v1beta1 or apiVersion: networking.k8s.io/v1beta1pero falla en otra sección del YAML
backend: service: name: {{ template "fullname" $ }}-srv port: number: 80con el error
error al validar datos: ValidationError(Ingress.spec.rules[0].http.paths[0].backend): campo desconocido "servicio" en io.k8s.api.extensions.v1beta1.IngressBackend
Me informan que el mismo YAML funciona en macOS con la misma versión de kubectl (aunque no tengo acceso para verificar eso). ¿Pero alguna idea sobre dónde podría estar yendo mal?
Gracias Prabal
Me gustaría agregar que, de acuerdo con la guía de obsolescencia de K8, las versiones de la API networking.k8s.io/v1beta1 de Ingress ya no se sirven a partir de la v1.22.
Los cambios incluyen:
serviceName de backend se renombra a service.nameservicePort se renombran a service.port.numberservicePort de backend de cadena se renombran a service.port.namepathType para cada ruta especificada. Las opciones son Prefijo, Exacto y Específico de implementación.Lo que significa que necesitamos hacer los siguientes cambios para pasar de esto:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: stackoverflw namespace: stacker spec: rules: - host: example.com http: paths: - backend: serviceName: stacker servicePort: 80A esto (ejemplo):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: stackoverflw namespace: stacker spec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: stacker port: number: 80Para networking.k8s.io/v1beta1 debería ser
backend: serviceName: {{ template "fullname" $ }}-srv servicePort: 80Cómo obtener la documentación:
kubectl explain --api-version=networking.k8s.io/v1beta1 ingress.spec.rules.http.paths.backendPuede usar los siguientes comandos para verificar si el tipo Ingress en la versión networking.k8s.io/v1 está disponible o no en su clúster.
kubectl api-resources #List the API resources that are available. kubectl api-versions #List the API versions that are available.