注意
本文档适用于 Ceph 的开发版本。
NFS 服务
注意
仅支持 NFSv4 协议。
管理 NFS 的最简单方法是通过 ceph nfs cluster ... 命令;请参阅 通过 NFS 导出 CephFS 和 RGW。本文档介绍了如何直接管理 cephadm 服务,这仅在不寻常的 NFS 配置中才需要。
部署 NFS ganesha
Cephadm 部署 NFS Ganesha 守护程序(或一组守护程序)。NFS 的配置存储在 .nfs 池中,导出通过 ceph nfs export ... 命令和仪表板进行管理。
要部署 NFS Ganesha 网关,请运行以下命令
ceph orch apply nfs *<svc_id>* [--port *<port>*] [--placement ...]
例如,要部署 NFS,服务 ID 为 foo,默认端口为 2049,默认放置单个守护程序
ceph orch apply nfs foo
有关放置规范的详细信息,请参阅 守护程序放置。
服务规范
或者,可以使用 YAML 规范应用 NFS 服务。
service_type: nfs
service_id: mynfs
placement:
hosts:
- host1
- host2
networks:
- 1.2.3.4/24
ip_addrs:
host1: 10.0.0.100
host2: 10.0.0.101
spec:
port: 12345
monitoring_port: 567
monitoring_ip_addrs:
host1: 10.0.0.123
host2: 10.0.0.124
monitoring_networks:
- 192.168.124.0/24
在此示例中,我们在 host1 和 host2 上运行服务器,使用的非默认 port 为 12345(而不是默认的 2049)。您可以使用 ip_addrs 或 networks 部分将 NFS 数据端口绑定到特定的 IP 地址。如果提供了 ip_addrs 并且指定的 IP 分配给主机,则将使用该 IP。如果 IP 不存在但指定了 networks,则将选择与给定网络之一匹配的 IP。如果两个条件都不满足,守护程序将不会在该节点上启动。可以使用 monitoring_port 参数自定义默认的 NFS 监控端口。此外,您可以指定 monitoring_ip_addrs 或 monitoring_networks 参数以将监控端口绑定到特定的 IP 地址或网络。如果提供了 monitoring_ip_addrs 并且指定的 IP 地址分配给主机,则将使用该 IP 地址。如果 IP 地址不存在且指定了 monitoring_networks,则将使用与指定网络之一匹配的 IP 地址。如果两个条件都不满足,默认绑定将发生在所有可用的网络接口上。
TLS/SSL 示例
这是包含 TLS/SSL 配置的 NFS 服务规范示例
service_type: nfs
service_id: mynfs
placement:
hosts:
- ceph-node-0
spec:
port: 12345
ssl: true
certificate_source: inline|reference|cephadm-signed
ssl_cert: |
-----BEGIN CERTIFICATE-----
(PEM cert contents here)
-----END CERTIFICATE-----
ssl_key: |
-----BEGIN PRIVATE KEY-----
(PEM key contents here)
-----END PRIVATE KEY-----
ssl_ca_cert:
-----BEGIN PRIVATE KEY-----
(PEM key contents here)
-----END PRIVATE KEY-----
tls_ktls: true
tls_debug: true
tls_min_version: TLSv1.3
tls_ciphers: AES-256
此示例配置了一个启用 TLS 加密的 NFS 服务,使用内联证书。
TLS/SSL 参数
以下参数可用于配置 NFS 服务的 TLS/SSL 加密
ssl(boolean):启用或禁用 SSL/TLS 加密。默认为false。certificate_source(string):指定 TLS 证书的来源。选项包括cephadm-signed:使用 cephadm 内部 CA 签名的证书inline:使用ssl_cert、ssl_key和ssl_ca_cert字段直接在规范中提供证书reference:用户可以使用 certmgr 注册自己的证书和密钥,并在规范中将certificate_source设置为reference。
ssl_cert(string):PEM 格式的 SSL 证书。使用inline证书来源时必需。ssl_key(string):PEM 格式的 SSL 私钥。使用inline证书来源时必需。ssl_ca_cert(string):PEM 格式的 SSL CA 证书。使用inline证书来源时必需。custom_sans(list):要包含在证书中的自定义主题备用名称 (SAN) 列表。tls_ktls(boolean):如果可用,启用内核 TLS (kTLS) 以提高性能。默认为false。tls_debug(boolean):启用 TLS 调试输出。有助于排查 TLS 问题。默认为false。tls_min_version(string):指定接受的最低 TLS 版本。示例:TLSv1.3、TLSv1.2tls_ciphers(string):指定 TLS 连接允许的密码套件。示例::-CIPHER-ALL:+AES-256-GCM
注意
启用 ssl 时,必须指定 certificate_source。如果使用 inline 证书,则必须提供所有三个证书字段(ssl_cert、ssl_key、ssl_ca_cert)。
然后可以通过运行以下命令应用规范
ceph orch apply -i nfs.yaml
高可用性 NFS
为现有 nfs 服务部署 ingress 服务将提供
可用于访问 NFS 服务器的稳定虚拟 IP
如果发生主机故障,则在主机之间进行故障转移
跨多个 NFS 网关的负载分配(尽管这很少是必需的)
可以为现有 NFS 服务(本例中为 nfs.mynfs)部署 NFS 入口,其规范如下
service_type: ingress
service_id: nfs.mynfs
placement:
count: 2
spec:
backend_service: nfs.mynfs
frontend_port: 2049
monitor_port: 9000
virtual_ip: 10.0.0.123/24
几点注意事项
virtual_ip 必须包含 CIDR 前缀长度,如上例所示。虚拟 IP 通常会在第一个被识别的网络接口上配置,该接口在同一子网中具有现有 IP。您还可以指定 virtual_interface_networks 属性以匹配其他网络中的 IP;有关详细信息,请参阅 为虚拟 IP 选择网络接口。
monitor_port 用于访问 haproxy 负载状态页面。默认用户为
admin,但可以通过规范中的 admin 属性进行修改。如果未通过规范中的 password 属性指定密码,则可以通过以下方式找到自动生成的密码ceph config-key get mgr/cephadm/ingress.*{svc_id}*/monitor_password例如
ceph config-key get mgr/cephadm/ingress.nfs.myfoo/monitor_password后端服务(本例中为
nfs.mynfs)应包含一个非 2049 的 port 属性,以避免与可能放置在同一主机上的入口服务冲突。
NFS 与虚拟 IP 但没有 haproxy
Cephadm 还支持部署带有 keepalived 但没有 haproxy 的 nfs。这提供了一个由 keepalived 支持的虚拟 IP,nfs 守护程序可以直接绑定到该 IP,而不是让流量流经 haproxy。
在此设置中,您要么想使用 nfs 模块设置服务(请参阅 创建 NFS Ganesha 集群),要么先放置入口服务,以便 nfs 守护程序可以绑定到虚拟 IP。入口服务应包含属性 keepalive_only,并设置为 true。例如
service_type: ingress
service_id: nfs.foo
placement:
count: 1
hosts:
- host1
- host2
- host3
spec:
backend_service: nfs.foo
monitor_port: 9049
virtual_ip: 192.168.122.100/24
keepalive_only: true
然后,可以创建指定 virtual_ip 属性的 nfs 服务,该属性将指示它绑定到该特定 IP。
service_type: nfs
service_id: foo
placement:
count: 1
hosts:
- host1
- host2
- host3
spec:
port: 2049
virtual_ip: 192.168.122.100
请注意,在这些设置中,应确保在 nfs 放置中包含 count: 1,因为只有一个 nfs 守护程序可以绑定到虚拟 IP。
支持 HAProxy 协议的 NFS
Cephadm 支持部署具有额外 HAProxy 协议支持的高可用性模式的 NFS。这与高可用性 NFS 的工作方式相同,但也支持 NFS 导出上的客户端 IP 级别配置。此功能需要 NFS-Ganesha v5.0 或更高版本。
要使用此模式,您要么想使用 nfs 模块设置服务(请参阅 创建 NFS Ganesha 集群),要么手动创建服务,并将额外参数 enable_haproxy_protocol 设置为 true。NFS 服务和入口服务都必须将 enable_haproxy_protocol 设置为相同的值。例如
service_type: ingress
service_id: nfs.foo
placement:
count: 1
hosts:
- host1
- host2
- host3
spec:
backend_service: nfs.foo
monitor_port: 9049
virtual_ip: 192.168.122.100/24
enable_haproxy_protocol: true
service_type: nfs
service_id: foo
placement:
count: 1
hosts:
- host1
- host2
- host3
spec:
port: 2049
enable_haproxy_protocol: true
延伸阅读
CephFS:NFS