kubernetes - Nginx 入口控制器 - 调用 Webhook 失败
问题描述
我在 Ubuntu 虚拟机上使用 kubeadm (v1.18) 建立了一个 k8s 集群。现在我需要添加一个入口控制器。我决定使用 nginx(但我对其他解决方案持开放态度)。我根据文档“bare-metal”部分安装了它:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.31.1/deploy/static/provider/baremetal/deploy.yaml
安装对我来说似乎很好:
kubectl get all -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-admission-create-b8smg 0/1 Completed 0 8m21s
pod/ingress-nginx-admission-patch-6nbjb 0/1 Completed 1 8m21s
pod/ingress-nginx-controller-78f6c57f64-m89n8 1/1 Running 0 8m31s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller NodePort 10.107.152.204 <none> 80:32367/TCP,443:31480/TCP 8m31s
service/ingress-nginx-controller-admission ClusterIP 10.110.191.169 <none> 443/TCP 8m31s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ingress-nginx-controller 1/1 1 1 8m31s
NAME DESIRED CURRENT READY AGE
replicaset.apps/ingress-nginx-controller-78f6c57f64 1 1 1 8m31s
NAME COMPLETIONS DURATION AGE
job.batch/ingress-nginx-admission-create 1/1 2s 8m31s
job.batch/ingress-nginx-admission-patch 1/1 3s 8m31s
但是,在尝试应用自定义 Ingress 时,出现以下错误:
Error from server (InternalError): error when creating "yaml/xxx/xxx-ingress.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post https://ingress-nginx-controller-admission.ingress-nginx.svc:443/extensions/v1beta1/ingresses?timeout=30s: Temporary Redirect
知道有什么问题吗?
我怀疑 DNS,但其他 NodePort 服务按预期工作,并且 DNS 在集群内工作。
我唯一能看到的是我没有此处的文档中提到的 default-http-backend 。但是,根据这个线程,这在我的情况下似乎很正常。
最后但并非最不重要的一点是,我还尝试了使用清单进行安装(在从以前的安装中删除了 ingress-nginx 命名空间之后)和通过 Helm chart 进行安装。它具有相同的结果。
我几乎是 k8s 的初学者,这是我的游乐场集群。所以我也愿意接受替代解决方案,只要我不需要从头开始设置整个集群。
更新:
使用“应用自定义入口”,我的意思是:
kubectl apply -f <myIngress.yaml>
myIngress.yaml 的内容
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /someroute/fittingmyneeds
pathType: Prefix
backend:
serviceName: some-service
servicePort: 5000
解决方案
您可以选择的另一个选项是完全删除 Validating Webhook:
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
我发现我必须在另一个问题上这样做,但解决方法/解决方案也适用于此。
这不是最好的答案;最好的答案是弄清楚为什么这不起作用。但是在某些时候,您会遇到变通方法。
我在 Docker for Mac 上安装,所以我使用了cloud
而不是baremetal
版本:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/cloud/deploy.yaml
推荐阅读
- web-services - WebService InvocationTargetException
- css - 在 ReactJS 的可折叠项中添加不同的 css?
- java - 基于矩阵位置的Gridview项集[行][列]
- angular - 在使用 ngx-datatable 且旋钮不工作的组件的 Storybook 故事之间切换时出现 ViewDestroyedError
- ios - 更改集合内的 tableview 标题高度
- sql - 将多行转换为一 - SQL
- visual-studio-2010 - VB - 如何让 datagridview 列自动格式化颜色?
- python - Beautiful Soup 网页抓取复杂的 html 数据
- java - Android Studio 类名自动完成建议为红色
- android - 在 android studio 中使用 Git 进行备份