Kubernetes应用Ingress报错:networking.k8s.io/v1版本无对应资源类型
问题原因分析
1. Kubernetes版本兼容性限制
你的集群是Kubernetes 1.18.9+k3s1,networking.k8s.io/v1版本的Ingress资源是在Kubernetes 1.19版本才正式GA(稳定发布)的。在1.18版本中,Ingress的稳定API版本为extensions/v1beta1或networking.k8s.io/v1beta1,直接使用networking.k8s.io/v1会导致集群无法识别该资源类型。
2. Ingress YAML文件存在多处语法错误
你的argocdingress.yaml有几个致命格式问题:
apiVersion: networking.k8s.io/v1与kind: Ingress写在同一行,YAML要求每个键值对单独成行paths节点下重复定义了path: /和pathType: Prefixbackend部分存在无效文本your text,且service的嵌套格式不符合Kubernetes规范
解决方案
步骤1:修正YAML文件并适配集群API版本
针对K8s 1.18版本,使用networking.k8s.io/v1beta1作为API版本,同时修复所有语法错误,修正后的完整YAML如下:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: argocdingress namespace: argocd annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: argocd.fonepay.com http: paths: - path: / pathType: Prefix backend: serviceName: argocd-server servicePort: http
若集群未启用
networking.k8s.io/v1beta1,也可替换为extensions/v1beta1版本,格式完全一致。
步骤2:重新部署Ingress资源
执行以下命令应用修正后的配置:
kubectl apply -f argocdingress.yaml
步骤3:验证部署结果
检查Ingress是否正常创建:
kubectl get ingress -n argocd
额外说明
若后续将集群升级至1.19+版本,迁移到networking.k8s.io/v1版本的Ingress时,需注意:
backend字段需改为service嵌套结构,格式为service: { name: xxx, port: { number: xxx } }- 必须明确指定
pathType字段(可选值:ImplementationSpecific、Exact、Prefix)
内容的提问来源于stack exchange,提问作者The Story Teller Nepal
相关产品推荐
相关产品推荐

