Host网络模式

    • 用户需要事先写好配置文件模板。配置文件模版是根据自身业务代码编写的,需要在配置文件模板需要使用对外端口的时候,使用AUTO_PORT0,AUTO_PORT1…的变量名代替端口(具体规则见github上domeize项目介绍)。用户需要将写好的配置文件模板放入代码项目或基础镜像内。
    • 在项目配置中填写配置文件模板的位置(镜像内路径),想要放到项目镜像中的位置(镜像内路径)。

    • 部署的镜像中需要有domeos开发的插件“domeize”。目前DomeOS提供的基础镜像里都包含了domeize。如果希望自行构建基础镜像,则需要自行添加domeize。domeize地址:https://github.com/domeos/domeize

    • 执行构建,项目镜像中包含用户的配置文件模板和domeizeHost网络模式 - 图2

    至此,一个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模版文件

    1. {
    2. check_http_send 'GET /favicon.ico HTTP/1.0\r\nHost: no-monitor.sohu.com\r\n\r\n';
    3. keepalive 80;
    4. {{ $dir := printf "/registry/pods/default/*" }}
    5. {{end}}{{end}}{{end}}{{end}}{{end}}{{end}}

    使用host网络部署时,申请和分配端口都是针对pod(实例)级别,因此如果一个pod内有多个运行domeize的容器,会出现端口冲突的情况。所以如果一个部署需要使用host网络,需要保证一个pod内只有一个运行domeize的容器。

    对应到DomeOS控制台,则如果部署需要用host网络,在新建部署选择镜像时,只能选择一个含domeize的镜像。目前DomeOS提供的基础镜像都包含domeize。