kubernetes - 在 Kubernetes 上运行的 Spring Boot 应用程序上为 Kafka Streams 远程交互式查询动态配置 application.server 参数的想法
问题描述
我正在 Kubernetes 上部署一个 Kafka Streams 应用程序,复制为多个 pod。这个 pod 被暴露为 Kubernetes 服务,所以我有一个公共入口点来负载平衡流量:myapp:8080
关键是我想运行一个可能是远程的交互式查询,所以我根据文档进行了设置
Web 层由运行在端口 8080 上的 Spring Boot 应用程序提供。
我的问题是如何application.server
使用每个 pod 的唯一端点动态配置参数。
更新:
我想我需要的是application.server
使用分配给每个 pod 的 kubernetes 端点的值来配置:
$>kubectl get ep
NAME ENDPOINTS AGE
myapp 10.8.2.85:8080,10.8.2.88:8080 10d
- Pod1 ->
application.server
= 10.8.2.85:8080 - Pod2 ->
application.server
= 10.8.2.88:8080
但是打印System.getEnv()
应用程序我只有 kubernetes 服务的 ip 和端口,而不是分配的 pod 端点:
MYAPP_SERVICE_PORT=8080
MYAPP_SERVICE_HOST=10.11.248.5
...
那么如何获取 pod 的 kubernetes 端点呢?
解决方案
通过以这种方式将其添加为环境变量,我已经能够获取每个 pod 的端点 ip:
Kubernetes部署:
spec:
...
template:
spec:
containers:
- env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
...
现在我可以访问 pod ip/port 并将其分配给application.server
应用程序的每个实例中的参数:
private final Environment environment;
@Autowired
public SomeController(Environment environment) {
this.environment = environment;
}
...
props.put(StreamsConfig.APPLICATION_SERVER_CONFIG, System.getEnv("POD_IP") + ":" + environment.getProperty("local.server.port"));
推荐阅读
- asp.net-mvc - 发送网格状态=等待激活
- javascript - 如何在 JQuery 中单击按钮时增加一个值?
- json - 如何将 JSON 文件加载到在 Java 中运行的 Saxon 中的 DOM 中?
- php - 从 php 脚本中提取纯文本字符串进行翻译
- python - 使用 google colab 为基本图像分类 webapp 创建 streamlit webapp 时出错
- visual-studio-code - vscode 在新标签/窗口中显示文档
- google-cloud-platform - 我们有用于 gcp 的 StackStorm 包吗?
- android - 如何修复 Android Studio 中的 React Native 应用程序错误?
- php - 在 WooCommerce 购物车页面上获取显示(浮动)的产品原始价格
- sql-server - 在 Microsoft SQL Server 中按客户查找最大订单