【问题标题】:How to access kubernetes application through ingress only如何仅通过 ingress 访问 Kubernetes 应用程序
【发布时间】:2021-07-06 17:55:53
【问题描述】:

我有一个kubernetes 对象如下:

  1. 部署
  2. 在步骤 1 中与该部署一起使用的服务
  3. 在步骤 2 中具有服务后端路径的入口

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

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

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

然后我尝试安装 ningx 入口控制器,一旦部署,它就会在 gcp 中创建另一个负载均衡器。因此,我获得了新创建的负载均衡器的 IP,并切换/更改了用新创建的负载均衡器的 IP 替换 DNS 记录 IP。瞧,它开始工作了。那么这是否意味着ingress 总是需要一个入口控制器才能工作?

【问题讨论】:

    标签: kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress


    【解决方案1】:

    是的,为了让 Ingress 资源正常工作,集群必须运行一个入口控制器。仅创建 Ingress 资源没有任何效果。
    Ingress 控制器负责实现 Ingress,通常使用负载均衡器,这就是您所看到的。

    来自客户端的请求到达 Ingress 托管负载均衡器,该负载均衡器根据原始请求中的主机和路径转发到相应的 Ingress。按照 ingress 中定义的路由规则,请求被转发到服务,从那里到达后端 pod。

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

    当您在资源清单中指定 kind:Ingress 时,您指示 GKE 创建 Ingress 资源。通过包括注释和 支持工作负载和服务,您可以创建自定义 Ingress 控制器。否则,GKE 会进行适当的 Google Cloud API 调用以 创建一个外部 HTTP(S) 负载平衡器。

    您可以阅读有关此here 的更多信息。

    【讨论】:

    • 那么它为什么要创建两个负载均衡器呢?一个给ingress,另一个给ingress controller
    • 我已经编辑了原始答案。正如它在文档中提到的,您可以使用注释和支持工作负载和服务来控制此行为,以创建自定义ingress controller。仅当 ingress 资源未找到 ingress controller 时,GKE 才会创建外部 LB。
    【解决方案2】:

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

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

    1. nginx
    2. 轮廓。 您可以详细了解它们。

    【讨论】:

      猜你喜欢
      • 2021-06-23
      • 2020-12-20
      • 2021-02-02
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      相关资源
      最近更新 更多