|
1. 软件安装要求
SMARTS容器镜像是Docker容器镜像格式。容器镜像发布在Docker Hub上.
支持的操作系统平台是:
Ubuntu amd64
2.1镜像类别
SMARTS使用的基础镜像是标准的Microsoft .NET Core Runtime images for Ubuntu.
SMARTS Toronto 发布
· Ubuntu AMD64 Tags: toronto-ubuntu-rc1
2.2容器
如果要从1.x容器迁移到2.x容器,请确保使用的是最新的SDK,以便利用其最新的功能。迁移要进行数据迁移,方法从1.x导出数据,然后将数据导入到2.x容器中。
2.3如何使用镜像
2.3.1启动一个SMARTS服务实例
实例需要指定一个配置值,可以使用Docker环境变量文件来提供这个值。例如创建一个名字叫smarts.env.settings的文件,文件包含如下内容:
使用docker run来运行容器
2.3.2配置
可以通过配置各种参数自定义SMARTS服务器容器实例。每个参数可以通过以下任一一种方式提供:
· 配置文件
· 环境变量
· Docker安全设置
· Docker配置
2.3.2.1. 参数
· init(必须)
init配置参数提供了license,该配置是激活SMARTS软件所需要的。
· instance_type(可选,默认为:Primary)
容器实例的类型需要配置,有以下几种类型
· Primary
· Replica
· OnDemand
· PrimaryPrimary
Primary: 是默认实例类型,由本地存储库和所有管理功能组成。
Replica: 副本实例有本地存储库,该存储库是主实例的一个副本拷贝。
OnDemand: OnDemand实例没有本地仓库,它使用的主或者从实例的仓库
PrimaryPrimary: 主主实例将用于于其他主实例之间进行双向复制。如果该实例是位于负载均衡后面的话,使用的时候要特别小心,在使用决策管理功能的时候需要负载均衡开启session的会话保持机制。
· encryption_key(可选,默认没有加密)
可以提供一个加密密钥来启用存储库的加密功能。密钥长度要求是256位并且是加密安全的。对密钥进行base64编码,然后进行使用。
Replica实例的配置参数
· primary_host(必填项)
可以是主节点或其他从节点实例,用于从该节点进行复制。
· primary_host_user(可选项,默认为TenantAdmin)
SMARTS存储库用户,可以在主节点自动注册
· primary_host_password(必填项)
SMARTS存储库密码,可以在主节点自动注册
· primary_host_workspace(可选项)
SMARTS存储库用户的工作区,可以在主节点进行认证
· replica_host(可选项)
默认情况下,副本将使用副本的主机名/容器ID向主实例注册自己。设置此参数,设置值将覆盖默认设置。
· register_replication_retry(可选项)
默认情况下,向主实例注册自己时,副本实例将尝试5次。如果复制副本的dns注册需要更多时间,则可以增加或者减小该值。
· replication_sync_wait(可选项)
等待复制同步完成的时间(秒)
注意:PrimaryPrimary实例需要Replica参数,因为它既是副本又是主实例
OnDemand实例的配置参数
· repository_host(必填项)
值为容器实例,既可以是主节点,也可以是副本节点,OnDemand实例会使用配置实例的存储库。
· disable_ui(可选项,只用于onDemand实例)
禁用OnDemand实例的web的用户界面,只允许决策服务请求。(只有通过environment setting时有效)
PrimaryPrimary实例的配置参数
对于PrimaryPrimary实例,所有主节点和副本节点的配置参数都是可配置的。
2.3.2.2. 环境变量(Environment Variables)
可以通过环境变量来配置实例,在上面列出的配置选项前面加上SL前缀。例如-e SL_INIT=“<your configuration string>”
2.3.2.3. Docker安全设置/配置
有的时候通过环境变量传递敏感信息是不安全的,我们可以将_FILE附加到前面列出的参数中,初始化脚本可以在容器中去加载这些文件,读取相关变量参数。
Docker加密通常位于/run/Secrets/<secret_name>中,Docker配置通常安装在/<config name>。
2.3.2.4. 配置文件
可以在json配置文件中设置所有配置项。前面列出的每个参数都可以在配置文件中进行设置。例如:
使用SL_CONFIG_FILE环境变量,可以指定配置文件的位置。
2.3.2.5. SSL安全认证
默认情况下,镜像使用自签名证书。证书位于/var/opt/sl/config目录下。您可以通过以下机制之一配置自己的证书:
2.3.2.5.1. 挂载卷
可以挂载一个卷到/var/opt/sl/config下,然后在这个卷中提供证书。这个挂载必须包含如下内容:
· smarts.cert.pem
· smarts.cert.key
2.3.2.5.2. 配置文件
创建你自己的SSl配置文件,然后把文件拷贝到/opt/sl/config/ssl.conf目录下。
默认的SSL配置文件包含如下的设置:
可以指定任何目录。例如,该目录可以是通过Docker Secrets创建的一个文件,可以安全地将证书添加到容器中。
3. 其他信息
3.1 健康检查
容器镜像运行时会提供健康检查。运行健康检查会对SMARTS服务可用性进行检查。
高可用性部署,同时配置SMARTS决策服务运行状况检查。可以自动启动由部署管理器管理的所有决策服务。
3.2 入口点(Entrypoint)
镜像可以定义如下的entrypoint:
supervisord配置信息将启动和监视所需的服务,并重定向日志输出。
3.3 暴露端口(Expose)
这个镜像会暴露80和443端口
3.4卷(Volumes)
下面是卷的定义
这个卷可以用于所有的存储库或者数据库文件
当提供了加密密钥时,存储库文件将被加密。也可以将卷放在宿主环境的加密磁盘上。
支持NTFS、ext4文件系统和其他非NFS卷的挂载。
4.管理/诊断
SMARTS提供了几个脚本可以帮助管理容器。使用如下命令执行这些脚本:
· 导入/导出存储库内容
该命令能够导出本地存储仓库内容到指定文件
该命令可以将指定文件导入到本地存储仓库。导入文件需要通过卷挂载或docker cp 命令拷贝到容器中,这样容器才能够读取到。
· 执行 信息/控制
该命令可以查看指定服务的执行状态。
该命令可以重启指定服务。
· 仓库状态
该命令可以查看存储库的状态
该命令重置或重建索引。重置索引命令并不常用,只有在存储库状态显示严重问题时在使用该命令。
4.1 Linux限制设置
Linux安全限制可能会降低存储库的性能,而对于加密的数据库,即使有很多的物理资源,也有可能会影响其正常工作。
· Soft core unlimited
· Hard core unlimited
· Soft nofile 131070
· Hard nofile 131070
· Soft nproc 131070
· Hard nproc 131070
对于存储仓库加密
· Soft memlock 1000
· Hard memlock 1000
5.相关资源
其他应用类型可以参考下面的资源信息:
· microsoft/aspnetcore for ASP.NET Core applications.
· microsoft/dotnet for .NET Core images.
6 许可证(License)
要使用该镜像,你需要签订书面合同,并且拥有一个有效的SMARTS License。
你必须还要遵守以下许可协议:
6.1 License激活
根据许可协议,实例可能需要额外的License激活。实例运行后,可以使用以下命令创建代理激活请求文件
在收到一个代理激活响应文件后,可以使用以下命令来激活实例。
可以通过以下命令查看license的激活状态:
7.扩展容器
容器有许多配置选项和参数,可以满足开箱即用的各种部署需求。请检查配置选项可是否满足你的需求。如果您有特殊的需求,也可以使用该容器镜像作为扩展的基础映像。以下文档提供了一些示例。
7.1 IFrame集成扩展
iframe通常被认为是一种安全风险。默认情况下,web应用程序不允许使用iFrames。这样可以保证外部应用不能将自己的程序嵌入到Iframe中,并从中窃取用户敏感信息。如果您的公司允许在web应用程序中使用iFrame,并且你也完全了解了其中的安全风险,并已采取适当措施保护用户不受使用iFrame带来的安全隐患,则可以将容器配置为允许在iFrame内使用。这由以下两个环境变量控制。
· ASPNETCORE_SAMESITE_MODE
· ASPNETCORE_SUPPRESS_X_FRAME_OPTIONS
除了变量之外,还必须更改安全策略配置/opt/sl/config/csp.conf 修改为X-Frame-Options的策略。
iFrame扩展的Dockerfile内容如下:
8 FAQ
1.可以在哪些平台运行SMARTS实例
2.x版本容器镜像实例可运行在Ubuntu系统。在不久的将来,2.x版本镜像也将用于Nano服务器。基于Window的基础镜像只能使用1.x的版本。
2.一个Replica实例和一个OnDeamnd实例之间有什么差别
这两种实例类型都能够横向扩展SMARTS服务。两者之间的主要区别在于数据的存储位置。Replica实例有自己的本地存储库。优点是可以提供更快的本地数据访问,实例在主实例发生故障时,可以独立继续运行。缺点是Replica实例启动速度很慢,因为它在运行之前会从主实例复制所有数据。OnDemand实例启动非常快,非常适合处理峰值负载。OnDemand实例依赖主实例的运行才能访问数据。通常在高可用性配置中,会配置部署管理器,它将预加载和缓存决策服务。这样只要其缓存是由部署管理器启动,即使主实例关闭,OnDemand实例仍然可以处理决策调用请求。
3. Replica实例和PrimaryPrimary实例之间有什么不同
Replica实例单向复制主实例,而PrimaryPrimay实例是进行的双向复制。Replica实例通常用于从开发环境的主实例中同步数据到生产环境。PrimaryPrimary实例适合用于热备份方案或地理位置分散的环境。这种实例并不常用,需要有更多的技术知识来使用它们。需要注意的是,SMARTS决策管理服务需要会话相关性。这意味着如果在负载均衡器后面配置的是primaryprimary实例,你需要正确配置,开启会话保持特性,服务才能正常工作。
4.可以使用PrimaryPrimary实例创建群集存储库吗?
不能。在primaryprimary实例中,实例之间存在双向复制。如果您有多个实例,那么所有primaryprimary实例都需要向其他所有的实例进行交互,它们不会像真正的集群环境那样直接相互复制信息。一般的集群环境通常有专门的算法来避免重复复制和最短路径。
不要使用他们作为完整的集群,决策管理通常并不需要它。此实例类型主要用于故障切换和地理位置分散的场景
容器镜像2.x