小编Lee*_*ley的帖子

用于短期私有 VM 的技术

我正在尝试构建一个系统,该系统将运行短期(CI 和测试版本)的软件组件,根据我的要求,每个组件都位于私人主机上是强制性的。我将这个定义也包含在半虚拟化选项中,因为它似乎可以让我省去很多麻烦。

我在 Mac 上工作,所以几乎所有技术都已淘汰,libvirtquemu等对我不起作用。然而,我计划部署到 Debian;所以在 Debian 上运行的任何东西都回到了桌面上,前提是我可以编写主机及其来宾域的配置脚本。

我的预期设置是我可以用来引导 Debian 安装程序,这意味着在启动时,机器会自动配置(Chef、Puppet、Babushka,别介意,真的) - 并且该配置的一部分应该构建一个可用于启动容器的模板 rootfs。容器本身也需要进行配置,这样当容器上来的时候,知道要做什么工作,可以做工作,然后退出。

简而言之,这是我需要的工作流程:

  1. 启动一台机器(虚拟的或其他的)并准备好开始工作。
  2. 该工作应由chef/puppet/babushka/etc安装的脚本执行
  3. 当工作开始时,应该启动一个虚拟机来完成工作。
  4. VM 应该完成工作,退出并将其资源释放给父/主机。(重要的是,这可以在合理的硬件上扩展到至少数百个来宾 VM)

我已经到了尝试以下的地步,并出于以下内联的原因放弃了它们:

对于主机

  1. 使用 Instalinux(LinuxCOE 支持)预种子 Debian micro ISO 映像(坏: 根本不起作用(“未找到内核模块”(因为 Instalinux 映像与 FTP 存储库不同步,显然该解决方案非常脆弱,它也不允许安装后有太多空间,并将已知的 SSH 密钥、主机密钥等放到机器上,这似乎是一发不可收拾,最后我有一台正在运行的机器,但无法访问它.)
  2. Pre-seed Debian netinst ISO(与上述相同的问题,除了至少安装通常会完成,因为 ISO 和 FTP 存储库之间没有内核差异。安装后的范围仍然有限。 绝对可靠且可重复,很容易在 Mac 或裸机上使用任何 VM 技术堆栈,可以在任何地方工作,但是我无法进行足够的后安装
  3. 构建 rootfs 的各种方法,并将其编译为可引导的硬盘映像(我能做的一点点工作非常脆弱,很难安装到真机上,并且是一个复杂的构建过程。 好: 如果我可以让它工作,这似乎为使用 ssh 密钥、主机密钥、主机名、从 Git 安装的软件以及其他任何东西将机器预配置为给定规范提供了最大的范围,但问题是如何打包它用于分发,或者如何编写它的娱乐脚本。

老实说,我不确定人们应该使用什么技术来将虚拟机从一无所有变成一个运行、工作和有用的系统。对我来说似乎是三个步骤 …

virtualization debian provisioning libvirt lxc

8
推荐指数
1
解决办法
460
查看次数

可靠的反向SSH隧道

我正在使用autossh私钥打开反向 SSH 隧道。隧道用户的 shell 已经rssh并被验证为工作正常。

我遇到的问题是这样的,无论 ClientAliveInterval ( 15) 和 ClientAliveCountMax ( 3) (sshd默认值)如何,在客户端,隧道是通过以下方式打开的:

exec autossh -N                   \
  -o "ServerAliveInterval 60"     \
  -o "ServerAliveCountMax 3"      \
  -o "StrictHostKeyChecking no"   \
  -R ${tunnel_port}:localhost:22  \
  -i ./tunnel                     \
  -v                              \
  tunnel@directory.mytunnelhost.com
Run Code Online (Sandbox Code Playgroud)

${tunnel_port}来自一个小curl的呼叫看起来隧道主机上的空闲端口,该端口不会改变(它是基于请求对话框的MAC地址分配)

问题是在TERM启动隧道客户端时,端口在主机上一直被占用,而 sshd 进程继续运行:

在此处输入图片说明

我也无法通过隧道登录机器:

ubuntu@ip-10-252-138-233:~$ ssh -p 39777 pi@localhost
ssh: connect to host localhost port 39777: Connection refused
Run Code Online (Sandbox Code Playgroud)

我想知道我能做些什么来使隧道更可靠,以确保当任一端发生故障时,它已经完全死机,被拆除并且不能进入“损坏”状态。

如果我通过端口 80 或类似端口建立隧道,我可以编写一个check脚本(这个守护进程runit以,我不知道客户如何知道隧道是否真的 …

ssh ssh-tunnel

6
推荐指数
1
解决办法
3942
查看次数

标签 统计

debian ×1

libvirt ×1

lxc ×1

provisioning ×1

ssh ×1

ssh-tunnel ×1

virtualization ×1