Kubernetes nginx ingress 在不使用服务的情况下访问集群外部

Kubernetes nginx ingress accesses outside of cluster without using service

抱歉,如果之前已经回答过这个问题,但我对 Ingress Nginx 与服务一起工作感到有点困惑。

我正在尝试在我的 Kubernetes 环境中实施 nginx 入口。 到目前为止,我有一个 ingress-nginx-controller-deployment 设置,以及默认后端的部署和服务。我仍然需要创建我的实际 Ingress 资源、ingress-nginx-controller-service 以及我的后端。

curl <NodeIP> returns "default backend 404" 在部署了 ingress-nginx-controller-deployment 的节点的端口 80 上。 然而,我的理解是,从集群中暴露任何东西都需要一个服务(Nodeport/Loadbalancer),这是 ingress-nginx-controller-service 的职责。

我的问题是这怎么可能,我可以在我的浏览器上访问我的节点的端口 80,这是 集群之外? 然后我可以像上面那样在端口 80 上部署我的后端应用程序吗?

我觉得我误解了这里的一个关键概念。

默认后端图像:gcr.io/google_containers/defaultbackend:1.0

nginx 控制器图像:gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.3

我想你错过了 really good article 关于 nginx-ingress 如何暴露给世界的内容!

我做空: 如果你使用的是 hostNetwork: true 那么你就绕过了 kubernetes 网络(kube-proxy)。简而言之,您绕过容器和编排网络,仅使用主机网络,然后带有 nginx-ingress 容器的节点将向世界公开端口 80。

您可以使用其他方法将 nginx 端口暴露给集群外部(节点端口、网络负载平衡器,如 MetalLB)。