【问题标题】:Kubernetes Ingress nginx on Minikube failsMinikube 上的 Kubernetes Ingress nginx 失败
【发布时间】:2021-01-29 10:05:39
【问题描述】:

Ubuntu 18.04 上的 minikube v1.13.0 和 Docker 19.03.8 上的 Kubernetes v1.19.0。使用 helm/helmfile ("v3.3.4")。 Ubuntu 虚拟机在运行在 Win10 上的 VM-Workstation 上,网络设置为 NAT,一切都在我的家庭 wifi 网络中。

我正在尝试使用 ingress-backend stable/nginx-ingress 1.36.0 。我在 ingress/charts 文件夹中有 nginx-ingress-1.36.0.tgz,并且我有 ingress/enabled minikube addons enable ingress

在我在 minikube 上启用入口之前,一切都将成功部署(没有错误),但服务/LB 仍处于挂起状态:

  ClusterIP      10.101.41.156    <none>        8080/TCP  

    ingress-controller-nginx-ingress-controller        LoadBalancer   10.98.157.222    <pending>     80:30050/TCP,443:32294/TCP 

在 minikube 上启用入口后,我现在收到 connection refused 错误:

STDERR:
Error: UPGRADE FAILED: cannot patch "ingress-service" with kind Ingress: 
    Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.kube-system.svc:443/extensions/v1beta1/ingresses?timeout=30s": 
    dial tcp 10.105.131.220:443: connect: connection refused
        
COMBINED OUTPUT:
Error: UPGRADE FAILED: cannot patch "ingress-service" with kind Ingress: 
    Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.kube-system.svc:443/extensions/v1beta1/ingresses?timeout=30s":
     dial tcp 10.105.131.220:443: connect: connection refused

我不知道这个 IP 10.105.131.220 是什么 - 看起来像 pvt IP。这不是我的 minikube IP,也不是我的 VM IP 或我的笔记本电脑 IP,我无法 ping 通。

但这一切仍然可以正常部署 - 但负载均衡器仍然显示 pending

更新

我错过了基于documentation 的步骤之一

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml

我停止/删除了minkube并重做了一切,现在错误消失了,但负载均衡器仍然是&lt;pending&gt;

【问题讨论】:

    标签: networking kubernetes kubernetes-helm kubernetes-ingress minikube


    【解决方案1】:

    默认情况下,minikube 等所有解决方案都不会为您提供LoadBalancer。 EKS、Google Cloud、Azure 等云解决方案通过在后台单独运行 LB 自动为您完成。这就是您看到Pending 状态的原因。

    解决方案:

    1. 使用MetalLB on minikube

    MetalLB 挂钩到您的 Kubernetes 集群,并提供网络负载均衡器实现。简而言之,它允许您在不在云提供商上运行的集群中创建 LoadBalancer 类型的 Kubernetes 服务,因此不能简单地连接到付费产品以提供负载均衡器。

    安装:

    kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml
    
    namespace/metallb-system created
    podsecuritypolicy.policy/speaker created
    serviceaccount/controller created
    serviceaccount/speaker created
    clusterrole.rbac.authorization.k8s.io/metallb-system:controller created
    clusterrole.rbac.authorization.k8s.io/metallb-system:speaker created
    role.rbac.authorization.k8s.io/config-watcher created
    clusterrolebinding.rbac.authorization.k8s.io/metallb-system:controller created
    clusterrolebinding.rbac.authorization.k8s.io/metallb-system:speaker created
    rolebinding.rbac.authorization.k8s.io/config-watcher created
    
    1. 使用minikube tunnel

    LoadBalancer 类型的服务可以通过 minikube 隧道公开 命令。它必须在单独的终端窗口中运行以保持 负载均衡器正在运行。终端中的 Ctrl-C 可用于终止 清理网络路由的过程。

    minikube tunnel作为进程运行,在主机上使用集群的IP创建到集群的服务CIDR的网络路由 地址作为网关。隧道命令暴露外部 IP 直接连接到主机操作系统上运行的任何程序。

    【讨论】:

    • 谢谢,好的,我会试试 MetalLB。是的,我最初的理解是你需要一个云提供商来获得一个负载均衡器——但是一些文档表明我可以用 nginx/ingress 来做到这一点。那么这有什么好处 - 我如何/为什么使用这个 nginx/ingress?
    • 我相信你最好创建第二个帖子并询问 nginx/ingress 的使用目的。巨大的话题,你会有很多意见和解释。这个问题是关于非云解决方案中的Pending 状态
    • 尝试实现 metallb,不得不改造我的 helmfile。不得不使用 bitnami/stable。毕竟:MetalLB is now running in the clusteringress-backend bitnami/metallb 0.1.24LoadBalancer Services in your cluster are now available on the IPs you defined in MetalLB's configurationingress-backend default metallb-0.1.24 0.9.3。但我没有看到创建任何负载均衡器 - kubectl get services -o wide --all-namespaces - 我得到了其他所有东西,但没有创建负载均衡器。所以必须调试/研究。
    • 尝试了链接中的 hello world,不起作用 - 负载平衡器显示 nginx LoadBalancer 10.111.44.136 &lt;pending&gt; 80:31009/TCP 10m
    • 配置configmap?
    猜你喜欢
    • 2021-04-29
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多