当前位置:网站首页>基于 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,让工程师更专注创造。
欢迎加入 开源吐槽群
边栏推荐
- Mathematical analysis_ Notes_ Chapter 9: curve integral and surface integral
- EN 438-7 laminated sheet products for building covering decoration - CE certification
- The development of research tourism practical education helps the development of cultural tourism industry
- 大二下个人发展小结
- 教你自己训练的pytorch模型转caffe(三)
- MySQL fully parses json/ arrays
- MySQL 千万数据量深分页优化, 拒绝线上故障!
- Establishment of terminal security capability verification environment and penetration test records
- vant 源码解析之 utils/index.ts 工具函数
- 树莓派4B上ncnn转换出来的模型调用时总是崩溃(Segment Fault)的原因
猜你喜欢

Wood board ISO 5660-1 heat release rate mapping test

浅聊我和一些编程语言的缘分

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

五层网络协议

中国的软件公司为什么做不出产品?00后抛弃互联网;B站开源的高性能API网关组件|码农周刊VIP会员专属邮件周报 Vol.097

2.<tag-哈希表, 字符串>补充: 剑指 Offer 50. 第一个只出现一次的字符 dbc

Influence of oscilloscope probe on measurement bandwidth

leetcode:1139. The largest square bounded by 1

When steam education enters personalized information technology courses

木板ISO 5660-1 热量释放速率摸底测试
随机推荐
基于vertx-web-sstore-redis的改造实现vertx http应用的分布式session
研学旅游实践教育的开展助力文旅产业发展
PHP deserialization +md5 collision
PVC plastic sheets BS 476-6 determination of flame propagation properties
MySQL fully parses json/ arrays
LeetCode_哈希表_困难_149. 直线上最多的点数
Abnova CD81 monoclonal antibody related parameters and Applications
水泥胶黏剂BS 476-4 不燃性测试
当用户登录,经常会有实时的下拉框,例如,输入邮箱,将会@qq.com,@163.com,@sohu.com
When steam education enters personalized information technology courses
Abnova CRISPR spcas9 polyclonal antibody protocol
Establishment of terminal security capability verification environment and penetration test records
vant 源码解析之 utils/index.ts 工具函数
WPF gets the control in the datagridtemplatecolumn of the specified row and column in the DataGrid
Research and development efficiency improvement practice of large insurance groups with 10000 + code base and 3000 + R & D personnel
The development of research tourism practical education helps the development of cultural tourism industry
sql系列(基础)-第二章 限制和排序数据
Which securities company is better and which platform is safer for stock account opening
PVC 塑料片BS 476-6 火焰传播性能测定
100 cases of shell programming