
Kubespray 在代理网络环境中怎么配置 http_proxy、https_proxy 与 no_proxy 变量【免费下载链接】kubesprayDeploy a Production Ready Kubernetes Cluster项目地址: https://gitcode.com/GitHub_Trending/ku/kubespray如果你的服务器必须通过公司代理才能访问外部网络那么用 Kubespray 部署 Kubernetes 集群时包管理器装软件、拉取容器镜像、下载 Kubernetes 组件这一步都会失败。Kubespray 把代理支持做成了 inventory 变量在group_vars/all/all.yml中设置http_proxy、https_proxy可选https_proxy_cert_file自定义 CAKubespray 会自动生成no_proxy并在容器运行时和 kubelet 的 systemd drop-in 中写入代理环境变量保证集群内部流量不走代理。本文按“修改 inventory → 理解 no_proxy 自动生成 → 检查 drop-in 落地结果”的顺序说明这一部署配置过程。在 inventory 中设置代理变量Kubespray 自带的样例 inventory 里已经预留了代理变量的注释位编辑 inventory/sample/group_vars/all/all.yml取消对应行注释并填入代理地址## Set these proxy values in order to update package manager and docker daemon to use proxies and custom CA for https_proxy if needed http_proxy: http://example.proxy.tld:port https_proxy: http://example.proxy.tld:port https_proxy_cert_file: 其中http_proxy和https_proxy是必配项格式为http://代理地址:端口。如果你的 HTTPS 代理使用自签证书需要把 CA 放到每一台目标节点上再设置https_proxy_cert_filehttps_proxy_cert_file: /path/to/host/custom/ca.crtCA 路径必须是目标节点上的实际路径这是 docs/advanced/proxy.md 中明确的前提。no_proxy 的自动生成机制只要设置了http_proxy或https_proxy且没有手动设置no_proxyKubespray 会自动生成no_proxy变量逻辑在 roles/network_facts/tasks/main.yaml 的 “Set no_proxy to all assigned cluster IPs and hostnames” 任务中。自动生成的列表包含control plane 节点kube_control_plane以及工作节点kube_node的 IP 和主机名etcd、calico_rr分组节点apiserver_loadbalancer_domain_name与loadbalancer_apiserver.addressLB 域名和地址集群内主机名、127.0.0.1、localhostkube_service_subnets和kube_pods_subnets两个网段svc与svc.{{ dns_domain }}解析名。这保证了集群内部组件apiserver、kubelet、etcd、Pod 间通信之间不经过代理。手动控制 no_proxy 的三种方式按 docs/advanced/proxy.md 的说明有三种覆盖策略按需选择# 方式一完全覆盖自动生成的 no_proxy。 # 设置后 Kubespray 不再追加任何节点和 LB 地址必须自行写全。 no_proxy: node1,node1_ip,node2,node2_ip...additional_host # 方式二保留自动生成的集群节点/LB 列表只追加额外资源 additional_no_proxy: additional_host1,additional_host2 # 方式三默认会把 worker 节点放进 no_proxy导致增删 worker 时 # docker 引擎会在所有节点上重启所有 Pod 重启。 # 如果只想让 control plane 节点进入 no_proxy no_proxy_exclude_workers: true样例 inventory 中的提示修改no_proxy前先参考 roles/kubespray_defaults/defaults/main/main.yml原文注释指向roles/kubespray_defaults/defaults/main/main.yml文档正文写的任务路径roles/kubespray_defaults/tasks/no_proxy.yml在旧版本中存在当前仓库中该逻辑位于上述network_facts角色。代理变量如何落地到节点Kubespray 不是靠 shell 环境传递代理而是为各容器运行时生成 systemd drop-in 文件模板形如 roles/container-engine/containerd/templates/http-proxy.conf.j2[Service] EnvironmentHTTP_PROXY{{ http_proxy }} HTTPS_PROXY{{ https_proxy }} NO_PROXY{{ no_proxy }}各运行时对应的落地路径见各角色 tasks容器运行时drop-in 路径Docker/etc/systemd/system/docker.service.d/http-proxy.confcontainerd{{ containerd_systemd_dir }}/http-proxy.confsystemd 目录下CRI-O/etc/systemd/system/crio.service.d/http-proxy.conf此外 roles/kubespray_defaults/defaults/main/main.yml 定义了proxy_env_defaults把http_proxy、HTTP_PROXY、https_proxy、HTTPS_PROXY、no_proxy、NO_PROXY组合成proxy_env供组件使用如果定义了https_proxy_cert_file会额外向其中加入SSL_CERT_FILE环境变量。验证结果Kubespray 没有单独的“代理检查”命令验证分两步跑通部署。配置完成后正常执行部署如ansible-playbook -i inventory/sample/cluster.yml部署过程中包安装和镜像拉取不再因代理受阻即说明代理链路已通。仓库内置的测试检查见 tests/testcases/tests.yml。检查 drop-in 文件。部署完成后在节点上查看对应运行时的http-proxy.conf确认Environment一行中HTTP_PROXY、HTTPS_PROXY、NO_PROXY的值与 inventory 一致例如[Service] EnvironmentHTTP_PROXYhttp://example.proxy.tld:port HTTPS_PROXYhttp://example.proxy.tld:port NO_PROXY自动生成的节点 IP/主机名/LB 地址等逗号分隔上面的值为格式示意NO_PROXY的实际内容以自动生成逻辑为准节点 IP、主机名、LB 地址、集群网段等。常见限制与注意点HTTPS 代理下 Ansible 证书校验问题样例 inventory 注释指出经 HTTPS 代理下载文件时可能因 Ansible bug 出问题可设置download_validate_certs: False关闭get_url模块的 SSL 校验Kubespray 仍会做 checksum 校验。操作系统仓库不走代理如果 OS 软件源不需要走代理可设skip_http_proxy_on_os_packages: trueKubespray 就不会在 CentOS 的/etc/yum.conf和 Debian/Ubuntu 的/etc/apt/apt.conf中写入代理环境Debian/Ubuntu 上需要先设置no_proxyapt 才能按预期从指定源安装。worker 增删触发 Pod 重启由于no_proxy默认包含 worker 节点添加或删除 worker 时 docker 引擎会在所有节点重启、所有 Pod 重启介意的话按上文设置no_proxy_exclude_workers: true让no_proxy只包含 control plane 节点。完全覆盖 no_proxy 的风险手动填死no_proxy后Kubespray 不会自动补上节点和 LB 地址漏写会导致集群内流量误走代理需要自行保证列表完整。参考文档docs/advanced/proxy.md、docs/ansible/vars.mdhttp_proxy/https_proxy/no_proxy/no_proxy_exclude_workers/additional_no_proxy条目说明 no_proxy 默认为所有集群节点的内网 IP 和主机名。【免费下载链接】kubesprayDeploy a Production Ready Kubernetes Cluster项目地址: https://gitcode.com/GitHub_Trending/ku/kubespray创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考