繁体   English   中英

为什么我不能将服务类型 ClusterIP 附加到 GKE 上的 Ingress?

[英]Why can't I attach a service type ClusterIP to Ingress on GKE?

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

如果我的服务是 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"仍然无法正常工作。

原生 GKE 入口 controller 不支持ClusterIP ,但它与LoadBalancerNodePort类型完美配合。 看看这个问题

非本地入口 controller NginxClusterIP一起使用。

这很正常,而且你有错误的原因很简单。

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

现在为什么它不支持 ClusterIP 是因为当你创建入口时,在谷歌云中创建的 LB 资源需要在你的集群上调用一个目标端口,为此你需要为它公开一个 ip/port。

我不建议将 LB 服务(默认情况下在云提供商上创建一个 LB)和入口结合起来,但留在更清洁的节点端口/入口二重奏上。

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

使用类似这样的东西。根据您的方便使用类型的 NodPort 或 LoadBalancer。

spec:
  ports:
    - protocol: TCP
      port: XX
      targetPort: XX
  type: NodePort

您可以通过将注释cloud.google.com/neg: '{"ingress": true}'设置为服务来使用Ingress访问 GKE 中的ClusterIP

apiVersion: v1
kind: Service
metadata:
  name: myapp
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
...

另请参阅相关问题Why does Google Cloud show an error when using ClusterIP中的回答https://stackoverflow.com/a/68271142

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM