我使用 helm 来部署集群并包含入口图表依赖项。
apiVersion: v2
name: aloco
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
dependencies:
- name: ingress-nginx
version: "4.7.*"
repository: "https://kubernetes.github.io/ingress-nginx"
Helm 在部署 ingress 时将
aloco
添加到服务名称,而 ingress 则变为 aloco-ingress-nginx-controller-admission
,因为 helm 添加了图表名称。
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default aloco-ingress-nginx-controller LoadBalancer 10.245.104.155 159.223.250.102 80:31357/TCP,443:30712/TCP 12m
default aloco-ingress-nginx-controller-admission ClusterIP 10.245.42.135 <none> 443/TCP 12m
因为helm将chart名称添加到了ingress中,所以我得到了一个错误,
ingress-nginx-controller-admission
未找到
Error: UPGRADE FAILED: failed to create resource: Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=29s": service "ingress-nginx-controller-admission" not found
他们可以选择删除
aloco
或更改 validate.nginx.ingress.kubernetes.io
吗?
如果您的集群上安装了另一个 Nginx 入口控制器,并且该图表的准入 Webhook pod 已关闭或出错,则会出现此错误。或者,就像您的情况一样,看起来其他服务没有正确拆除
原因实际上在于你的输出:
failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=29s": service "ingress-nginx-controller-admission" not found
检查您是否在
ingress-nginx
命名空间中安装了 nginx 图表。
您是否手动删除它而不是通过
helm delete
?您可能会这样做,因为这是保留配置的最常见原因。
要删除阻止安装的 Webhook 配置:
kubectl get validatingwebhookconfigurations
这将列出所有 validatingwebhook 配置。那里应该有一个标记为
ingress-nginx-admission
或类似的。
编辑它或使用
jq
(或使用 -o jsonpath
)确保它指向您已删除的服务(您将在 webhooks[0].clientConfig.service
下看到配置指向的服务)
kubectl edit validatingwebhookconfiguration {name of config}
或
kubectl get validatingwebhookconfigurations {name of config} -o json | jq .webhooks[0].clientConfig.service
如果是指向已删除的服务,您可以将其删除
kubectl delete validatingwebhookconfiguration -n {namespace} {name of config}