如何在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并与外部建立连接。现在它正在工作:)
答案 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分离。假设您将进行自己的服务发现,但我认为这不是您的应用程序的好用例。
希望这会有所帮助!