



现在我们已经部署了应用程序容器,但目前任何人都无法访问该应用程序。在默认情况下,集群资源仅在集群内可见。要将应用程序暴露给外部,我们需要创建一个Service和负载均衡器(load balancer),以提供外部IP地址并将流量引导到我们的容器中。也就是说,为了实现外部暴露,我们将用到两种Kubernetes资源。第一种是Service,用于为TCP(Transmission Control Protocol,传输控制协议)或UDP(User Datagram Protocol,用户数据报协议)流量提供负载均衡。在本示例中,我们使用的是TCP。第二种是Ingress资源,它基于HTTP路径和主机实现智能路由,为外部的HTTP(S)请求提供负载均衡。你可能会疑惑为什么我们要在这样简单的应用程序上使用复杂的Ingress。在后续章节中你会发现,即使是这样简单的应用程序,也需要处理针对两个不同服务的HTTP请求。此外,在集群边缘创建Ingress将让我们的服务在未来可以更加灵活地进行扩展。
Ingress资源是Kubernetes中较早的资源之一,多年来人们对于它对微服务的HTTP访问建模方式提出了许多问题。这促使开发了适用于Kubernetes的Gateway API。Gateway API被设计为Kubernetes的扩展,需要在你的集群中安装额外的组件。如果你发现Ingress不能满足你的需求,请考虑迁移到Gateway API。
在定义Ingress资源之前,我们需要有一个Service来作为Ingress指向的目标。我们将使用标签(label)来让Service指向上一节中创建的Pod。Service的定义比Deployment要简单得多,如下所示:
定义好Service之后就可以定义Ingress资源了。与Service资源不同的是,Ingress需要集群中有一个运行的Ingress控制器容器。Ingress控制器有多种不同的实现,它或者由云服务提供商提供,或者基于开源服务器实现。如果你选择基于开源服务器实现,nginx或haproxy都是非常流行的选择,并且推荐使用Helm包管理器( https://helm.sh )来进行安装和维护:
有了创建的Ingress资源,我们的应用程序就可以处理从世界各地Web浏览器发出的请求了。接下来,我们将介绍如何设置应用程序以便进行简单的配置和定制。