Ceph:通过 java 连接时 EAccess 被拒绝

Ceph: EAccess denied when connecting through java

我正在使用下面的代码与 Ceph 集群通信并获得 EAccess 拒绝异常,即使管理员用户拥有所有权限*。任何解决此问题的指示?我是 运行 docker 中的集群。

管理员权限:

client.admin
    key: AQDVsTJdeF0KExAAd58npeDpnJsXQZwfUBAPMA==
    auid: 0
    caps: [mds] allow
    caps: [mgr] allow *
    caps: [mon] allow *
    caps: [osd] allow *

异常:

Failed to connect to the Ceph cluster; EACCES: Permission denied (-13): com.ceph.rados.exceptions.RadosException: Failed to connect to the Ceph cluster; EACCES: Permission denied (-13) com.ceph.rados.exceptions.RadosException: Failed to connect to the Ceph cluster; EACCES: Permission denied (-13) at com.ceph.rados.RadosBase.throwException(RadosBase.java:94) at com.ceph.rados.RadosBase.handleReturnCode(RadosBase.java:50) at com.ceph.rados.Rados.connect(Rados.java:160) at com.example.demo.CephClient.main(CephClient.java:20)

代码:

Rados cluster = new Rados("admin");
  System.out.println("Created cluster handle.");

  File f = new File("/etc/ceph/ceph.conf");
  cluster.confReadFile(f);
  System.out.println("Read the configuration file.");

  cluster.connect();
  System.out.println("Connected to the cluster.");   

ceph.conf

mon initial members = VirtualBox
mon host = xxx.xxx.x.xxxx
public network = xxx.xxx.xxx.xxx/xx
cluster network = xxx.xxx.xxx.xxx/xx
osd journal size = 100
log file = /dev/null
keyring = /etc/ceph/ceph.client.admin.keyring  

问题是 ceph.client.admin.keyring 文件权限与 ceph 用户有关。我是 运行 作为 root 的应用程序,这就是为什么出现权限被拒绝异常的原因。

将文件权限更改为 root 后。成功了。

     sudo chown root:root filepath