问题场景

在编写 Kubernetes 的 ingress controller 入口控制器的配置文件的时候

kubectl apply -f ingress-srv.yaml

报了几个错

  1. no matches for kind “Ingress” in version “networking.k8s.io/v1beta1”

  2. APIVersion 改成 v1 过后,pathType 又不对了

  3. 超级头痛的 ingress 内部访问错误👇🏻

    Error from server (InternalError): error when creating “ingress-srv.yaml”: Internal error occurred: failed calling webhook “validate.nginx.ingress.kubernetes.io”: Post “https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s”: dial tcp 10.102.20.133:443: connect: connection refused

解决

no matches for kind “Ingress” in version “networking.k8s.io/v1beta1”

  • apiVersion: networking.k8s.io/v1beta1 换成
  • apiVersion: networking.k8s.io/v1

APIVersion 改成 v1 过后,pathType 又不对了

是因为版本问题,新版本和旧版本的配置是不一样的
直接上代码

  • 下面是老代码
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: posts.com
      http:
        paths:
          - path: /posts/create
            backend:
              serviceName: posts-clusterip-srv
              servicePort: 4000
          - path: /posts
            backend:
              serviceName: query-srv
              servicePort: 4002
          - path: /posts/?(.*)/comments
            backend:
              serviceName: comments-srv
              servicePort: 4001
          - path: /?(.*)
            backend:
              serviceName: client-srv
              servicePort: 3000
  • 下面是新代码

这两个代码自己比较,主要就是要加个 pathType 以及 name 和 port 要分开
【👉🏻👉🏻👉🏻官网给出的exp】

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: posts.com
      http:
        paths:
          - pathType: Prefix
            path: "/posts/create"
            backend:
              service:
                name: posts-clusterip-srv
                port:
                  number: 4000
          - pathType: Prefix
            path: "/posts"
            backend:
              service:
                name: query-srv
                port:
                  number: 4002
          - pathType: Prefix
            path: "/posts/?(.*)/comments"
            backend:
              service:
                name: comments-srv
                port:
                  number: 4001
          - pathType: Prefix
            path: "/?(.*)"
            backend:
              service:
                name: client-srv
                port:
                  number: 3000

超级头痛的 ingress 内部访问错误

如果不百度和Google,永远都不知道怎么解决

  • kubectl get ValidatingWebhookConfiguration
  • kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
  • 把那个该死的 admission 删掉
  • 然后就正常了
    在这里插入图片描述
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐