У меня есть Java приложений, работающих в Kubernetes. В основном это устаревший код с очень большой кодовой базой. Проблема в том, что почти все приложения используют сторонние библиотеки. Это заставляет Java (или эти библиотеки, если быть точным) игнорировать переменные среды http_proxy
и https_proxy
в контейнере Docker. Он также игнорирует параметры Java.
Из-за большой базы кода и множества зависимостей переписывать его для правильного использования http-прокси - жалкая задача. Мы перенастроили весь связанный с Jsoup код в одном приложении. Это было достаточно легко сделать, но у нас есть гораздо более сложные приложения, и даже некоторые из них вообще не имеют исходного кода.
Итак, есть ли способ сделать систему HTTP-прокси AKA прозрачной для Java? Просто вызовите любой http / s трафик c через прокси.
Я пробовал множество трюков и настроек, но ничего. Имейте в виду, что я не могу установить глобальное правило для узла k8s. Есть несколько приложений, с которыми я не хочу использовать http-прокси.
Любая помощь приветствуется.
ОБНОВЛЕНИЕ:
Запуск Java с:
-Dhttp.proxyHost=my_proxy_ip -Dhttp.proxyPort=my_proxy_port
или:
-Djava.net.useSystemProxies=true
, к сожалению, не работает. Такое жесткое кодирование:
System.setProperty("http.proxyHost", "someUrl");
System.setProperty("http.proxyPort", "somePort");
тоже не работает.
Это потому, что существуют сторонние библиотеки, такие как Jsoup. Если мы не настроим эту библиотеку для использования прокси, этого не произойдет. Только Java -нативные инструменты http правильно используют прокси с такими настройками.
ОБНОВЛЕНИЕ 2:
Даже нежелательно. Я пробовал жестко кодировать прокси в docker демоне. Это было просто отчаяние, и кто-то предложил это, поэтому я сделал это просто для тестирования. По-видимому, все, что он делает, это ... просто устанавливает переменную среды http_proxy
внутри каждого контейнера. Итак, к сожалению, вернемся к началу.
Это ясно написано в пункте 2:
2. When you create or start new containers, the environment variables are set automatically within the container.
здесь: https://docs.docker.com/network/proxy/ но спешите Я потерял полчаса, чтобы выучить этот труд.
Есть идеи?