在Kubernetes上运行的spring boot应用程序上为Kafka Streams远程交互查询动态配置application.server参数的想法

在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:

我正在Kubernetes上部署一个Kafka Streams应用程序,并将其复制为多个pod。这个pods是作为Kubernetes服务公开的,因此我有一个共同的入口点来平衡流量:myapp:8080

关键是我想运行一个可以远程运行的交互式查询,所以我已经根据

web层由运行在端口8080上的spring引导应用程序提供

我的问题是如何动态配置
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->
    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/端口,并将其分配给应用程序的每个实例中的
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相同?