在Kubernetes上运行的spring boot应用程序上为Kafka Streams远程交互查询动态配置application.server参数的想法
我正在Kubernetes上部署一个Kafka Streams应用程序,并将其复制为多个pod。这个pods是作为Kubernetes服务公开的,因此我有一个共同的入口点来平衡流量:myapp:8080 关键是我想运行一个可以远程运行的交互式查询,所以我已经根据 web层由运行在端口8080上的spring引导应用程序提供 我的问题是如何动态配置在Kubernetes上运行的spring boot应用程序上为Kafka Streams远程交互查询动态配置application.server参数的想法,kubernetes,apache-kafka,apache-kafka-streams,Kubernetes,Apache Kafka,Apache Kafka Streams,我正在Kubernetes上部署一个Kafka Streams应用程序,并将其复制为多个pod。这个pods是作为Kubernetes服务公开的,因此我有一个共同的入口点来平衡流量:myapp:8080 关键是我想运行一个可以远程运行的交互式查询,所以我已经根据 web层由运行在端口8080上的spring引导应用程序提供 我的问题是如何动态配置application.serverparam,每个pod有一个唯一的端点 更新: spec: ... template: spec:
application.server
param,每个pod有一个唯一的端点
更新:
spec:
...
template:
spec:
containers:
- env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
...
我想我需要的是使用分配给每个pod的kubernetes端点的值配置应用程序.server
:
$>kubectl get ep
NAME ENDPOINTS AGE
myapp 10.8.2.85:8080,10.8.2.88:8080 10d
- Pod1->
=10.8.2.85:8080application.server
- Pod2->
=10.8.2.88:8080application.server
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/端口,并将其分配给应用程序的每个实例中的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"));
Hi@codependent,当其他Kafka流实例(2个应用程序实例)部署在Kubernetes上时,您在请求调用它们时是否遇到任何访问问题?使用podIP+端口,我得到一个404未找到,用于向外部rest API请求。您的POD是否属于在部署时指定ReplicaSet=2的同一服务的一部分?端口是否与kubectl get svc的local.server.port相同?