2016-07-04 2 views
0

У меня есть веб-приложение с компонентом пользовательского интерфейса на стороне сервера, которому необходимо поговорить с другим компонентом, который предоставляет интерфейс REST. Пользовательский интерфейс должен знать адрес конечной точки, предоставляемой компонентом REST.Как оценить переменные среды Кубернетес

Когда пользовательский интерфейс запускается, я устанавливаю переменную среды (ADDRESS_SERVICE_URI), которая содержит хост и порт конечной точки REST.

Теперь я хочу развернуть это приложение в 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 диктат?

+0

По словам @morloch, используйте надлежащую точку входа, [посмотрите здесь] (https://github.com/kerfab/docker-entrypoint) :-) – Fabien

ответ

1

С envonly appears to support key:value pairs, лучше всего использовать сценарий 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 "[email protected]" 
Смежные вопросы