使用 nginx 反向代理在 Kubernetes 中公开服务

Posted

技术标签:

【中文标题】使用 nginx 反向代理在 Kubernetes 中公开服务【英文标题】:Exposing a service in Kubernetes using nginx reverse proxy 【发布时间】:2018-12-19 16:17:43 【问题描述】:

我是 Kubernetes 新手,想了解如何将 Kubernetes 中运行的服务暴露给外界。我已经使用集群上的 NodePort 公开了它。 因此,例如:一个服务在主机上公开了 31234 端口,我可以通过 https://kubeserverIP:31234 从另一台服务器访问该服务。

我想要实现的是通过 nginx(在不同的服务器上,不受 Kube 控制)通过 URL 提供此服务,例如,http://service.example.com。我尝试使用指向该服务的上游来部署 nginx,但这不起作用并出现错误的网关错误。

这里有什么我遗漏的吗?或者有没有更简洁的方法来实现这一点。

我有一个裸机安装的 Kubernetes 集群,无法访问 gce 负载均衡器或其他供应商 LB。

谢谢

【问题讨论】:

【参考方案1】:

你快到了!您的下一步将是设置ingress controller。有一个 NGINX Ingress 控制器插件,您可以查看 here。

编辑:这是一个示例配置:https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/complete-example

【讨论】:

在完整的示例链接中,我看不到 ngnix 的配置位置。【参考方案2】:

感谢您指出正确的方向。

基本步骤大致是:

    创建应用及其服务定义。

    为入口创建命名空间。

    创建默认后端部署和服务,用于重定向所有未在 Ingress 规则中定义的请求。在入口空间中创建这些 创建 nginx 入口控制器部署。 创建 RBAC 规则。 最后为具有路径和端口的应用程序创建入口规则。

找到了一个非常有用的指南,其中详细解释了一些事情: https://akomljen.com/kubernetes-nginx-ingress-controller/

【讨论】:

以上是关于使用 nginx 反向代理在 Kubernetes 中公开服务的主要内容,如果未能解决你的问题,请参考以下文章

容器化单页面应用中Nginx反向代理与Kubernetes部署

nginx反向代理背后的grafana

Nginx 反向代理背后的 Grafana 返回 alert.title

K8S(Rancher)Ingress 规则 - Nginx 反向代理重定向

使用 nginx 轻松管理 kubernetes 资源文件

Nginx反向代理的使用及原理