离线(或本地)环境中的 Kubespray

离线(或本地)环境中的 Kubespray

我是 k8s 和 kubespray 的新手。

我的目的是在本地环境中构建 k8s 集群。使用具有公共 IP 和互联网访问权限的 EC2,一切都很顺利。但是,由于约束条件更复杂,我陷入了困境。以下是我的约束条件。

  • 1 个具有公共 IP 和互联网访问权限的堡垒
  • n 个既没有公网 IP 也没有互联网访问权限的节点

根据kubespray 文档,这需要一些设置。但我的观点是,由于 Bastion 具有完全的互联网访问权限,因此可以很容易地使用 kubespray 构建 k8s 集群。

有没有博客或分步说明可以做到这一点?

答案1

据我所知,如果您的堡垒可以访问公共注册表和存储库,那么您可以安装一些 Squid 服务器,代表您的 Kubernetes 节点代理查询。

在这种情况下,这不再是一个断开连接的部署,我们可以在中设置http_proxy https_proxy和变量,并使用该代理将资产从其原始位置拉出。no_proxygroup_vars/all.yml

尝试使用类似apt-get install squid或 的内容dnf install squid。基本的 squid.conf 可能如下所示:

http_port 3128
cache_log /var/log/squid/cache.log
cache_mem 256 MB
cache_dir aufs /var/spool/squid 10240 16 256
maximum_object_size 1024 MB
cache_effective_group proxy
hosts_file /etc/hosts
logfile_rotate 4
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log /var/log/squid/access.log combined
coredump_dir /var/spool/squid
error_directory /usr/share/squid/errors/en
http_access allow all
http_reply_access allow all
cache allow all
icp_access allow all

从您的一个 Kubernetes 节点测试连接性:

# curl -vvv --proxy http://10.42.44.100:3128/ https://perdu.com
...
* Connected to 10.42.44.100 (10.42.44.100) port 3128 (#0)
...
* Establish HTTP proxy tunnel to perdu.com:443
...

现在,确保您的 Kubespray 库存确实使用该代理设置了正确的变量。容器运行时和 OS 包管理器配置都将使用这些变量。


如果由于某种原因设置该代理不合适,那么您将需要镜像该offline-environment.md文档中提到的所有图像和文件。

也许可以为 kubectl / etcd / ... 二进制文件和文件设置一个 Nginx 服务器,并运行一个 docker-registry 容器,镜像这些镜像。但请记住,您的容器运行时应该正确配置,忽略不安全的注册表错误(需要设置额外的 Kubespray 变量),或者您的操作系统应该信任签署您的注册表服务器证书的 CA。

相关内容