Java игнорирует настройки прокси http - PullRequest
1 голос
/ 07 мая 2020

У меня есть 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/ но спешите Я потерял полчаса, чтобы выучить этот труд.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...