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

时间:2019-10-10 01:25:50

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

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

如果我的服务是NodeB的LoadBalancer类型,则一切都可以正常工作。但是,如果我的服务属于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",但仍然无法正常工作。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

ClusterIP服务是Kubernetes集群内部的内部唯一服务,而您尝试创建的(根据我的理解)是使用Ingress公开发布的服务,这意味着您将创建Google负载均衡器。

现在不支持ClusterIP的原因是,当您创建入口时,在Google云内部创建的LB资源需要集群上的目标端口可以调用,为此,您需要为其公开IP /端口

我不建议将LB服务(默认情况下在云提供商上创建LB)和入口结合起来,但要放在更干净的nodeport / ingress二人组上。

奖金:您使用的注释用于内部服务,具有入口的链接到入口控制器。这样,入口控制器就可以列出主机和到正确服务的代理流量。

答案 2 :(得分:0)

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

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