自定义nginx镜像

DomeOS提供的默认nginx镜像中的Ingress controllers是基于官方Ingress controllers的nginx-0.9.0-beta.4分支修改而来。如果用户想定制自己的nginx镜像,需要在DomeOS的Ingress controllers相关代码的基础上进行修改构建,以便与DomeOS系统兼容。

源码变动说明

DomeOS官方Ingress controllers源码地址:

  1. https://github.com/domeos/ingress.git

说明

  • 由于官方的Ingress controllers不支持自定义nginx的监听端口,为此我们引入环境变量LISTENPORT来配置nginx的监听端口,在启动负载均衡实例时,controller会检测该端口是否被占用,如果被占用,容器会启动失败,而且控制台日志中会有该端口被占用的提示。
  • 由于官方的Ingress controllers不支持自定义nginx的负载均衡方式,为此我们引入环境变量LBMETHOD来定义nginx的负载均衡方式。
  • 由于nginx类型的负载均衡实例是以Host的网络模式启动,而官方的Ingress controllers启动时,会占用443端口进行tcp的代理处理,默认占用10254端口作为nginx容器的健康检查端口,为此去掉了官方源码中的这部分逻辑,防止端口占用问题的出现。
  • 当所关联的部署没有任何实例时,官方默认的nginx-controller会在upstream中添加127.0.0.1:8181作为默认server,此时负载均衡实例所在的node上可能有某个服务正好在监听8181端口,为此我们针对默认server都做了down处理。
  • 精简nginx配置文件,去除了nginx.tmpl中有关HTTPS的配置。注意

  • 在修改nignx-controller源码之前,请先阅读完以上说明。

  • 不要去除有关LISTENPORT和LBMETHOD等的有关处理逻辑。
  • nginx模板配置文件nginx.tmpl位于controllers/nginx/rootfs/etc/nginx/template。
  • 尽量优先使用controllers/nginx下面的Makefile进行代码编译、镜像构建等。编译构建镜像
  1. git clone https://github.com/domeos/ingress.git
  2. cd ingress/controllers/nginx
  3. 编译源码:make build
  4. 构建镜像:make container
  5. 上传镜像:make push

默认仓库地址为pub.domeos.org/domeos/nginx-controller:1.0,可以根据需要自行修改Makefile中的PREFIX和RELEASE。

参考