如何仅通过ingress访问kubernetes应用

How to access kubernetes application through ingress only

我有一个 kubernetes 个对象如下:

  1. 一次部署
  2. 用于第 1 步部署的服务
  3. 步骤 2 中的服务后端路径入口

我在 GCP 中使用 Kubernetes Engine。一旦我创建了一个 ingress 对象,它就会像往常一样创建一个负载均衡器。

所以我有我的 dns,我添加了一个 A 记录,域名 test1.<my-domain>.co 指向从 ingress

创建的 LoadBalancer 的 IP

但这不起作用。它不加载页面。

然后我尝试安装 ningx 入口控制器,部署后,它在 gcp 中创建了另一个负载平衡器。所以,我得到了那个新创建的负载均衡器的 IP,并且 switched/changed 将 DNS 记录 IP 替换为新创建的负载均衡器的 IP。瞧,它开始工作了。那么这是否意味着 ingress 总是需要入口控制器才能工作?

是的,为了让 Ingress 资源正常工作,集群必须有一个入口控制器 运行。仅创建 Ingress 资源无效。
一个Ingress controller,负责完成Ingress,通常会带一个负载均衡器,就是你看到的。

来自客户端的请求到达 Ingress 管理的负载均衡器,该负载均衡器根据原始请求中的主机和路径转发到相应的 Ingress。按照入口中定义的路由规则,请求从它到达后端的地方转发到服务 pods.

创建自己的负载均衡器的入口资源似乎是 GKE 遵循的行为。来自 GCP 文档

When you specify kind:Ingress in the resource manifest, you instruct GKE to create an Ingress resource. By including annotations and supporting workloads and Services, you can create a custom Ingress controller. Otherwise, GKE makes appropriate Google Cloud API calls to create an external HTTP(S) load balancer.

您可以阅读更多相关内容 here

是的,需要入口控制器来为来自集群外部的用户请求提供服务。 当用户在入口控制器的负载均衡器 IP 上发送请求时,入口控制器从入口资源读取路由并相应地转发用户请求。 入口资源是服务的一部分。意味着对于每项服务,您都需要拥有入口资源,因为入口控制器可以为多个入口资源提供服务。

主要使用两个入口控制器。

  1. nginx
  2. 轮廓。 您可以详细阅读它们。