Host网络模式
- 用户需要事先写好配置文件模板。配置文件模版是根据自身业务代码编写的,需要在配置文件模板需要使用对外端口的时候,使用AUTO_PORT0,AUTO_PORT1…的变量名代替端口(具体规则见github上domeize项目介绍)。用户需要将写好的配置文件模板放入代码项目或基础镜像内。
在项目配置中填写配置文件模板的位置(镜像内路径),想要放到项目镜像中的位置(镜像内路径)。
部署的镜像中需要有domeos开发的插件“domeize”。目前DomeOS提供的基础镜像里都包含了domeize。如果希望自行构建基础镜像,则需要自行添加domeize。domeize地址:https://github.com/domeos/domeize
执行构建,项目镜像中包含用户的配置文件模板和domeize
至此,一个host网络模式的部署就建立成功了。
- 启动时会检测这几个环境变量,如果需要它来动态申请端口,就根据环境变量中的对外暴露端口数去随机在20000~21000之间申请未占用端口,并写入环境变量AUTO_PORT0,AUTO_PORT1…
- domeize选择的端口范围默认为20000~21000,不包括21000,可以通过配置环境变量AVAILABLE_PORT_START和AVAILABLE_PORT_END的值来自行指定端口范围。
- 申请端口后,domeize根据domeos server地址,上报申请到的端口。domeos server把端口信息回写到pod的metadata中的annotations里面。
- 如果上述步骤执行成功,domeize根据环境变量,修改配置文件模板,生成配置文件(放在指定的镜像内路径下)这样,一个不会端口冲突的pod就启动成功了。
目前,domeos控制台不提供host网络模式的负载均衡配置,需要用户根据自身业务需求配置。参考方案:
- 配置负载均衡器(如nginx)
- 使用confd读取etcd来生成负载均衡器配置。因为confd代码里定义以AUTO_PORT0来读取服务端口,所以建议配置模板中服务端口以AUTO_PORT0来注入。
- confd把pod上报的端口信息写到负载均衡器的配置中
- confd会自动检测pod的端口信息变化,输出到负载均衡器的配置文件中。confd下载地址:支持etcd证书的需要0.12版本以上
confd安装完成后,需要创建一个配置文件和一个模板文件。DomeOS的参考方案中,两个文件如下:
nginx.tmpl模版文件
{
check_http_send 'GET /favicon.ico HTTP/1.0\r\nHost: no-monitor.sohu.com\r\n\r\n';
keepalive 80;
{{ $dir := printf "/registry/pods/default/*" }}
{{end}}{{end}}{{end}}{{end}}{{end}}{{end}}
使用host网络部署时,申请和分配端口都是针对pod(实例)级别,因此如果一个pod内有多个运行domeize的容器,会出现端口冲突的情况。所以如果一个部署需要使用host网络,需要保证一个pod内只有一个运行domeize的容器。
对应到DomeOS控制台,则如果部署需要用host网络,在新建部署选择镜像时,只能选择一个含domeize的镜像。目前DomeOS提供的基础镜像都包含domeize。