Kubernetes 入口控制器:调用 webhook 失败,拨打 tcp 连接:连接被拒绝

时间:2021-01-19 17:06:21

标签: kubernetes tcp kubernetes-ingress nginx-ingress

我已经在两台 Centos 7 机器上设置了一个 Kubernetes 集群(一个主节点和一个工作节点)。他们有以下IP: 大师:192.168.1.40 工人:192.168.1.41

它们可以通过 SSH 访问,而我没有使用 VPN。对于这两个盒子,我都有 sudo 访问权限。

对于我正在做的工作,我不得不添加一个 Nginx 入口控制器,我这样做了:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/baremetal/deploy.yaml

这个 yaml 文件对我来说似乎很好,并且在尝试将 nginx 入口控制器添加到 kubernetes 集群时很常见。

我在执行上述命令时没有看到任何错误。

但是,当我尝试安装 helm 配置时,例如:

helm install dai eggplant/dai --version 0.6.5 -f dai.yaml --namespace dai

我的 Nginx 入口控制器出现错误:

    W0119 11:58:00.550727   60628 warnings.go:70] extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
Error: 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": dial tcp 10.108.86.48:443: connect: connection refused

我认为这是因为某种 DNS 错误。我不知道 IP 10.108.86.48:443 来自哪里,也不知道如何找到。

我还使用 firewall-cmd 启用了一堆端口。

    [root@manager-node ~]# sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client ssh
  ports: 6443/tcp 2379-2380/tcp 10250/tcp 10251/tcp 10252/tcp 10255/tcp 443/tcp 30154/tcp 31165/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

但是,我的 nginx 入口 pod 似乎也没有启动:

    NAME                                       READY   STATUS              RESTARTS   AGE
ingress-nginx-controller-7bc44b4bb-rwmh2   0/1     ContainerCreating   0          19h

它在几个小时内保持为 ContainerCreating。

任何帮助将不胜感激 - 我还是 Kubernetes 的新手!

1 个答案:

答案 0 :(得分:0)

问题在于,作为 kubectl apply -f 的一部分,您还应用了 ValidatingWebhookConfiguration(检查应用的清单文件)。

有关详细信息,请参阅 Using Admission Controllers | Kubernetes Using Admission Controllers | Kubernetes

您看到的错误是因为您的 Deployment 没有启动,因此配置为它的一部分的 ValidatingWebhook 服务也没有启动,因此 Kubernetes 中的 Validating Controller 每次请求都失败。

            - --validating-webhook=:8443
            - --validating-webhook-certificate=/usr/local/certificates/cert
            - --validating-webhook-key=/usr/local/certificates/key

您的 Pod 很可能由于其他原因无法启动。需要更多信息才能进一步调试。

我建议从应用的清单中删除 ValidatingWebhookConfiguration

您也可以使用

手动删除它
kubectl delete ValidatingWebhookCOnfiguration ingress-nginx-admission

(验证控制器没有命名空间)