Jail Host主机配置
备注
在 jail 中运行的 FreeBSD 版本不能比主机中运行的版本更新
主机激活Jail
执行以下命令配置在系统启动时启动Jails:
sysrc jail_enable="YES"
# 配置所有jails在后台启动
sysrc jail_parallel_start="YES"
Jail网络
FreeBSD jails的网络有以下不同方式:
主机网络模式(IP 共享)
虚拟网络(VNET): 每个jail有隔离的网络堆栈,独立IP地址、路由表和网络接口(就像独立的虚拟机)
netgraph 系统: netgraph是一个多功能内核框架,用于创建自定义网络配置,可以用于定义网络流量在 jails 和主机系统之间以及不同 jails 之间的流动方式
备注
我觉得 VNET jail + Thin jail + Linux jail ,可以构建一个多IP的隔离容器来模拟多台主机,这样就可以部署类似 kind(本地docker模拟k8s集群) 这样的Kubernetes模拟集群,一个在FreeBSD上运行的模拟Kubernetes集群。
以后试试...
Jail目录树
Jail文件的位置没有规定,可以是 /jail
, /usr/jail
或 /usr/local/jail
,在FreeBSD Handbook中采用的是 /usr/local/jails
目录:
zfs create -o mountpoint=/usr/local/jails zroot/jails
zfs create zroot/jails/media
zfs create zroot/jails/templates
zfs create zroot/jails/containers
对jail也可以使用传统的UFS:
mkdir /usr/local/jails/
mkdir /usr/local/jails/media
mkdir /usr/local/jails/templates
mkdir /usr/local/jails/containers
上面除了 /usr/local/jails
目录外,其他目录还有:
media
将包含已下载用户空间的压缩文件templates
在使用 Thin Jails 时,该目录存储模板(共享核心系统)containers
将存储jail (也就是容器)
Jail配置文件
有两种方法配置jails:
方法一: 在
/etc/jail.conf
中为每个jail添加一个条目方法二: 在
/etc/jail.conf.d/
目录中为每个jail创建一个文件 ( 我采用这个方法 ,适合管理大量的jails)
/etc/jail.conf
中添加一行配置来包含所有在 /etc/jail.conf.d/
目录下以 .conf
结尾的配置.include "/etc/jail.conf.d/*.conf";
典型Jail配置
jailname {
# STARTUP/LOGGING
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.consolelog = "/var/log/jail_console_${name}.log";
# PERMISSIONS
allow.raw_sockets;
exec.clean;
mount.devfs;
# HOSTNAME/PATH
host.hostname = "${name}";
path = "/usr/local/jails/containers/${name}";
# NETWORK
ip4.addr = 192.168.1.151; #为jail分配的IP地址
ip6.addr = ::ffff:c0a8:197
interface = em0; #jail所连接的host主机网络接口
}
公共配置 并使用 /etc/jail.conf.d/
目录配置差异化
我发现其实结合方法一和方法二可能是更好的方案:
/etc/jail.conf
为所有jail配置的共同通用部分,并include
/etc/jail.conf.d/
目录中差异化部分:
/etc/jail.conf
为所有jail配置的共同通用部分# STARTUP/LOGGING
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.consolelog = "/var/log/jail_console_${name}.log";
# PERMISSIONS
allow.raw_sockets;
exec.clean;
mount.devfs;
# HOSTNAME/PATH
host.hostname = "${name}";
path = "/usr/local/jails/containers/${name}";
# NETWORK
#ip4 = inherit;
interface = wifibox0;
.include "/etc/jail.conf.d/*.conf";
然后在
/etc/jail.conf.d/
目录下的配置只需要设置主机名和IP地址,类似
/etc/jail.conf.d
目录下配置只需要配置差异部分d2l {
ip4.addr = 10.0.0.9/24;
}
如何处理jail启动顺序
我在 No internet access from inside jail! 看到配置jail启动顺序的方法,值得借鉴:
/etc/rc.conf
可以控制jail启停顺序jail_enable="YES"
jail_list="mariadb httpd"
jail_reverse_stop="YES"
另一种方式参考 (Solved)No internet access from inside jail! 在配置 httpd
Jail时添加 depend=mariadb
同时移除 jail_reverse_stop="YES"
,也有同样效果。
开始创建
Host 准备工作已经完成,现在开始创建: