代理和VPN

如何通过VPN或HTTP/HTTPS代理使用minikube

minikube需要通过HTTP、HTTPS和DNS协议访问互联网。

代理

如果需要HTTP代理才能访问互联网,您可能需要使用环境变量将代理连接信息传递给 minikube 和 Docker

  • HTTP_PROXY - 您的HTTP代理的URL
  • HTTPS_PROXY - 您的HTTPS代理的URL
  • NO_PROXY - 一个逗号分隔的主机列表,这些主机不应通过代理访问。

这里的 NO_PROXY 变量很重要:如果不设置它,minikube 可能无法访问虚拟机内部的资源。minikube 使用四个默认IP范围,这些范围不应通过代理访问

  • 192.168.59.0/24: 由 minikube 虚拟机使用。对于某些虚拟机管理器,可通过 --host-only-cidr 进行配置
  • 192.168.39.0/24: 由 minikube kvm2 驱动程序使用。
  • 192.168.49.0/24: 由 minikube Docker 驱动程序的第一个集群使用。
  • 10.96.0.0/12: 由服务集群 IP 使用。可通过 --service-cluster-ip-range 进行配置

一个重要的注意事项:如果非 Kubernetes 应用程序(例如 Firefox 或 Chrome)需要 NO_PROXY,您可能需要将 minikube IP 显式添加到逗号分隔列表中,因为它们可能不理解 IP 范围 (#3827)。

使用示例

macOS 和 Linux

export HTTP_PROXY=http://<proxy hostname:port>
export HTTPS_PROXY=https://<proxy hostname:port>
export NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24

minikube start

要使导出的变量永久生效,请考虑将声明添加到 ~/.bashrc 或您的用户定义环境变量存储的任何位置。

Windows

set HTTP_PROXY=http://<proxy hostname:port>
set HTTPS_PROXY=https://<proxy hostname:port>
set NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24

minikube start

要永久设置这些环境变量,请考虑将它们添加到您的系统设置中或使用setx

故障排除

无法缓存 ISO…连接被拒绝

Unable to start VM: unable to cache ISO: https://storage.googleapis.com/minikube/iso/minikube.iso:
failed to download: failed to download to temp file: download failed: 5 error(s) occurred:

* Temporary download error: Get https://storage.googleapis.com/minikube/iso/minikube.iso:
proxyconnect tcp: dial tcp <host>:<port>: connect: connection refused

此错误表示由 HTTPS_PROXY 或 HTTP_PROXY 定义的主机:端口组合不正确,或者代理不可用。

无法拉取镜像..客户端超时,等待响应头时超出限制

Unable to pull images, which may be OK:

failed to pull image "registry.k8s.io/kube-apiserver:v1.13.3": output: Error response from daemon:
Get https://registry.k8s.io/v2/: net/http: request canceled while waiting for connection
(Client.Timeout exceeded while awaiting headers)

此错误表明虚拟机中运行的容器运行时无法访问互联网。请验证您是否为 --docker-env HTTPS_PROXY 传递了正确的值。

x509: 证书由未知颁发机构签名

[ERROR ImagePull]: failed to pull image registry.k8s.io/kube-apiserver:v1.13.3:
output: Error response from daemon:
Get https://registry.k8s.io/v2/: x509: certificate signed by unknown authority

这是因为 minikube 虚拟机位于一个代理后面,该代理会重写 HTTPS 响应以包含其自己的 TLS 证书。解决方案是将代理证书安装到启动时会复制到虚拟机的位置,以便可以进行验证。

请向您的 IT 部门索取相应的 PEM 文件,并将其添加到

~/.minikube/files/etc/ssl/certs

~/.minikube/certs

然后运行 minikube deleteminikube start

下载二进制文件:proxyconnect tcp: tls: 收到长度为 20527 的超大记录

提供的 HTTPS_PROXY 值可能不正确。请验证此值是否指向 HTTP 代理而不是 HTTPS 代理。

VPN

minikube 需要主机访问以下 IP 范围

  • 192.168.59.0/24: 由 minikube 虚拟机使用。对于某些虚拟机管理器,可通过 --host-only-cidr 进行配置
  • 192.168.39.0/24: 由 minikube kvm2 驱动程序使用。
  • 10.96.0.0/12: 由服务集群 IP 使用。可通过 --service-cluster-ip-range 进行配置

不幸的是,许多 VPN 配置会将发往这些目的地的流量通过加密隧道路由,而不是允许数据包直接发送到 minikube 虚拟机。

可能的解决方案

  1. 如果您有权限,请在您的 VPN 软件中将上述 IP 范围列入白名单
  2. 在您的 VPN 软件中,选择类似于“在使用 VPN 时允许本地(局域网)访问”的选项 (Cisco VPN 示例)
  3. 您或许可以尝试为 --host-only-cidr--service-cluster-ip-range 标志选择其他值。
  4. 关闭 VPN

最后修改于 2023 年 3 月 30 日:移除对 k8s.gcr.io 的所有剩余引用 (44c4657e4)