首页 > 解决方案 > 如何将服务生成的 nodePort 注入到部署中?

问题描述

我正在尝试将基于 Netflix OSS 的应用程序迁移到 Kubernetes,所以我发现的理想方法是创建 NodePort 类型的服务并将应用程序注册到 Eureka。所以我在做 eureka.hostname=hostIP 和 eureka.nonSecurePort=nodePort

这是我所做的 -

  1. 使用服务类型 NodePort 为 sample-app-service 创建一个服务。

  2. 通过运行命令 kubectl create configmap saas-event-reception-config --from-literal=nodePort=$(kubectl get -o jsonpath="{.spec.ports[0].nodePort}" 将节点端口注入 ConfigMap services sample-app-service)(问题:有没有办法可以将其指定为 yaml?)

  3. 使用部署 yaml 中的 configMapKeyRef 引用 nodePort。

我面临的问题是在自动化部署期间。因此,理想情况下,我希望使用包含 Service、ConfigMap 和 Deployment 的单个部署文件来部署应用程序。有没有办法可以优雅地做到这一点?或者是否有任何替代建议可以做到这一点。

我也在看 helm 但即使我使用 --set 通过运行命令将 nodePort 传递给 ConfigMap (kubectl get -o jsonpath="{.spec.ports[0].nodePort}" services sample-app- service) 必须首先部署 Service,以便 ConfigMap 获取 nodePort 值。有没有办法我可以做到这一点?

标签: spring-bootkubernetesnetflix-eurekakubernetes-helm

解决方案


您可以做的是在您的服务 yaml 文件中的服务节点端口范围(默认为 30000-32767)中指定一个端口ports,名称为nodePort. 然后你会提前知道nodePort。您可以使用 helm 传入 nodePort 以用作参数,以便在 Service yaml 以及您的 ConfigMap 和 Deployment 中使用此参数。


推荐阅读