当前位置:网站首页>基于 Ingress Controller 在集群外访问 Zadig 自测环境(最佳实践)
基于 Ingress Controller 在集群外访问 Zadig 自测环境(最佳实践)
2022-07-05 21:04:00 【Zadig云原生交付】

Zadig 从 v1.11.0 版本推出了自测模式,开发者之间可以共享同一套基准环境,从基准环境拉出子环境来部署少量变更的服务。通过子环境和基准服务交互,实现了在复杂业务场景下低成本的自测联调: 
Zadig 自测模式在应用场景上,主要针对集群内部的流量动态管理做了支持,但在日常工作中,开发者通常会需要在集群外部访问集群中的服务,比较常见的模式是基于 Ingress Controller 访问集群中的服务。
Nginx Ingress Controller 和 Istio Ingress Gateway 作为常用的 Ingress Controller,下述将分别基于这两种类型的 Ingress Controller,实现集群外部访问集群内部的自测环境。
实现原理
Kubernetes Ingress 和 Istio Gateway 可以基于 Host 和请求 Path 做动态路由,将集群外部的请求转发到内部的 Service。外部请求进入到集群中的服务后,可基于 Zadig 自测模式使用的 Istio 的能力,基于灰度标将请求动态路由到目标环境中的服务。
即基于 二次动态路由 实现集群外部对集群中自测环境的访问:
- 基于 Ingress 或 Istio Gateway,路由集群外部请求到集群内的环境
- 基于灰度标,路由集群内部自测模式的请求
基于 Ingress

假设用户基准环境 base 中部署了 3 个服务 A / B / C,请求链路为 A->B->C。基于基准环境创建了 2 个子环境 dev1 和 dev2,dev1 中部署了服务 A' / B',dev2 中部署了服务 B'' / C''。
用户在另一个 namespace 中部署了 Ingress Controller (如 Nginx Ingress Controller 或 Istio Ingress Gateway),该 Ingress Controller 不用注入 istio-proxy。
为了实现从集群外部对集群中自测环境的访问,需要分别在 base 和 dev1 环境中部署 Ingress,基于 Host 将外部请求路由到相应的环境中 (由于 dev2 没有部署入口访问服务 A,故不用部署 Ingress,通过 base 环境的 Ingress 将外部请求路由到 dev2 环境)。
- 当用户从外部访问 base 环境,请求的 Host 配置 base 环境中配置的 Ingress 的 Host,请求 header 中可选加灰度标
x-env=base。 - 当用户从外部访问 dev1 环境,请求的 Host 配置 dev1 环境中配置的 Ingress 的 Host,请求 header 中添加灰度标
x-env=dev1。 - 当用户从外部访问 dev2 环境,请求的 Host 配置 base 环境中配置的 Ingress 的 Host,请求 header 中添加灰度标
x-env=dev2。
基于 Istio Gateway
Istio Gateway 提供了比 Ingress 更灵活的流量管理能力,在上述集群外部访问集群中自测环境的场景中,示意图如下: 
使用方法同上,区别点在于可在 dev2 环境中部署 Gateway 资源,在集群外部访问 dev2 环境时,请求的 Host 可配置为 dev2 环境中配置的 Host。
案例实践
基于 Ingress 的实践
适用于 Nginx Ingress Controller 和 Istio Ingress Gateway
base 环境 Ingress:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: ingress namespace: piggymetrics-env-basespec: rules: - host: "base.testing.koderover.com" http: paths: - path: / pathType: Prefix backend: service: name: a port: number: 80dev1 环境 Ingress:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: ingress namespace: piggymetrics-env-dev1spec: rules: - host: "dev1.testing.koderover.com" http: paths: - path: / pathType: Prefix backend: service: name: a port: number: 80集群外部访问集群中的自测环境:
# 访问 base 环境$ curl -sSL -H "Host: base.testing.koderover.com" -H "x-env: base" http://<INGRESS IP>/api/v1/info# 访问 dev1 环境$ curl -sSL -H "Host: dev1.testing.koderover.com" -H "x-env: dev1" http://<INGRESS IP>/api/v1/info# 访问 dev2 环境$ curl -sSL -H "Host: base.testing.koderover.com" -H "x-env: dev2" http://<INGRESS IP>/api/v1/info基于 Gateway 的实践
适用于 Istio Ingress Gateway
base 环境 Gateway:
apiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata: name: base-gateway namespace: piggymetrics-env-basespec: selector: istio: ingressgateway servers: - port: number: 8080 name: http protocol: HTTP hosts: - "base.testing.koderover.com"---apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata: name: base namespace: piggymetrics-env-basespec: hosts: - "*" gateways: - base-gateway http: - route: - destination: port: number: 80 host: a.piggymetrics-env-base.svc.cluster.localdev1 环境 Gateway:
apiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata: name: dev1-gateway namespace: piggymetrics-env-dev1spec: selector: istio: ingressgateway servers: - port: number: 8080 name: http protocol: HTTP hosts: - "dev1.testing.koderover.com"---apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata: name: base namespace: piggymetrics-env-dev1spec: hosts: - "*" gateways: - dev1-gateway http: - route: - destination: port: number: 80 host: a.piggymetrics-env-dev1.svc.cluster.localdev2 环境 Gateway:
apiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata: name: dev2-gateway namespace: piggymetrics-env-dev2spec: selector: istio: ingressgateway servers: - port: number: 8080 name: http protocol: HTTP hosts: - "dev2.testing.koderover.com"---apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata: name: dev2 namespace: piggymetrics-env-dev2spec: hosts: - "*" gateways: - dev2-gateway http: - route: - destination: port: number: 80 host: a.piggymetrics-env-base.svc.cluster.local集群外部访问集群中的自测环境:
# 访问 base 环境$ curl -sSL -H "Host: base.testing.koderover.com" -H "x-env: base" http://<INGRESS IP>/api/v1/info# 访问 dev1 环境$ curl -sSL -H "Host: dev1.testing.koderover.com" -H "x-env: dev1" http://<INGRESS IP>/api/v1/info# 访问 dev2 环境$ curl -sSL -H "Host: dev2.testing.koderover.com" -H "x-env: dev2" http://<INGRESS IP>/api/v1/info展望
基于 Nginx Ingress Controller 或 Istio Ingress Gateway,我们可以通过简单的配置实现从集群外部到集群中自测环境的访问,方便开发者灵活选择访问方式,提升开发自测效率。
未来 Zadig 会考虑如何将上述能力产品化,支持更多的请求协议和灰度规则,并增强流量的可观测性,给开发者提供更易使用的产品体验。
Zadig,让工程师更专注创造。
欢迎加入 开源吐槽群
边栏推荐
- Five layer network protocol
- Interpreting the daily application functions of cooperative robots
- 第05章_存储引擎
- ArcGIS\QGIS无插件加载(无偏移)MapBox高清影像图
- CareerCup它1.8 串移包括问题
- Phpstudy Xiaopi's MySQL Click to start and quickly flash back. It has been solved
- Duchefa low melting point agarose PPC Chinese and English instructions
- Influence of oscilloscope probe on measurement bandwidth
- LeetCode_哈希表_困难_149. 直线上最多的点数
- vant 源码解析 之深层 合并对象 深拷贝
猜你喜欢

Interpreting the daily application functions of cooperative robots

The development of research tourism practical education helps the development of cultural tourism industry

基于vertx-web-sstore-redis的改造实现vertx http应用的分布式session

leetcode:1139. The largest square bounded by 1

Duchefa low melting point agarose PPC Chinese and English instructions
![[case] Application of element display and hiding -- element mask](/img/6e/6ea484a6e5d547e01dd8820af8e314.png)
[case] Application of element display and hiding -- element mask

EN 438-7建筑覆盖物装饰用层压板材产品—CE认证

Wood board ISO 5660-1 heat release rate mapping test

Open source SPL eliminates tens of thousands of database intermediate tables

教你自己训练的pytorch模型转caffe(一)
随机推荐
MySQL InnoDB架构原理
hdu2377Bus Pass(构建更复杂的图+spfa)
php中explode函数存在的陷阱
教你自己训练的pytorch模型转caffe(一)
[case] Application of positioning - Taobao rotation map
研学旅游实践教育的开展助力文旅产业发展
The transformation based on vertx web sstore redis to realize the distributed session of vertx HTTP application
当用户登录,经常会有实时的下拉框,例如,输入邮箱,将会@qq.com,@163.com,@sohu.com
教你自己训练的pytorch模型转caffe(三)
Abnova CD81 monoclonal antibody related parameters and Applications
基于vertx-web-sstore-redis的改造实现vertx http应用的分布式session
js常用方法封装
概率论机器学习的先验知识(上)
判断横竖屏的最佳实现
Mode - "Richter replacement principle"
Matplotlib drawing retouching (how to form high-quality drawings, such as how to set fonts, etc.)
Research and development efficiency improvement practice of large insurance groups with 10000 + code base and 3000 + R & D personnel
How to renew NPDP? Here comes the operation guide!
Binary search
大二下个人发展小结