我正在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
application.server
= 10.8.2.85:8080 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端点?
答案 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"));