从 Kubernetes 部署中公开 SCDF 服务
Posted
技术标签:
【中文标题】从 Kubernetes 部署中公开 SCDF 服务【英文标题】:Exposing SCDF services from a Kubernetes deployment 【发布时间】:2020-01-31 13:31:58 【问题描述】:基本问题是如何从 Kubernetes 集群外部访问 Spring Cloud Data Flow 服务?
默认情况下,SCDF 应用程序将部署为类型为“ClusterIP”的服务。据我了解,“ClusterIP”服务不能从集群中公开? 我尝试按照here 的说明进行操作,即为负载均衡器和节点端口添加部署属性,但服务继续使用“ClusterIP”类型进行部署。
stream deploy test --properties "deployer.http.kubernetes.createLoadBalancer=true"
stream deploy test --properties "deployer.http.kubernetes.createNodePort=32123"
一般来说:部署器属性将应用于流的所有应用程序,难道没有一种很好的方法可以为每个应用程序做这些事情吗?
【问题讨论】:
【参考方案1】:如果您使用 Minikube,您将使用 NodePort
部署一个流,以便在应用启动并运行时通过 HTTP/PORT 与它进行交互。可以使用 deployer.<app-name>.kubernetes.createNodePort=32123
部署属性进行设置。
但是,在真正的 K8s 集群中运行时,您必须使用 deployer.http.kubernetes.createLoadBalancer=true
,因此可以为应用程序自动创建真正的 LB。同样,您将拥有一个外部 IP 来与应用程序交互。
但是,您不应该为给定的应用同时做这两个。这取决于您尝试部署流的 K8s 环境。
上述两个部署属性均可在每个应用或给定流中的所有应用上进行配置。全局设置可以通过deployer.*...
模式触发。
我希望这可以澄清。
【讨论】:
感谢您迄今为止的澄清!由于一些企业法规,我最终得到了一个(最终)工作的“ClusterIP”服务+入口设置。现在出现了一个新问题:服务名称在 Ingress 配置中是硬连线的,这迫使我在每次重新部署后更新 Ingress 配置。这是因为 SCDF 在服务名称上添加了vXXX
后缀。有什么方法/经验来处理这个问题——要么去掉vXXX
后缀,要么拥有某种动态入口?
我最近在 Gitter 中回复了一个类似的要求 - 请参阅 here。我希望这会有所帮助。以上是关于从 Kubernetes 部署中公开 SCDF 服务的主要内容,如果未能解决你的问题,请参考以下文章
SCDF 的 ttlSecondsAfterFinished
Spring Cloud Data Flow (SCDF) + Apache Kafka - 在哪里部署 Kafka 代理?
为从 SCDF 启动的批处理作业创建的 PODS 的 ConfigMap