OpenShif Route路由实现机制探究(1)

本文探究OpenShift Route的实现机制,重点分析默认Router使用Haproxy作为负载均衡器的配置。通过查看Router Pod的Docker镜像,确认其基于Haproxy。接着,作者展示了如何进入Router容器并查看其目录结构,揭示了Haproxy的配置文件及其作用。文章讨论了frontend和backend配置,以及如何映射到实际的服务提供者。最后,文章指出Haproxy直接使用Pod的地址作为后端服务器地址,暗示了Route配置到Haproxy配置的转换过程。
摘要由CSDN通过智能技术生成

OpenShif Route路由实现机制探究(1)

在前面一篇译文《蓝绿、A/B和金丝雀部署 —— 《DevOps with OpenShif》第3章 节选》中,利用OpenShift Route路由配置实现了蓝绿、A/B部署,在整个过程完成后通过界面或命令行可以看到有3个Route路由配置。

1526170421331
1526170569925

一直想了解OpenShif是如何实现服务路由,以及如何在创建/更新路由规则后动态更新配置动态生效,所以打算粗略翻翻OpenShif的源码,探究其Route路由实现机制。所谓“好奇害死猫”,不知道能否坚持做下来。 才学浅薄,一点点来吧……

先来瞧瞧OpenShift安装完毕后,默认的Router路由器是哪一个,上面这些Route路由规则配置转换成路由器的配置又是个什么样子。

(本系列博客使用minishift单机环境完成)

默认Router路由器使用的是哪一个?

让我们通过查看OpenShift Router对应Pod所使用的Docker镜像名称来初步判断其使用的是什么软件。

先look下Router Pod的名称,下面的命令在所有namespace命名空间以router关键字搜索对象:

$ oc get pods --all-namespaces | grep router
default                 router-1-xhc4f                  1/1       Running     2          12d

看到有一个名称为router-1-xhc4f的Pod,位于default命名空间,应该对应的就是默认Router。

再让我们从正向路径来确认,按照OpenShift文档说明,查看默认Router的信息:

$ oc adm router --dry-run -o yaml --service-account=router

命令输出内容中有关于DeploymentConfig的配置,可以确定默认Router部署配置的名称是router

- apiVersion: v1
  kind: DeploymentConfig
  metadata:
    creationTimestamp: null
    labels:
      router: router
    name: router
  template:
      ...
      spec:
        containers:
        ...
        image: openshift/origin-haproxy-router:v3.9.0
        ...
...

再以router为名称,查看DeploymentConfig配置内容,关注其对应的Deployment名称:

$ oc describe dc router -n default
Deployment #1 (latest):
    Name:       router-1
...

默认Router的Deployment名称是router-1, 与上面查到Pod名称router-1-xhc4f前缀相符,以OpenShift对象命名规则(也是Kubernetes命名规则),可以确定此Pod就是默认Router运行时。

确定Pod名称后,我们再来查下Pod对应的Docker镜像名称是什么:

$ oc get pods router-1-xhc4f -n default -o yaml | grep image
image: openshift/origin-haproxy-router:v3.9.0

镜像名称与上面DepoymentConfig配置内容中image配置项一致,都是openshift/origin-haproxy-router:v3.9.0

从默认Router镜像名称上,得出其使用的是Haproxy负载均衡软件。

其实这么做有脱裤子放屁之嫌,默认Router是使用Haproxy的事实,在OpenShift文档中都有提及,比如:

这里,and 这里等等,哈哈哈哈….

获取Router配置文件

确认了默认Router的Pod名称,那就连接进去蹓跶蹓跶。

连接进入容器
$ oc -n default exec -ti router-1-xhc4f bash 

上面的命令指定在命名空间default中Podrouter-1-xhc4f容器上执行bash 进入Shell,并以-ti声明终端交互方式。

Router运行环境目录结构

连接进入Router Pod容器后,使用命令tree查看Haproxy工作目录结构:

[inside pod]$ tree 
.
├── bin
├── conf
│   ├── cert_config.map
│   ├── default_pub_keys.pem
│   ├── error-page-503.http
│   ├── haproxy.config
│   ├── haproxy-config.template
│   ├── os_edge_http_be.map
│   ├── os_http_be.map
│   ├── os_reencrypt.map
│   ├── os_route_http_expose.map
│   ├── os_route_http_redirect.map
│   ├── os_sni_passthrough.map
│   ├── os_tcp_be.map
│   └── os_wildcard_domain.map
├── Dockerfile
├── log
├── reload-haproxy
├── router
│   ├── cacerts
│   ├── certs
│   └── routes.json
└── run
    ├── haproxy.pid
    └── haproxy.sock

从目录中的配置文件名称中,可再次确认OpenShift默认Router采用的是Haproxy。

让我们来看看它的配置文件,是如何实现前一篇译文《

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值