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

时间:2018-08-23 14:23:13

标签: kubernetes apache-kafka apache-kafka-streams

我正在Kubernetes上部署Kafka Streams应用程序,该应用程序被复制为多个Pod。该Pod作为Kubernetes服务公开,因此我有一个公共入口来负载平衡流量:myapp:8080

重点是我想运行一个可以是远程的交互式查询,因此我已经根据documentation

进行了设置

Web层由运行在端口8080上的spring boot应用程序提供。

我的问题是如何动态配置application.server参数,每个pod具有唯一的端点。

更新:

我想我需要用分配给每个Pod的kubernetes端点的值配置application.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端点?

1 个答案:

答案 0 :(得分:0)

我已经可以通过以下方式将其添加为环境变量来获取每个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"));