Настроить HTTP-прокси для контейнеров в Kubernetes - PullRequest
0 голосов
/ 17 июня 2020

У меня кластер Kubernetes v1.18.3, а у рабочих - dameon Docker v19.03.6.

Я ищу способ автоматически вводить HTTP_PROXY и HTTPS_PROXY в каждый контейнер, создаваемый Kubernetes.

Я попытался создать файл ~/.docker/config.json, но это не сработало.

Каким будет правильный способ sh этого?

1 Ответ

0 голосов
/ 18 июня 2020

Был заинтересован в вашем случае, даже воспроизведен с теми же версиями docker и k8s ... Использовал официальную Настройте Docker для использования прокси-сервера * Документация 1002 * для установки прокси для docker в ~/.docker/config.json

Настройка клиента Docker На клиенте Docker создайте или отредактируйте файл ~ / .docker / config. json в домашнем каталоге пользователя, запускающего контейнеры. Добавьте JSON, например следующее, заменив тип прокси на httpsProxy или ftpProxy, если необходимо, и подставив адрес и порт прокси-сервера. Вы можете настроить несколько прокси-серверов одновременно.

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "httpsProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

Сохраните файл. Когда вы создаете или запускаете новые контейнеры, переменные среды устанавливаются автоматически внутри контейнера.

Моя конфигурация была:

{
  "proxies": {
    "default": {
      "httpProxy": "http://user:pass@my.proxy.domain.com",
      "httpsProxy": "http://user:pass@my.proxy.domain.com"
    }
  }
}

Итак, в основном после настройки выше в ~/.docker/config.json, прокси-сервер будет автоматически использоваться при запуске новых контейнеров.

В моем случае это сработало, я могу проверить это, используя cli и создав, например, контейнер busybox.

$ docker container run --rm busybox env
HTTP_PROXY=http://user:pass@my.proxy.domain.com
http_proxy=http://user:pass@my.proxy.domain.com
HTTPS_PROXY=http://user:pass@my.proxy.domain.com
https_proxy=http://user:pass@my.proxy.domain.com
HOME=/root

Пожалуйста имейте в виду, что должны быть проблемы со следующей частью:

На клиенте Docker создайте или отредактируйте файл ~ / .docker / config. json в домашнем каталоге пользователя, запускающего контейнеры .

Будьте осторожны с USER, который вы используете, и убедитесь, что ваш HOME env настроен на правильный.

Ссылки на github почти аналогичная проблема и способы ее решения:

1) https://github.com/kubernetes/kubernetes/issues/45487#issuecomment -312042754

Я немного углубился в это, и проблема для меня заключалась в том, что Переменная среды HOME была пуста, когда kubelet был запущен как ystemd unit. Хотя это не задокументировано таким образом, загрузка конфигурации из /root/docker/config.json или /root/.dockercfg требует, чтобы HOME = / root

Настройка User = root в [ Сервисная декларация] исправила это для меня.

2) https://github.com/kubernetes/kubernetes/issues/45487#issuecomment -378116386

3) https://github.com/kubernetes/kubernetes/issues/45487#issuecomment -464516064 (частичная информация)

(3) vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Add User=root
File looks kind of like this
[Service]
User=root
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
(4) Reload and restart kubelet

systemctl daemon-reload
systemctl restart kubelet

Именно в моем случае с нуля все заработало нормально. Так что прочтите внимательно и отметьте пункты, которые я выделил. Скорее всего, у вас очень крошечная проблема / опечатка, потому что она работает должным образом.

Надеюсь, мое расследование вам поможет

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