F5社区-F5技术交流中心

通过NGINX Plus Ingress Controller在k8s实现灰度发布

2020-06-28 16:21:31

Will Tang

在之前的文章中,我们讨论了如何通过F5 Big-IP产品实现应用的灰度发布。那在k8s容器云中,我们是否也能实现灰度发布呢?答案是一定的,借助F5提供的Container Ingress Services(简称CIS),我们依然可以在容器云中通过F5 Big-IP产品使用相同的方式实现应用的灰度发布。今天我们要讨论的是如何通过NGINX Plus(简称N+)来实现容器云中的应用灰度发布。


NGINX Plus Ingress Controller介绍


NGINX Ingress ControllerNGINX公司开发的可用于k8s充当Ingress Controller的产品,有NGINXNGINX Plus两个版本。NGINX是开源免费版,而NGINX Plus是商业版本。


NGINX Plus Ingress Controller除了支持基于http内容的7层路由、TLS/SSL卸载等标准的k8s Ingress功能外,还提供了其它诸多的扩展功能。


而除了k8s原生定义的Ingress之外,NGINX Plus Ingress Controller还通过CRD定义了功能更丰富,配置更简单的7层负载均衡资源,VirtualServerVirtualServerRoute(简称VSVSR),用于对Ingress资源做补充和替换。例如通过VSSplit功能,就能很方便的在k8s中实现按比例的灰度发布。



N+ Ingress Controller实现按比例灰度发布的简单示例


本示例中演示如下功能:我们通过https://cafe.example.com/coffee/来访问应用,这个应用在容器云内有两个版本,对应两个service,一个叫coffee-v1,一个叫coffee-v2,通过N+ Ingress ControllerVS资源的Split功能,10%的请求会访问coffee-v290%的请求会访问coffee-v1


首先运行coffee-v1coffee-v2两个服务,使用nginxdemos/nginx-hello:plain-text容器来做演示。


apiVersion: apps/v1
kind: Deployment
metadata:
  name: coffee-v1
spec:
  replicas: 2
  selector:
    matchLabels:
      app: coffee-v1
  template:
    metadata:
      labels:
        app: coffee-v1
    spec:
      containers:
      - name: coffee-v1
        image: nginxdemos/nginx-hello:plain-text
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: coffee-v1-svc
spec:
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
    name: http
  selector:
    app: coffee-v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: coffee-v2
spec:
  replicas: 2
  selector:
    matchLabels:
      app: coffee-v2
  template:
    metadata:
      labels:
        app: coffee-v2
    spec:
      containers:
      - name: coffee-v2
        image: nginxdemos/nginx-hello:plain-text
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: coffee-v2-svc
spec:
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
    name: http
  selector:
    app: coffee-v2

VSCRD和一些全局参数在安装N+ Ingress Controller时都已配置好,详细内容可以参考官网文档。https://docs.nginx.com/nginx-ingress-controller/overview/


下面我们下发一个VS,实现按比例的灰度发布。


apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
  name: cafe-split
spec:
  host: cafe.example.com
  tls:
    secret: cafe-secret
  upstreams:
  - name: coffee-v1
    service: coffee-v1-svc
    port: 80
  - name: coffee-v2
    service: coffee-v2-svc
    port: 80
  routes:
  - path: /coffee
    splits:
    - weight: 90
      action:
        pass: coffee-v1
    - weight: 10
      action:
        pass: coffee-v2

可以看到整个配置非常简单且易读。


然后我们使用ApacheBench发起100个请求,可以看到全部成功。




再通过N+自带的dashboard,我们可以看到100个请求中的87个被分到了coffee-v1并做了负载均衡,13个请求被分到了coffee-v2并做了负载均衡,比例近似9:1





发布评论 加入社群

发布评论

相关文章

F5灰度发布解决方案介绍

Will Tang

2019-10-23 23:30:39 3355

Login

手机号
验证码
© 2019 F5 Networks, Inc. 版权所有。京ICP备16013763号-1