SecretPad All-in-One中心化部署模式安装与测试

SecretPad All in One 中心化部署模式——安装部署测试

官方文档:https://www.secretflow.org.cn/zh-CN/docs/secretpad-all-in-one/v1.11.0b1/center_deploy/platform_installation_guidelines_center

项目README文档:https://github.com/secretflow/secretpad/blob/main/README.zh-CN.md

这一块我还是折腾了一下,所以记录下。

注:v1.11.0b1版本还不是可以拆箱即用,没有bug和问题的。我在安装和使用过程,其实也发现了一些小问题(系统本身的)。如果你看本文的目的是直接部署商用,并且期待很高,那么可能些许失望。

我对于这个项目的认识在于:它起到一个很好的引领、引导作用,让我们学习使用隐私计算。

1.前置条件

按官方文档即可,主要就是安装好docker,没什么门槛。我的设备是 Mac M4 + docker 28.2.2。

2.下载部署

文档编写时最新的部署包在这:https://www.secretflow.org.cn/zh-CN/docs/secretpad-all-in-one/v1.11.0b1/deployment_package

历史版本部署包在这:https://www.secretflow.org.cn/zh-CN/docs/secretpad-all-in-one/v1.11.0b1/history_download

1)下载部署包后解压

本文档用的就是 v1.11.0b1 的部署包。

2)安装部署

cd 到解压后的文件夹。然后执行:

1
./install.sh master

3)设置登录web页面的用户名和密码

安装的过程中(命令行)会要求输入web用户名和密码。用户名长度要求大于 4 位字符 ,密码大于 8 位字符。需包含大小写及特殊字符。

安装成功之后,会输入类似如下(包括web地址、用户名密码)

1
2
3
4
5
[INFO] Web server started successfully
[INFO] Please visit the website http://localhost:8080 (or http://{the IPAddress of this machine}:8080) to experience the Kuscia web's functions .
[INFO] The login name:'admin' ,The login password:'W6sM8LQ#' .
[INFO] The data would be stored in the path: /Users/kxr/kuscia/master/data .
[INFO] All components started successfully, time spend: 237 second

我当时弄有点奇怪,我记得自己输入自定义密码,但是实际上好像没有用我自定义的,它自己初始化了一个。

4)浏览器访问平台

根据部署的输出,使用浏览器访问平台。http://localhost:secretpad 端口号(一般默认是8080端口)

3.快速尝试一个PSI隐私求交任务

平台里面内置了两个计算节点 alice、bob 和样例数据,所以一开始可以先不添加节点。直接上手体验一下节点之间进行隐私计算。

1)添加项目

进入页面右上角,有一个新建项目。选择两个内置节点和联合圈人模版

image-20250929142534705

2)执行训练流

image-20250929142715847

3)查看执行结果

执行结果主要为 求交结果和报告,在节点主页-结果管理(http://localhost:8080/node?ownerId=alice&tab=result)是可以看到每个节点的每次的计算结果的。

image-20250929143618895

这里我们用的是alice节点用它的alice.csv数据与bob节点的bob.csv进行求交。所以可以去alice节点的结果管理那看报告和求交后的csv。

你可能会问,我怎么看出来,它求交了😂。哈哈 抱歉官方提供的这个数据示例,可能不方便看出来。

  • 它数据量有点大,不方便观察
  • 它两份文件应该是同一人群的不同属性的数据(id相同的不同的列)。所以求交的输出结果,是和原输入的数据是一样的行数的。

如果想要更明显的隐私求交效果,可以自己造一份人群不一致的(id不一致)的小数据集。我有实际去做了两个数据集,进行求交,输出结果和统计都是没有问题的。

image-20250929153148181

如果你也好奇官方内置的示例数据内容,可以在alice、bob容器里下载一份。是在这个目录下:/home/kuscia/var/storage/data

4.添加节点

官方文档:https://www.secretflow.org.cn/zh-CN/docs/secretpad-all-in-one/v1.11.0b1/center_deploy/node_installation_guidelines

真正麻烦的是此处,这块容易很出现问题,且流程不是很详细。

4.1 节点注册

页面侧边栏点击节点注册,然后注册新节点。节点名称自己可以填。

注册完成之后,页面列表就出现了一个新节点。

点击节点名称,就可以看到节点的明细。其中最重要的是节点ID以及部署令牌。这个可以先copy下来,等会要用。

image-20250929164902631

4.2 部署新节点

注册好节点之后,就可以部署节点。

部署包和secretpad的部署包是同一个,可以使用之前那个部署包。进入到解压后部署包路径终端,执行:

1
./install.sh lite -n fhfbhtfg -m 'https://kxr-kuscia-master:1080' -t wDV86GWXB7lzs6m3YDiBffJh3NZ2pnZe -p 10080  -k 41802 -g 41803 -s 8180 -q 13181 -x 13085  -P notls

kxr-kuscia-master 是容器名,也是docker网络内域名。你需要替换成自己的。注意这块,不用替换成容器ip或者宿主机ip哈。

-n kkghixcs 是指定节点ID,你需要替换成自己的新增节点ID

-t wDV86GWXB7lzs6m3YDiBffJh3NZ2pnZe 是制定部署令牌,你也需要替换成自己的。

这个 -x 13085 是我额外新增的(对比官方文档中命令),不然容器启动不起来。因为之前 secretPad 有容器占用了这个端口。

可以使用 docker network inspect kuscia-exchange ,看看 secretPad 各容器的网络信息。

执行过程中,会需要让你输入用户名/密码

1
2
3
4
5
6
[INFO] Please set the username and the password used to login the KUSCIA-WEB.
The username requires a length greater than 4, The password requires a length greater than 8,
including uppercase and lowercase letters, numbers, and special characters.
Enter username(admin):admin
Enter password:
Confirm password again:

最终系统部署成功,会输出类似信息:

1
2
3
4
5
[INFO] Web server started successfully
[INFO] Please visit the website http://localhost:8180 (or http://{the IPAddress of this machine}:8180) to experience the Kuscia web's functions .
[INFO] The login name:'admin' ,The login password:'admin123456X@' .
[INFO] The data would be stored in the path: /Users/kxr/kuscia/lite/data .
[INFO] All components started successfully, time spend: 56 second

然后可以访问节点的web端:http://localhost:8180

部署正常的话,会新增两个容器。并且在平台的节点注册页面,会发现新注册节点状态变为可用。

4.3 添加合作节点

部署好新节点,不代表着新节点可以与内置节点互相通信与协作进行计算。两个节点之间如果需要进行隐私计算,还需要在一个节点web页面中添加另外一个节点作为合作节点才可以。

这里以alice与新增节点为例子:

1
2
kxr-kuscia-lite-alice:1080
kxr-kuscia-lite-fhfbhtfg:1080

image-20250929174832964

在平台端web页面上添加之后,需要在 新增节点的web页面(http://localhost:8180)的消息中心中去授权。

image-20250929175119669

然后你就会发现在 新增节点web端上的合作节点上,已经看到了alice节点。

但是在平台端alice节点页面的合作节点列表中:显示通讯状态不可用。

image-20250929175353541

理论上不应该这样的。所以我认为这个问题是一个bug。我摸索之后,发现了问题的原因以及临时修复方法。

4.4 手动进行节点路由连接与授权

问题在哪呢?

一开始我排查过不少原因,是不是网络不通、还是容器没正常启动等等。然后从日志发现了问题(看容器 kxr-kuscia-master)。

kuscia日志主要是存放在:/home/kuscia/var/logs下,看其中kusciaapi.log就会发现:

1
2025-09-29 19:08:58.903 INFO interceptor/common.go:121 [GRPC] [GRPC /kuscia.proto.api.v1alpha1.kusciaapi.DomainRouteService/QueryDomainRoute] Duration: 5.07466ms, StatusCode: 0, ForwardHost: [], ContextType: [], Request: {"destination":"alice","source":"fhfbhtfg"}, Response: {"data":{"authentication_type":"Token","destination":"alice","endpoint":{"host":"kxr-kuscia-lite-alice","ports":[{"name":"http","port":1080,"protocol":"HTTP"}]},"name":"fhfbhtfg-alice","source":"fhfbhtfg","status":{"reason":"LastUpdateAt=2025-09-29 19:07:11 +0800 CST, Message=TokenNotGenerate, Reason:DestinationIsNotAuthrized","status":"Failed"},"token_config":{"destination_public_key":"LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJDZ0tDQVFFQXJydkgzN0tKc25ncWFQVUpXQkU3SDZ0b3FYTm1Od0JYZVFoSTZjamh2dUM2VW9qRk1NM1AKQ0tDOXN5aGxweWwwM2lDTkZocU9uMEoyOVc0TkY2elF2Y1BOVXNJTkFabm92bldUb1h0SWs5K2s3M3pLQldRTApVaWVaM3E0ditOQWV5TzY4eFVsUGFSTWw0eUVObXZvRDRSeGNSTlpBTVR0Y2Zod0g1U0VKcjNRVHBtSnNuMUpPCkQ5UGZ2alJmZjJIYXYxRlFYK1lMRndBNS96ZGhMZWh6ZFJHYjhmMDVlVWF2cDVmdEhIK1NyZnlaQUszTmNEM3AKV05kM0NEc3dGc1kwVG94T2t4LzdIRkJjc3JER1NFdy82dU1HbVlQdHdDbkxUTTVQZGx3VjBnWHZnL29Pem5rNwphRTVJL3VnWHNEdEgrbnJYa0V4SUR2MlNid3Rxd1NLU1dRSURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K","rolling_update_period":0,"source_public_key":"LS0tLS1CRUdJTiBSU

然后我使用了 docker exec -it ${USER}-kuscia-master kubectl get cdr ` 来验证了下

1
2
3
(base) kxr@kxrdeMacBook-Pro secretflow-allinone-package % docker exec -it ${USER}-kuscia-master kubectl get cdr
NAME SOURCE DESTINATION HOST AUTHENTICATION READY
fhfbhtfg-alice fhfbhtfg alice kxr-kuscia-lite-alice Token False

发现确实fhfbhtfg->alice的通信是不通的。这种一般是因为没有授权成功导致的。

可以这个命令:

1
docker exec -it ${USER}-kuscia-master scripts/deploy/join_to_host.sh fhfbhtfg alice https://kxr-kuscia-lite-alice:1080

如果发现 kubectl get cdr 展示的列表,都没有 从fhfbhtfg到alice的路由,那么就可以使用这个:

1
docker exec -it ${USER}-kuscia-master sh scripts/deploy/create_cluster_domain_route.sh fhfbhtfg alice http://kxr-kuscia-lite-alice:1080

类似的api的文档:https://www.secretflow.org.cn/zh-CN/docs/kuscia/v1.0.0b0/reference/apis/domainroute_cn

路由规则概念官方介绍文档:https://www.secretflow.org.cn/zh-CN/docs/kuscia/v1.0.0b0/reference/concepts/domainroute_cn

当执行完上面命令,稍等一会再试下 kubectl get cdr 就会发现路由正常了。然后页面上合作节点通讯状态也会变为 可用。

4.5 部署好调试好之后,怎么使用新增的节点呢

如果想要进行计算,是需要 数据 + 项目的。

1)平台上新增项目

平台端web页面上新增一个项目,然后添加alice和新增的节点。

这里可以用新添节点的账号登录到平台上来创建项目,也可以用平台的管理员账号来创建项目。区别就是所有权归属不同,比如非创建者只能看,不能删改。

这个新添节点的账号也能登录平台?答:是可以的,不过不是我们安装新增节点时设置的账户密码,而是固定的账号。然后初始化密码,悬浮到问号图标上就可以看到。

http://localhost:8180/my-node?ownerId=fhfbhtfg

image-20250929194734029

2)新增节点增加数据源与授权

打开新增的节点的web页面,然后添加数据源。这里我上传一个csv文件。然后将csv文件授权给刚刚新增的项目

3)在平台web端创建训练流

然后回到平台web端,进行训练流的构建。这时候你就可以使用新增节点及其中授权给本项目的数据 进行计算。

备注:如果在执行过程中,遇到训练图路由的问题,那么可以尝试下 检查下双向的节点路由连接与授权。