1

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

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

谢谢

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

EDIT2:我想解决方案是使用LoadBalance而不是ClusterIP,但是当我使用时LoadBalance,Cassandra 节点找不到种子节点。然后我开始使用ClusterIP=NoneCassandra 集群,并创建了另一个 PODtype=LoadBalance来连接到 Cassandra 并连接到外部。现在它正在工作:)

4

3 回答 3

4

如果通过“公开”您的意思是能够在没有集群 IP 的情况下到达您的服务端点,那么只需selector在您的无头服务中使用,即

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

有关更多详细信息,请参阅 文档

否则,如果您想在集群之外公开您的部署,您将无法使用无头服务来实现。

于 2019-04-01T10:34:12.563 回答
2

ClusterIP 服务不会暴露在 Kubernetes 集群之外。也许您的意思是改用 NodePort 或 LoadBalancer 服务?

于 2019-04-01T07:41:49.247 回答
1

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

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

“无头”服务主要用于将您的设计与 Kubernetes 解耦。假设您将进行自己的服务发现,我认为这对您的应用程序来说不是一个好的用例。

希望这可以帮助!

于 2019-04-01T12:30:25.400 回答