当前位置:网站首页>基于 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: 80
dev1 环境 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.local
dev1 环境 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.local
dev2 环境 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,让工程师更专注创造。
欢迎加入 开源吐槽群
边栏推荐
- POJ 3414 pots (bfs+ clues)
- 终端安全能力验证环境搭建和渗透测试记录
- CareerCup它1.8 串移包括问题
- 当用户登录,经常会有实时的下拉框,例如,输入邮箱,将会@qq.com,@163.com,@sohu.com
- Simple getting started example of Web Service
- 2.<tag-哈希表, 字符串>补充: 剑指 Offer 50. 第一个只出现一次的字符 dbc
- Web Service简单入门示例
- Five layer network protocol
- Careercup its 1.8 serial shift includes problems
- Pytoch practice -- MNIST dataset handwritten digit recognition
猜你喜欢
基于flask写一个接口
Écrire une interface basée sur flask
leetcode:1139. 最大的以 1 为边界的正方形
phpstudy小皮的mysql点击启动后迅速闪退,已解决
示波器探头对信号源阻抗的影响
LeetCode_ Hash table_ Difficulties_ 149. Maximum number of points on the line
Abnova fluorescent dye 620-m streptavidin scheme
Analyze the knowledge transfer and sharing spirit of maker Education
第05章_存储引擎
MySQL InnoDB架构原理
随机推荐
sql系列(基础)-第二章 限制和排序数据
MySQL InnoDB架构原理
hdu2377Bus Pass(构建更复杂的图+spfa)
Pytoch practice -- MNIST dataset handwritten digit recognition
EN 438-7 laminated sheet products for building covering decoration - CE certification
Abnova CD81 monoclonal antibody related parameters and Applications
Introduction to TS, constructor and its this, inheritance, abstract class and interface
珍爱网微服务底层框架演进从开源组件封装到自研
Viewrootimpl and windowmanagerservice notes
Duchefa cytokinin dihydrozeatin (DHZ) instructions
vant 源码解析之 utils/index.ts 工具函数
js常用方法封装
Comparison table of foreign lead American abbreviations
Determine the best implementation of horizontal and vertical screens
ODPs next map / reduce preparation
ArcGIS\QGIS无插件加载(无偏移)MapBox高清影像图
Promouvoir le développement de l'industrie culturelle et touristique par la recherche, l'apprentissage et l'enseignement pratique du tourisme
CareerCup它1.8 串移包括问题
Interpreting the daily application functions of cooperative robots
AITM2-0002 12s或60s垂直燃烧试验