如何在 Google Cloud Platform 上使用 ClusterIP None 公开 StatefulSet 服务?
How can I expose a StatefulSet service with ClusterIP None on Google Cloud Platform?
如何在 Google 云平台的 Kubernetes 上使用 ClusterIP=None
公开 StatefulSet 服务(cassandra、mysql 等...)?
我需要更改 ClusterIP 配置吗?或者我需要配置 Google Cloud NAT?或者我需要改变其他东西?
谢谢
编辑:我想从互联网上的任何地方从外部 IP 连接到 cassandra
EDIT2:我猜解决方案是使用LoadBalance
而不是ClusterIP
,但是当我使用LoadBalance
时,Cassandra 节点找不到种子节点。然后我仍然使用 ClusterIP=None
到 Cassandra 集群,我创建了另一个带有 type=LoadBalance
的 POD 来连接到 Cassandra 并连接到外部。现在它开始工作了:)
ClusterIP 服务不会暴露在 Kubernetes 集群之外。也许您的意思是改用 NodePort 或 LoadBalancer 服务?
如果“expose”是指无需集群 IP 即可到达服务端点的能力,那么只需使用 selector
在你的无头服务中,即
apiVersion: v1
kind: Service
metadata:
name: cassandra
spec:
clusterIP: None
selector:
app: cassandra
ports:
- port: 80
targetPort: 80
更多详情请参考documentation
否则,如果您想在集群外公开您的部署,您将无法使用无头服务来完成。
如果您想在外部公开服务,您将需要一个支持 ClusterIP 的服务,无论是 NodePort 还是 LoadBalancer;即使您使用入口,您也至少需要使用 ClusterIP 服务对其进行备份。
ClusterIP 只是内部的,它为 Kubebernetes 集群提供了一个固定端点来引用您的 deployment/pod 内部 。公开您的服务的最简单方法是使用 NodePort
,在这种情况下,您的服务将采用具有高端口号 (30000+) 的外部节点的 IP。在 GCP 上,如果您定义 load-balancer
,您将获得一个外部 IP,并且流量将按顺序转发到有状态集中的 pods。如果您使用入口,您的外部 IP 将是您入口的 IP,并且将根据请求 URL 将数据包转发到您的服务(即,您可以将多个 FQDN 映射到一个外部 IP你的 DNS)。
"Headless" 服务主要用于将你的设计与 Kubernetes 解耦。假设您将进行自己的服务发现,我认为这对您的应用程序来说不是一个好的用例。
希望对您有所帮助!
如何在 Google 云平台的 Kubernetes 上使用 ClusterIP=None
公开 StatefulSet 服务(cassandra、mysql 等...)?
我需要更改 ClusterIP 配置吗?或者我需要配置 Google Cloud NAT?或者我需要改变其他东西?
谢谢
编辑:我想从互联网上的任何地方从外部 IP 连接到 cassandra
EDIT2:我猜解决方案是使用LoadBalance
而不是ClusterIP
,但是当我使用LoadBalance
时,Cassandra 节点找不到种子节点。然后我仍然使用 ClusterIP=None
到 Cassandra 集群,我创建了另一个带有 type=LoadBalance
的 POD 来连接到 Cassandra 并连接到外部。现在它开始工作了:)
ClusterIP 服务不会暴露在 Kubernetes 集群之外。也许您的意思是改用 NodePort 或 LoadBalancer 服务?
如果“expose”是指无需集群 IP 即可到达服务端点的能力,那么只需使用 selector
在你的无头服务中,即
apiVersion: v1
kind: Service
metadata:
name: cassandra
spec:
clusterIP: None
selector:
app: cassandra
ports:
- port: 80
targetPort: 80
更多详情请参考documentation
否则,如果您想在集群外公开您的部署,您将无法使用无头服务来完成。
如果您想在外部公开服务,您将需要一个支持 ClusterIP 的服务,无论是 NodePort 还是 LoadBalancer;即使您使用入口,您也至少需要使用 ClusterIP 服务对其进行备份。
ClusterIP 只是内部的,它为 Kubebernetes 集群提供了一个固定端点来引用您的 deployment/pod 内部 。公开您的服务的最简单方法是使用 NodePort
,在这种情况下,您的服务将采用具有高端口号 (30000+) 的外部节点的 IP。在 GCP 上,如果您定义 load-balancer
,您将获得一个外部 IP,并且流量将按顺序转发到有状态集中的 pods。如果您使用入口,您的外部 IP 将是您入口的 IP,并且将根据请求 URL 将数据包转发到您的服务(即,您可以将多个 FQDN 映射到一个外部 IP你的 DNS)。
"Headless" 服务主要用于将你的设计与 Kubernetes 解耦。假设您将进行自己的服务发现,我认为这对您的应用程序来说不是一个好的用例。
希望对您有所帮助!