我有一个Kubernetes v1.18.3集群,而工作人员有一个Docker v19.03.6 dameon。
我正在寻找一种自动将HTTP_PROXY
和HTTPS_PROXY
注入Kubernetes创建的每个容器的方法。
我尝试创建一个~/.docker/config.json
文件,但是没有用。
完成它的正确方法是什么?
答案 0 :(得分:0)
对您的情况感兴趣,甚至使用相同的docker和k8s版本进行复制...
使用官方Configure Docker to use a proxy server文档在~/.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
环境设置正确。
链接到github几乎类似的问题和解决方法:
1)https://github.com/kubernetes/kubernetes/issues/45487#issuecomment-312042754
我对此进行了深入研究,对我来说,问题是家庭 通过kubelet启动时,环境变量为空 系统单位。虽然没有以这种方式记录下来,但是 从/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
就我而言,从头开始一切正常。因此,请仔细阅读并检查我强调的要点。很有可能您的问题/类型非常小,因为它按预期工作。
希望我的调查对您有帮助
答案 1 :(得分:0)
这听起来正确且合乎逻辑,但对我不起作用。
我正在运行 kubernetes 版本“v1.18.6”。数据如下。这失败了。但是为 dockerd 设置与 Env 相同的 http-proxy 是有效的。
admin@str-s6000-acs-13:/etc/systemd/system/kubelet.service.d$ sudo cat /proc/$(pidof kubelet)/environ | tr '\0' '\n'
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/root
LOGNAME=root
USER=root
SHELL=/bin/sh
INVOCATION_ID=fd58e75d7be64758b01e2d8d63fdf7f6
JOURNAL_STREAM=9:11737012
KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf
KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml
KUBELET_KUBEADM_ARGS=--cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.2
admin@str-s6000-acs-13:/etc/systemd/system/kubelet.service.d$ sudo cat /root/.docker/config.json
{
"proxies":
{
"default":
{
"httpProxy": "http://20.72.201.152:3128",
"httpsProxy": "http://20.72.201.152:3128"
}
}
}
admin@str-s6000-acs-13:/etc/systemd/system/kubelet.service.d$
Apr 12 01:14:49 str-s6000-acs-13 dockerd[27360]: time="2021-04-12T01:14:49.630282308Z" level=error msg="Handler for POST /images/create returned error: Get https://sonicanalytics.azurecr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"