# nginx-ingress **Repository Path**: cesresearch/nginx-ingress ## Basic Information - **Project Name**: nginx-ingress - **Description**: 使用Ingress实现蓝绿和灰度发布 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2019-01-18 - **Last Updated**: 2024-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # nginx-ingress #### 介绍 使用Ingress实现蓝绿和灰度发布 #### 部署教程 1. 部署Ingress服务 ``` cd ./ingress kubectl create namespace ingress kubectl apply -f . ``` 2. 部署Demo ``` cd ./demo kubectl apply -f . ``` #### 使用说明 1. 添加对域名www.example.com的解析 ``` echo "127.0.0.1 www.example.com" >> /etc/hosts ``` 2. 可以通过以下方式访问测试 ``` curl http://www.example.com:30000 curl http://www.example.com:30000/?version=app2 ``` #### 灰度发布中的A/B 测试 蓝绿发布是为新版本创建一个与老版本完全一致的生产环境,在不影响老版本的前提下,按照一定的规则把部分流量切换到新版本,当新版本试运行一段时间没有问题后,将用户的全量流量从老版本迁移至新版本。 1. 文件app-ingress.yaml配置 ``` apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/service-match: | app-service2: query("version", "app2") name: app-ingress spec: rules: - host: www.example.com http: paths: - backend: serviceName: app-service1 servicePort: 80 path: / - backend: serviceName: app-service2 servicePort: 80 path: / ``` 2. 访问app1(蓝) ``` curl www.example.com:30000 ``` 3. 访问app2(绿) ``` curl www.example.com:30000/?version=app2 ``` #### 蓝绿发布实现 1. 文件app-ingress.yaml配置 ``` apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/service-weight: | app-service1: 50, app-service2: 50 name: app-ingress spec: rules: - host: www.example.com http: paths: - backend: serviceName: app-service1 servicePort: 80 path: / - backend: serviceName: app-service2 servicePort: 80 path: / ``` 2. 以上为服务权重配置,近4次访问结果如下 ``` curl www.example.com:30000 {"VERSION": "app1", "IP": "10.244.1.92"} {"VERSION": "app2", "IP": "10.244.1.91"} {"VERSION": "app1", "IP": "10.244.2.72"} {"VERSION": "app2", "IP": "10.244.2.91"} ``` #### 会话保持设置 ``` kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/affinity: "cookie" nginx.ingress.kubernetes.io/session-cookie-name: "route" nginx.ingress.kubernetes.io/session-cookie-hash: "sha1" ```