本文档是京东隐私计算PSI产品部署操作文档,用于非京东侧(客户侧)协作方工程师部署操作引导。
-
K8S集群,用于部署基础组件和隐私计算相关组件
- 机器操作系统centos7.6-7.9
- 机器最低规格8c16g
-
NFS云存储 /PVC,用于存储输入数据、日志和输出数据
-
公网域名,用于与协作侧进行通信
组件 | 硬件需求 | 镜像 | 提供方 | 基础镜像 |
---|---|---|---|---|
redis | 0.5c1g | tianwen3/redis:v3.0 | dockerhub | redis:latest redis版本7.0.5 |
mysql | 0.5c1g | mysql_debian_8.0.31 | dockerhub | - |
proxy | 1c2g | tianwen3/proxy:v4.1 | dockerhub | ubuntu:22.04 |
nacos | 2c4g | nacos/nacos-server:v2.2.3 | dockerhub | - |
fileservice | 1c4g | fileservice0.7-opensource | 自主生成 | - |
coordinator | 4c8g | coordinator-opensource | 自主生成 | - |
psi | 4c16g | psi-opensource | 自主生成 | - |
以上组件需要按顺序部署,其中proxy,psi,redis是用于执行隐私求交所需的必须镜像,nacos、mysql、coordinator是用于接入京东平台所需。
- 创建K8S namespace,建议格式NAMESPACE=“mpc-$COMPANY-cu”,后续部署均在该namespace下进行;
- 设定通信proxy_target(该项是一个自定义的配置,这里只需定下名称即可),建议与K8S namespace相同,即PROXY_TARGET="mpc-$COMPANY-cu",该配置项信息将用于后续Proxy部署时证书生成以及跨域通信使用。
- 创建Redis所需configmap配置文件,替换其中如下的相关配置:
- REDIS_POD_PORT=6379
- REDIS_PASSWORD=myRedis-password
- REDIS_CONF=redis
kubectl -n ${NAMESPACE} apply -f redis_configmap.yaml
- 创建RedisPod启动需要的deployment配置文件,替换其中如下的相关配置:
- REDIS_IMAGE=myRedis_image_full_tags
- REDIS_POD_PORT=6379
- REDIS_VOLUME_PATH=myRedis_persist_mount_path
- REDIS_CONF=redis
kubectl -n ${NAMESPACE} apply -f redis_deployment.yaml
- 创建RedisService的启动配置文件,替换如下配置:
- REDIS_POD_PORT=6379
- REDIS_SERVICE_PORT=myRedis_service_port
kubectl -n ${NAMESPACE} apply -f redis_service.yaml
- 记录开启的redis服务IP,IP来源于截图的第三列:
- REDIS_SERVICE_IP=myRedis_service_ip
kubectl -n ${NAMESPACE} get svc
- 创建mysql用户名密码secret,替换如下配置:
- MYSQL_USERNAME=mysql-username
- MYSQL_PASSWORD=mysql-password
- MYSQL_PASSWORD_SECRET=mysql-password-secret
kubectl -n ${NAMESPACE} apply -f mysql_secret.yaml
- 创建mysql deployment,替换如下配置:
- MYSQL_IMAGE=mysql_image_full_tags
- MYSQL_POD_PORT=3306
- MYSQL_VOLUME_PATH=mysql_persist_mount_path
kubectl -n ${NAMESPACE} apply -f mysql_deployment.yaml
- 创建mysql service, 替换如下配置:
- MYSQL_POD_PORT=3306
- MYSQL_SERVICE_PORT=3306
kubectl -n ${NAMESPACE} apply -f mysql_service.yaml
- 记录开启的mysql服务IP,IP来源于截图的第三列:
- MYSQL_SERVICE_IP=mysql_service_ip
kubectl -n ${NAMESPACE} get svc
- mysql初始化
- 建库建表,数据库初始化脚本,进入SQL后执行:
source mpc_init.sql
- 接入京东的cert_info证书生成与导入
由京东侧完成证书生成,生成sql文件PROCY_TARGET.sql,由客户侧直接在mysql中执行即可。该条sql中信息包含ca.crt、server_cert.pem、server_private.pem等信息,在proxy组件的部署配置中仍需用到。
source $PROCY_TARGET.sql
- 创建fileservice deployment,替换如下配置:
- FILESERVICE_IMAGE=fileservice_image_full_tags
- FILESERVICE_PORT=8800
- REDIS_SERVICE_IP=
- REDIS_SERVICE_PORT=
- REDIS_PASSWORD=
- VOLUME_LOGS=fileservice_persist_logs_mount_path
- VOLUME_DATA=fileservice_persist_storage_mount_path
kubectl -n ${NAMESPACE} apply -f fileservice_deployment.yaml
部署proxy之前,需要先在redis中配置需要通信一方的proxy地址,key的格式为:target:$PROXY_TARGET,值为proxy的公网ip:port。
需要先创建4个configmap,然后创建proxy。
- 创建配置configmap nginx-conf,替换如下配置:
- NGINX_CONF=nginx-conf
kubectl -n ${NAMESPACE} apply -f proxy_ngnix_conf_configmap.yaml
- 创建配置configmap mpc-conf,替换如下配置:
- MPC_CONF=mpc-conf
- PROXY_PORT_OUT:外部请求入proxy端口,coordinator的grpc.proxy.local-port配置
- PROXY_PORT_IN:内部请求出proxy接口,coordinator的grpc.proxy.port配置
- PROXY_NODE_IP:本侧PROXY ip
kubectl -n ${NAMESPACE} apply -f proxy_mpc_conf_configmap.yaml,替换如下配置:
- LUA_SRC=lua-src
- REDIS_SERVICE_IP
- REDIS_SERVICE_PORT
- REDIS_PASSWORD
kubectl -n ${NAMESPACE} apply -f proxy_lua_configmap.yaml
- 创建配置configmap cert,替换如下配置:
- 将部署mysql章节中cert_info生成与导入小杰获取到的ca.crt、server_cert.pem、server_private.pem等信息放入。
kubectl -n ${NAMESPACE} apply -f proxy_cert_configmap.yaml
- 创建proxy deployment,替换如下配置:
- PROXY_IMAGE
- NODENAME
- PROXY_NODE_IP 部署proxy时通过NODENAME指定部署在固定的节点上,重启proxy时不会改变,与京东侧通信需要给proxy开公网ip端口。若起proxy的节点无法开通公网ip和端口,也可采用svc绑定负载均衡器然后给负载均衡器开公网地址+端口的形式。
kubectl -n ${NAMESPACE} apply -f proxy_deployment.yaml
nacos主要用于给coordinator配置信息,由于一些特定的原因,请将nacos与其它组件部署在同一个集群上,不要使用其它集群上现有的nacos。
- 初始化数据库, Nacos初始化脚本
source nacos_init.sql
- nacos configmap,替换如下配置:
- MYSQL_USERNAME
- MYSQL_PASSWORD
kubectl -n ${NAMESPACE} apply -f nacos_configmap.yaml
- nacos deployment,替换如下配置:
- NACOS_IMAGE
kubectl -n ${NAMESPACE} apply -f nacos_deployment.yaml
kubectl -n ${NAMESPACE} apply -f nacos_service.yaml
nacos主要用来配置coordinator启动需要的文件。将在第9小节中介绍具体配置方式。
- 初始化数据库,Coordinator数据库脚本
source coordinator_init.sql
- 配置Coordinator所需的Nacos配置信息
-
2.1 nacos配置
- 可以通过浏览器配置
- 没有网络隔离时采用该种方式,直接打开nacos自带前端页面访问nacos。按以下步骤进行:
- 创建命名空间$NAMESPACE
- 创建分组APPLICATION_GROUP,创建配置文件application.properties,将coordinator配置文件填入并发布。
- 创建分组K8S_GROUP,创建配置文件psi.yaml。
- 创建分组FUNCTOR_GROUP,创建配置文件psi.properties。
- 没有网络隔离时采用该种方式,直接打开nacos自带前端页面访问nacos。按以下步骤进行:
- 无法通过浏览器配置
- 若部署服务的机器与本地机器有隔离,可以通过api的方式配置,将以上信息配置进入。
- 可参考配置脚本:nacos_init.sh
- 可以通过浏览器配置
-
2.2 创建和修改 APPLICATION_GROUP, 增加data_id为application.properties 的配置,替换如下配置:
- NAMESPACE
- PROXY_TARGET
- MYSQL_URL
- MYSQL_USERNAME
- MYSQL_PASSWORD
- REDIS_SERVICE_IP
- REDIS_SERVICE_PORT
- REDIS_PASSWORD
- PROXY_PORT_IN
- PROXY_PORT_OUT
- COORDINATOR_SERVICE_PORT_IN=22034
- COORDINATOR_NODE_PORT_OUT=32461
- COORDINATOR_NODE_PORT_IN=32460
- PORTAL_URL
-
2.3 创建和修改 K8S_GROUP,增加psi.yaml
- data_id=psi.yaml 该分组下只有一个配置,即需要配置PSI算子的启动YAML,见第10小节中yaml。
-
2.4 创建和修改 FUNCTOR_GROUP,增加psi.properties
- data_id=psi.properties
- 创建coordinator nacos configmap,替换如下参数:
- COORDINATOR_CONF=coordinator-conf
- NACOS_DOMAIN:请使用本集群上部署的nacos的svc域名
- NAMESPACE
kubectl -n ${NAMESPACE} apply -f coordinator_nacos_cofigmap.yaml
- 创建coordinator K8S configmap,该项配置是k8s集群的认证信息,用于coordinator起pod时使用。替换如下参数:
- K8S-CONF=k8s-conf
- K8S_SERVER_URL:客户端服务地址
- K8S_USERNAME
- K8S_PASSWORD
- K8S_CLIENT_CERTIFICATE_DATA:客户端公钥证书
- K8S_CLIENT_KEY_DATA:客户端私钥
kubectl -n ${NAMESPACE} apply -f coordinator_k8s_cofigmap.yaml
- 创建coordinator deployment,替换如下参数:
- COORDINATOR_IMAGE
- VOLUME_LOGS
- VOLUME_DATA
kubectl -n ${NAMESPACE} apply -f coordinator_deployment.yaml
- 创建coordinator service,替换如下参数:
- COORDINATOR_NODE_PORT_OUT=32461
- COORDINATOR_NODE_PORT_IN=32460
- COORDINATOR_SERVICE_PORT_OUT=8080
- COORDINATOR_SERVICE_PORT_IN=22034
- COORDINATOR_POD_PORT_OUT=8080
- COORDINATOR_POD_PORT_IN=22034
kubectl -n ${NAMESPACE} apply -f coordinator_service.yaml
验证是否可以正常通信: curl -X GET 'http://COORDINATOR_NODE_IP:8080/coordinator/outer/test/grpc?test=test&target=9n_demo_1'
创建psi.yaml,替换如下参数:
- NAMESPACE
- PSI_IMAGE
- VOLUME_LOGS
- VOLUME_DATA PSI挂载路径需要与fileservice一致,否则会找不到文件。PSI不需要手动启动,在隐私计算平台配置好求交任务点击运行即可。