应用背景:应用发布需要基于请求灰度头进行灰度测试,携带请求头的请求灰度到灰度服务。
组件支持:ingress-nginx-controller自带的灰度策略。
测试步骤:准备两套环境,生产环境/测试环境,准备测试应用镜像,根据环境变量输出日志方便观察日志判断流量是被路由到哪个环境的服务,分别部署应用到生产和测试环境,编写测试脚本进行测试。接下来重点展示部署和测试脚本。
一、测试应用app.py
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文件
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
flask==2.0.3
werkzeug==2.0.3 # 固定兼容版本
四、部署脚本k8s.yaml
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
五、测试脚本
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 删除。