如何评估Kubernetes环境变量



我有一个web应用程序,它有一个服务器端UI组件,需要与另一个暴露REST接口的组件通信。UI需要知道REST组件公开的端点的地址。

当UI启动时,我设置了一个包含REST端点主机和端口的环境变量(ADDRESS_SERVICE_URI)。

我现在想把这个应用程序部署到Kubernetes中,但是我想在Kubernetes的应用程序代码中不强制任何依赖。我希望使用Kubernetes公开的环境变量来帮助发现服务,所以我在UI的部署描述中有以下内容

env:
- name: ADDRESS_SERVICE_URI
  value: http://${REST_SERVICE_HOST}:${REST_SERVICE_PORT}

我希望环境变量将被Kuberbetes评估,但它们似乎是通过"按原样"传递给我的应用程序代码,因为我在代码执行时得到以下异常:

java.lang.IllegalArgumentException: Illegal character in authority at index 7: http://${REST_SERVICE_HOST}:${REST_SERVICE_PORT}/addresses/postcode/WA11
    java.net.URI.create(URI.java:852)
    com.sun.jersey.api.client.Client.resource(Client.java:434)
    uk.gov.dwp.digital.addresslookup.dao.impl.PostCodeDAOImpl.byPostCode(PostCodeDAOImpl.java:44)
    uk.gov.dwp.digital.addresslookup.service.impl.PostCodeServiceImpl.byPostcode(PostCodeServiceImpl.java:17)
    uk.gov.dwp.digital.addresslookup.controllers.PostCodeController.processSearchRequest(PostCodeController.java:83)
    uk.gov.dwp.digital.addresslookup.controllers.PostCodeController.executeSearch(PostCodeController.java:59)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

是否有可能评估Kubernetes环境变量,或者我是否需要修改我的代码以期望变量作为两个独立的变量呈现给它,并使用Kubernetes规定的名称?

由于env似乎只支持键:值对,您最好的选择是在启动应用程序之前使用ENTRYPOINT脚本预填充您的ENV。

Dockerfile

FROM yourbaseimage
COPY entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh

#!/bin/bash
export ADDRESS_SERVICE_URI="http://${REST_SERVICE_HOST}:${REST_SERVICE_PORT}"
exec "$@"

最新更新