首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Ingress灰度路由策略-基于请求头灰度

Ingress灰度路由策略-基于请求头灰度

原创
作者头像
dufu
发布2025-03-06 21:35:23
发布2025-03-06 21:35:23
1680
举报
文章被收录于专栏:k8s相关实操k8s相关实操

应用背景:应用发布需要基于请求灰度头进行灰度测试,携带请求头的请求灰度到灰度服务。

组件支持:ingress-nginx-controller自带的灰度策略。

测试步骤:准备两套环境,生产环境/测试环境,准备测试应用镜像,根据环境变量输出日志方便观察日志判断流量是被路由到哪个环境的服务,分别部署应用到生产和测试环境,编写测试脚本进行测试。接下来重点展示部署和测试脚本。

一、测试应用app.py

代码语言:txt
复制
import os
import logging
from flask import Flask, jsonify

app = Flask(__name__)

# 日志配置
logging.basicConfig(
    format='%(asctime)s [%(levelname)s] %(message)s',
    level=logging.INFO
)
logger = logging.getLogger(__name__)

@app.route('/')
def main():
    # 从环境变量获取配置
    service_name = os.getenv('SERVICE_NAME', 'default')
    log_message = os.getenv('LOG_MESSAGE', 'Default log message')
    version = os.getenv('VERSION', 'v1')
    
    # 记录日志
    logger.info(f"[{service_name}-{version}] {log_message}")
    
    return jsonify({
        "service": service_name,
        "version": version,
        "message": log_message
    })

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

二、Dockerfile文件

代码语言:txt
复制
FROM python:3.9-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .

CMD ["python", "app.py"]

三、requirements.txt

代码语言:txt
复制
flask==2.0.3
werkzeug==2.0.3  # 固定兼容版本

四、部署脚本k8s.yaml

代码语言:txt
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/canary: 'true'
    nginx.ingress.kubernetes.io/canary-by-header: X-Is-Gray
    nginx.ingress.kubernetes.io/canary-by-header-value: 'true'
  creationTimestamp: '2025-02-28T02:07:37Z'
  generation: 1
  managedFields:
    - apiVersion: networking.k8s.io/v1
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:annotations:
            .: {}
            f:kubernetes.io/ingress.class: {}
            f:nginx.ingress.kubernetes.io/canary: {}
            f:nginx.ingress.kubernetes.io/canary-by-header: {}
            f:nginx.ingress.kubernetes.io/canary-by-header-value: {}
        f:spec:
          f:rules: {}
      manager: fabric8-kubernetes-client
      operation: Update
      time: '2025-03-02T04:53:08Z'
  name: canary-ingress
  namespace: python-gray
  resourceVersion: '11026165'
  uid: 46d157ac-ed96-45c5-b4ef-e2a2abfddc52
spec:
  rules:
    - host: canary.demo.com
      http:
        paths:
          - backend:
              serviceName: canary-svc
              servicePort: 80
            path: /
            pathType: ImplementationSpecific

五、测试脚本

代码语言:txt
复制
curl -sSf -m 5 -H "Host: canary.demo.com" -H "X-Is-Gray: true" http://172.19.0.242

六、测试结果

由测试结果可以查看到携带请求灰度头的被正确路由到灰度服务。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档