【问题标题】:Why can't I attach a service type ClusterIP to Ingress on GKE?为什么我不能将服务类型 ClusterIP 附加到 GKE 上的 Ingress?
【发布时间】:2019-10-10 01:25:50
【问题描述】:

在开始之前,我想提一下我正在使用 GKE 的免费试用版。 我有一个在 GKE 集群中运行的简单服务器。我有一项服务用于公开服务器。我正在尝试配置一个入口控制器并将其附加到此服务。

如果我的服务是 LoadBalancer、NodePort 类型,一切都会完美运行。但是,如果我的服务是 ClusterIP 类型,我会收到一条错误消息

error while evaluating the ingress spec: service "default/simple-server" is type "ClusterIP"
, expected "NodePort" or "LoadBalancer" 

GKE 然后停止尝试为入口配置 IP。为什么我不能提供 clusterIP 类型的服务,是否有解决方法?

我尝试过使用annotations.kubernetes.io/ingress.class: "nginx",但还是不行。

【问题讨论】:

  • 我的意思是拥有一个 Ingress 控制器的整个想法是过滤对我的服务器的访问。如果我必须以负载均衡器/节点端口的形式启动服务,我基本上是在为我的 k8 集群打开一个不受保护的直接网关。

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


【解决方案1】:

这很正常,而且很简单为什么会出现错误。

ClusterIP 服务是您的 Kubernetes 集群内部唯一的服务,您尝试创建的(据我所知)是使用 ingress 的公开公开服务,这意味着您将创建一个 Google 负载均衡器。

现在它不支持 ClusterIP 的原因是,当您创建入口时,在 google cloud 中创建的 LB 资源需要集群上的目标端口才能调用,为此您需要为其公开 ip/port .

我不建议将 LB 服务(默认情况下在云提供商上创建一个 LB)和 ingress 结合使用,而是使用更清洁的 nodeport/ingress duo。

奖励:您使用的注释是用于将入口链接到入口控制器的内部服务。这将允许入口控制器列出正确服务的主机和代理流量。

【讨论】:

    【解决方案2】:

    原生 GKE 入口控制器不支持ClusterIP,但它与LoadBalancerNodePort 类型完美配合。看看这个issue

    非本地入口控制器 NginxClusterIP 一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2021-11-07
      相关资源
      最近更新 更多