如何在Google Cloud Platform上使用ClusterIP None公开StatefulSet服务?

时间:2019-03-31 23:20:23

标签: kubernetes google-cloud-platform kubernetes-statefulset

如何在Google Cloud Platform的Kubernetes上使用ClusterIP=None公开StatefulSet服务(cassandra,mysql等)?

我需要更改ClusterIP配置吗?还是我需要配置Google Cloud NAT?还是我需要更改其他内容?

谢谢

编辑:我想从外部IP从互联网上的任何地方连接到cassandra

EDIT2:我猜解决方案是使用LoadBalance而不是ClusterIP,但是当我使用LoadBalance时,Cassandra节点找不到种子节点。然后,我使用ClusterIP=None到Cassandra集群,并使用type=LoadBalance创建了另一个POD以连接到Cassandra并与外部建立连接。现在它正在工作:)

3 个答案:

答案 0 :(得分:1)

ClusterIP服务未在Kubernetes集群外部公开。也许您的意思是改为使用NodePort或LoadBalancer服务?

答案 1 :(得分:1)

如果通过“ 公开 ”来表示无需群集IP即可到达服务端点的能力,则只需在无头服务中使用selector,即

apiVersion: v1
kind: Service
metadata:
  name: cassandra
spec:
  clusterIP: None
  selector:
    app: cassandra
  ports:
  - port: 80
    targetPort: 80

有关更多详细信息,请参见documentation

否则,如果要在群集之外公开部署,则将无法使用无头服务。

答案 2 :(得分:1)

如果要在外部公开服务,则需要一个由ClusterIP支持的服务,无论该服务是NodePort还是LoadBalancer。即使您使用入口,也将至少需要使用ClusterIP服务对其进行备份。

ClusterIP仅在内部,并为Kubebernetes集群提供了一个固定端点,以内部引用您的部署/吊舱。公开服务的最简单方法是使用NodePort,在这种情况下,您的服务将在外部使用端口号高(30000+)的节点的IP。在GCP上,如果您定义load-balancer,则将为您提供一个外部IP,并将流量转发到有状态集合中的Pod。如果使用入口,则外部IP将是入口的IP,并且将根据请求URL将数据包转发到服务(即,您可以将多个FQDN映射到DNS中的单个外部IP)。

“无头”服务主要用于将您的设计与Kubernetes分离。假设您将进行自己的服务发现,但我认为这不是您的应用程序的好用例。

希望这会有所帮助!