Kubernetes入口:发生内部错误:调用webhook失败;验证.nginx.ingres.kubernetes.io“;

Kubernetes入口:发生内部错误:调用webhook失败;验证.nginx.ingres.kubernetes.io“;,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,在本地minikube设置中使用K8和入口。从networking.k8s.io/v1 api版本中的yaml文件创建入口失败。请参阅下面的输出。 执行 > kubectl apply -f ingress.yaml 返回 Error from server (InternalError): error when creating "ingress.yaml": Internal error occurred: failed calling webhook "

在本地minikube设置中使用K8和入口。从networking.k8s.io/v1 api版本中的yaml文件创建入口失败。请参阅下面的输出。 执行

> kubectl apply -f ingress.yaml
返回

Error from server (InternalError): error when creating "ingress.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": an error on the server ("") has prevented the request from succeeding
在本地minikube环境中,hyperkit作为vm驱动程序

以下是
ingres.yaml
文件:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mongodb-express-ingress
  namespace: hello-world
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: mongodb-express.local
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: mongodb-express-service-internal
                port:
                  number: 8081
以下是mongodb express部署文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-express
  namespace: hello-world
  labels:
    app: mongodb-express
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb-express
  template:
    metadata:
      labels:
        app: mongodb-express
    spec:
      containers:
        - name: mongodb-express
          image: mongo-express
          ports:
            - containerPort: 8081
          env:
            - name: ME_CONFIG_MONGODB_ADMINUSERNAME
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key: mongodb-root-username
            - name: ME_CONFIG_MONGODB_ADMINPASSWORD
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key: mongodb-root-password
            - name: ME_CONFIG_MONGODB_SERVER
              valueFrom:
                configMapKeyRef:
                  name: mongodb-configmap
                  key: mongodb_url
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb-express-service-external
  namespace: hello-world
spec:
  selector:
    app: mongodb-express
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
      nodePort: 30000
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb-express-service-internal
  namespace: hello-world
spec:
  selector:
    app: mongodb-express
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
更多信息:

> kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:23:52Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}

> minikube version
minikube version: v1.19.0
commit: 15cede53bdc5fe242228853e737333b09d4336b5

> kubectl get all -n hello-world
NAME                                   READY   STATUS    RESTARTS   AGE
pod/mongodb-68d675ddd7-p4fh7           1/1     Running   0          3h29m
pod/mongodb-express-6586846c4c-5nfg7   1/1     Running   6          3h29m

NAME                                       TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/mongodb-express-service-external   LoadBalancer   10.106.185.132   <pending>     8081:30000/TCP   3h29m
service/mongodb-express-service-internal   ClusterIP      10.103.122.120   <none>        8081/TCP         3h3m
service/mongodb-service                    ClusterIP      10.96.197.136    <none>        27017/TCP        3h29m

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mongodb           1/1     1            1           3h29m
deployment.apps/mongodb-express   1/1     1            1           3h29m

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/mongodb-68d675ddd7           1         1         1       3h29m
replicaset.apps/mongodb-express-6586846c4c   1         1         1       3h29m

> minikube addons enable ingress
    ▪ Using image k8s.gcr.io/ingress-nginx/controller:v0.44.0
    ▪ Using image docker.io/jettech/kube-webhook-certgen:v1.5.1
    ▪ Using image docker.io/jettech/kube-webhook-certgen:v1.5.1
Ref: Expecting apiVersion - networking.k8s.io/v1 instead of extensions/v1beta1

TL;DR

kubectl explain predated a lot of the generic resource parsing logic, so it has a dedicated
--api-version
flag. This should do what you want.

kubectl explain ingresses --api-version=networking.k8s.io/v1
kubectl版本 客户端版本:Version.Info{Major:“1”,Minor:“19”,GitVersion:“v1.19.7”,GitCommit:“1dd5338295409edcfff11505e7bb246f0d325d15”,gittrestate:“clean”,BuildDate:“2021-01-13T13:23:52Z”,政府版本:“go1.15.5”,编译器:“gc”,平台:“darwin/amd64”} 服务器版本:Version.Info{Major:“1”,Minor:“20”,GitVersion:“v1.20.2”,GitCommit:“faecb196815e248d3ecfb03c680a4507229c2a56”,gittrestate:“clean”,BuildDate:“2021-01-13T13:20:00Z”,GoVersion:“go1.15.5”,编译器:“gc”,平台:“linux/amd64”} >minikube版本 minikube版本:v1.19.0 提交:15cede53bdc5fe242228853e737333b09d4336b5 >kubectl获得全n hello world 名称就绪状态重新启动 pod/mongodb-68d675ddd7-p4fh7 1/1运行0 3H29米 pod/mongodb-express-6586846c4c-5nfg7 1/1运行6 3H29米 名称类型CLUSTER-IP外部IP端口年龄 服务/mongodb express服务外部负载平衡器10.106.185.132 8081:30000/TCP 3h29m 服务/mongodb express服务内部集群IP 10.103.122.120 8081/TCP 3h3m 服务/mongodb服务集群IP 10.96.197.136 27017/TCP 3h29m 姓名就绪最新可用年龄 deployment.apps/mongodb 1/1 3h29m deployment.apps/mongodb-express 1/1 3h29m 名称所需的当前就绪年龄 replicaset.apps/mongodb-68d675ddd7 1 3h29m replicaset.apps/mongodb-express-6586846c4c 1 3h29m >minikube插件支持入口 ▪ 使用图像k8s.gcr.io/ingress nginx/控制器:v0.44.0 ▪ 使用image docker.io/jettech/kube-webhook-certgen:v1.5.1 ▪ 使用image docker.io/jettech/kube-webhook-certgen:v1.5.1 参考:

TL;DR

kubectl explain早于许多通用资源解析逻辑,因此它有一个专用的
--api版本
标志。这应该是你想要的

# Run without --addons=ingress
sudo minikube start --vm-driver=none #--addons=ingress

# install external ingress-nginx
sudo helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
sudo helm repo update
sudo helm install ingress-nginx ingress-nginx/ingress-nginx

# expose your services

这应该可以解决你的疑问

我和你有同样的问题,你可以看到这个问题

有两种方法可以尝试:

  • ,或返回旧版本
  • 做一件像你说的那样奇怪的事
  • 2.奇怪的事 然后你会发现你的入口缺少端点。然后:

    sudo minikube插件启用入口
    
    在迷你图之后,端点出现。

    问题 如果你通过谷歌搜索带有插件Ingress的示例,你会发现下面缺少的是Ingress


    我也有同样的问题。我使用以下方法成功修复了它:

    kubectl delete-A validatingwebhook配置入口nginx准入

    然后应用yaml文件:


    kubectl apply-f intress\u file.yaml

    如果我正确理解了您的提示,我不太确定。但我不明白这是如何解决我的问题的。使用api版本networking.k8s.io/v1应用上述入口yaml文件失败,输出如上所述。(我在ingress.yaml中没有看到任何未命中的配置)。但是,在api版本networking.k8s.io/v1beta1中使用和应用yaml配置是可行的。尚未尝试api版本扩展/v1beta1,但无论如何,这可能会在不久的将来被放弃。谢谢你的澄清。
    root@ubuntu:~# kubectl get pods -n kube-system 
    NAME                             READY   STATUS    RESTARTS   AGE
    coredns-74ff55c5b-xnmx2          1/1     Running   1          4h40m
    etcd-ubuntu                      1/1     Running   1          4h40m
    kube-apiserver-ubuntu            1/1     Running   1          4h40m
    kube-controller-manager-ubuntu   1/1     Running   1          4h40m
    kube-proxy-k9lnl                 1/1     Running   1          4h40m
    kube-scheduler-ubuntu            1/1     Running   2          4h40m
    storage-provisioner              1/1     Running   3          4h40m