跳到主要内容

Podman 远程客户端教程

简介

Podman 远程客户端的目的是允许用户与 Podman "后端" 进行交互,同时处于单独的客户端上。远程客户端的命令行界面与常规 Podman 命令完全相同,只是删除了一些不适用于远程客户端的标志。

远程客户端利用客户端-服务器模型。你需要在 Linux 机器或虚拟机上安装 Podman,并确保 SSH 守护进程正在运行。在本地操作系统上,当你执行 Podman 命令时,Podman 会通过 SSH 连接到服务器。然后,它通过 systemd 套接字激活连接到 Podman 服务,并访问我们的 Rest API。Podman 命令在服务器上执行。从客户端的角度来看,它看起来就像 Podman 在本地运行一样。

本教程适用于在 Linux 上远程运行 Podman。如果你使用的是 Mac 或 Windows PC,请遵循 Mac 和 Windows 教程

获取和安装 Podman

客户端机器

你需要 Podman 或 podman-remote 客户端。这两者之间的区别在于,编译好的 podman-remote 客户端只能作为远程客户端连接到后端,而 Podman 可以运行本地的标准 Podman 命令,也可以作为远程客户端(使用 podman --remote)。

如果你已经安装了 Podman,则无需安装 podman-remote。

你可以通过 安装 Podman 的说明 了解如何安装 Podman。

如果你只想安装 podman-remote 客户端,可以从其 发布说明页面 下载。你也可以使用 make podman-remote 从源代码构建它。

服务器机器

你需要在服务器机器上 安装 Podman

创建第一个连接

在服务器机器上启用 Podman 服务

在执行任何 Podman 客户端命令之前,你必须在 Linux 服务器上启用 podman.sock SystemD 服务。在这些示例中,我们将 Podman 作为普通非特权用户(也称为无根用户)运行。默认情况下,无根套接字监听在 /run/user/${UID}/podman/podman.sock。你可以使用以下命令永久启用此套接字:

systemctl --user enable --now podman.socket

为了让该用户在未登录时也能正常工作,你需要为此用户启用 linger 功能:

sudo loginctl enable-linger $USER

这仅在你不是以 root 用户身份运行 Podman 时才需要。

你可以使用一个简单的 Podman 命令来验证套接字是否正在监听。

podman --remote info
host:
arch: amd64
buildahVersion: 1.16.0-dev
cgroupVersion: v2
conmon:
package: conmon-2.0.19-1.fc32.x86_64

启用 sshd

为了使 Podman 客户端能够与服务器通信,如果当前未启用,你需要在你的 Linux 机器上启用并启动 SSH 守护进程。

sudo systemctl enable --now sshd

请注意,上述命令需要以 root 用户身份执行,因为 systemctl 通常需要超级用户权限来管理服务。在启用 SSH 服务后,客户端将能够通过 SSH 连接到服务器,并与 Podman 服务进行通信。

此外,你还需要确保服务器的防火墙设置允许 SSH 连接。你可以使用 firewall-cmd 或类似工具来管理防火墙规则,允许 SSH 端口(通常是 22)的流量。

一旦 SSH 服务运行并且防火墙设置正确,你就可以开始使用 Podman 远程客户端了。记得在每次连接时提供正确的 SSH 凭据(如用户名和密码或 SSH 密钥),以便能够安全地访问服务器上的 Podman 服务。

配置 SSH

远程 Podman 使用 SSH 在客户端和服务器之间进行通信。远程客户端使用 SSH 密钥可以更加流畅地工作。为了设置 SSH 连接,你需要从客户端机器生成一个 SSH 密钥对。注意: 在某些情况下,使用 rsa 密钥会导致连接问题,请确保创建一个 ed25519 密钥。

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519

你的公钥默认应该位于你的主目录下的 ~/.ssh/id_ed25519.pub 文件中。然后,你需要将 id_ed25519.pub 的内容复制到 Linux 服务器上的 ~/.ssh/authorized_keys 文件中。你可以使用 ssh-copy-id 来自动完成此操作:

ssh-copy-id -i ~/.ssh/id_ed25519.pub 192.168.122.1

如果你不想使用 SSH 密钥,每次执行 Podman 命令时,系统将提示你输入登录密码。 使用客户端

注意:podman-remote 在这里是 podman --remote 的等效项,取决于你选择安装哪个。

使用 Podman 远程客户端的第一步是配置连接。

你可以使用 podman-remote system connection add 命令添加连接。

podman-remote system connection add myuser --identity ~/.ssh/id_ed25519 ssh://myuser@192.168.122.1/run/user/1000/podman/podman.sock

这将向 Podman 添加一个远程连接,如果这是添加的第一个连接,它将被标记为默认连接。你可以使用 podman-remote system connection list 查看你的连接:

podman-remote system connection list  
名称 ID 地址
myuser* id_ed25519 ssh://myuser@192.168.122.1/run/user/1000/podman/podman.sock

现在我们可以使用 podman info 来测试连接:

podman-remote info  
host:
arch: amd64
buildahVersion: 1.16.0-dev
cgroupVersion: v2
conmon:
package: conmon-2.0.19-1.fc32.x86_64

如果一切正常,这将返回关于远程 Podman 服务器的信息。现在你可以使用 podman-remote(或 podman --remote)来执行所有远程 Podman 操作了。

Podman-remote 还引入了一个“--connection”标志,你可以使用它来指定你已定义的其他连接。如果没有提供连接,将使用默认连接。

podman-remote system connection --help

总结

你可以使用 Podman 远程客户端来管理在 Linux 服务器上运行的容器。客户端和服务器之间的通信主要依赖于 SSH 连接,因此建议使用 SSH 密钥。一旦你在远程客户端上安装了 Podman,你应该使用 podman-remote system connection add 命令设置一个连接,该连接随后将被后续的 Podman 命令使用。

故障排除

如果遇到问题,请查看故障排除文档。

历史

本文档改编自Mac 和 Windows 教程