[英]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"
仍然无法正常工作。
这很正常,而且你有错误的原因很简单。
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.