Openshift Nginx Router替换默认Haprox

作者: 潘晓华Michael | 来源:发表于2019-01-31 09:42 被阅读180次
openshift-nginx

什么是Router

  • Router在Openshift集群的一个不可非常重要的组件,它作为外部请求访问集群内部资源的入口,为Openshift上的应用提供边缘负载均衡。
  • Router可以为应用提供HTTP和websocket流量的负载均衡,同时支持HTTPS连接。Openshift上有一个特殊的资源叫Route,通过它可以方便地配置Router。
  • Openshift集群默认使用Haproxy应用作为Router的实现,它通过容器的形式运行在相应的Node上,同时Router Pod网络使用的宿主机的网络,即hostNetwork=true
  • 除了Haproxy,我们还可以使用Nginx来实现Router,这也是本文的重点。
  • 不管是Haproxy还是Nginx方案都是使用了软件负载均衡器,还可以使用F5等硬件负载均衡器来替换Router,达到性能的提升。
Nginx作为Router的原理图

Nginx Router与默认Router比较

Nginx官方比较表格

如何替换Openshift默认Router

卸载当前Router

  1. 用system:admin登录集群
$ oc login -u system:admin
  1. 选择default项目
$ oc project default
  1. 备份现有的Router
$ oc get -o yaml service/router dc/router clusterrolebinding/router-router-role serviceaccount/router > default-router-backup.yaml
  1. 删除当前Router
$ oc delete -f default-router-backup.yaml

安装Nginx-Router

使用镜像xhuaustc/nginx-openshift-router:1.15部署nginx router

$ oc adm router router --images=xhuaustc/nginx-openshift-router:1.15  --type='' --selector='node-role.kubernetes.io/infra=true'

添加Stub Status页面的查看权限

在Router Pod所部署的结点开通1936端口的访问权限

$ sudo iptables -I OS_FIREWALL_ALLOW -p tcp -m tcp --dport 1936 -j ACCEPT 

在浏览器下查看以下链接$ROUTER_IP:1936/stub_status

添加Prometheus监控支持

  1. 运行如下命令,添加nginx exporter
$ oc patch dc/router -p 'spec:
  template:
    spec:
      containers:
      - image: nginx/nginx-prometheus-exporter:0.1.0
        name: nginx-prometheus-exporter
        ports:
        - name: prometheus
          containerPort: 9113
        args:
          - -web.listen-address
          - :9113
          - -nginx.scrape-uri
          - http://127.0.0.1:1936/stub_status'
  1. 在router service添加exporter想着的标注
$ oc annotate service router --overwrite prometheus.io/port=9113 prometheus.io/scrape=true

此时openshift集群中的prometheus就可以发现nginx exporter的数据

卸载Nginx Router

和卸载之前默认的Router一样,只需要将对应的Object删除即可

$ oc delete service/router dc/router clusterrolebinding/router-router-role serviceaccount/router

Nginx Router性能测试

测试环境:

  • Openshift 3.11 网络插件为ovs-subnet
  • openshift集群物理环境配置为:3 master + 2 Router Node + 2 Computer Node。每台物理机的配置都是cpu 48核/内存 384G 网卡为10Gbps
  • 访问方式,在ab测试机器上,直接在/etc/hosts中绑定 应用域名 与 Router1的IP
  • 应用为一个Nginx页面,页面大小为3.2KB,Pod数为10
  • Router节点系统配置
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog =  36768
net.core.somaxconn = 36768
 
net.core.wmem_default = 8588608
net.core.rmem_default = 8588608
net.core.rmem_max = 16877216
net.core.wmem_max = 16877216
 
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
 
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
 
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3376800
net.ipv4.ip_local_port_range = 1024  65535
  • Router环境变量配置
    • WORKER_RLIMIT_NOFILE: 65535
    • KEEPALIVE_REQUESTS: 10000000
    • WORKER_PROCESSES: 8
    • WORKER_CPU_AFFINITY: 10000000 01000000 00100000 00010000 00001000 00000100 00000010 00000001
    • ROUTER_MAX_CONNECTIONS: 80000
  • Route配置Annotations nginx.router.openshift.io/keepalive: 300

测试工具: ab
测试命令行:ab [-k] -c 4000 -n 1000000 http://xx.com/index.html

with -k Type 页面大小 RPS
Y Svc 4KB 55050
Y Router 4KB 17862
N Svc 4KB 14866
N Router 4KB 18171
Y Svc 500B 72613
Y Router 500B 17813
N Svc 500B 14224
N Router 500B 18527
Nginx Plus版本的Dashboard

补充说明

目前测试结果与Openshift默认的Haproxy Router结果差不多,后序与Nginx工程师一起完善优化后,再作更新。
说实话,对Nginx Router还是很期待的。

参考文献

OpenShift Ecosystem: Implementing the NGINX Proxy Model on Red Hat OpenShift
Introducing NGINX and NGINX Plus Routers for OpenShift Container Platform 3.10
NGINX Plus Router for OpenShift
nginxinc/nginx-openshift-router
nginx-openshift-router/docs/nginx-oss-router-install.md

相关文章

网友评论

    本文标题:Openshift Nginx Router替换默认Haprox

    本文链接:https://www.haomeiwen.com/subject/ectrjqtx.html