Kubernetes灰度发布服务路由设计(二)

  • A+
所属分类:Kubernetes

需求

前文介绍了通过ingress判断Header,实现Kubernetes灰度方案,每次灰度都需要在fgateway(网关)修改代码。为解决灰度发布前后需要在fgateway上修改代码的做法,减少因修改代码带来的错误,提出该方案。该方案只需要运维进行灰度配置,不需要修改任何地方的代码。配置后,灰度服务间的调用会首先经过代理服务 fop, fop 进行具体的服务调用,fop本身有一个灰度服务列表,根据列表来调用灰度服务。

灰度场景

  • 需要灰度的服务有三个:fgateway,fcontest, fpay;

  • 代理服务为fop,灰度网关为fgateway-01, 赛事灰度服务为fcontest-01, 支付灰度服务为fpay-01;

  • fgateway-01上的服务路由配置不需要更改,比如/contest/vote 仍旧路由到http://fcontest ;

  • fgateway-01调用后端app的请求均代理到fop, fop根据灰度配置路由请求,这样实际就会调用http://fcontest-01;

  • fcontest-01调用fpay的请求也代理到fop,fop查找到灰度服务有fcontest-01,fpay-01,这样实际就会调用http://fpay-01;

  • 由于fpush没有配置为灰度服务,fcontest-01对fpush的调用fop仍旧路由到http://fpush;

灰度注意事项

  • fgateway永远保留一个灰度实例,所有灰度请求都都先到fgateway-01,以确保只有需要灰度的服务才需要配置代理

  • 需要对请求头grey-ver配置透传;

  • 为提高查询灰度服务列表的性能,fop需要本地缓存灰度服务配置;

  • 灰度服务名字列表的配置要在所有需要灰度的服务创建好之后,并且名字列表作为整体进行设置;

Kubernetes灰度发布服务路由设计(二)

灰度服务配置

需要灰度的服务,构建时,通过dockerfile配置环境变量,设置http代理;

通过测试,dockerfile RUN增加环境变量配置,source /ech/profile不生效;

RUN echo "export http_proxy=http://fop:80" >>/etc/profile
[root@jenkins RC-show-h5-course]# cat /build/proxydockerfile 
####rc
FROM 192.168.0.209/kaifa/java_proxy
ARG JAVA_JAR
ARG JAVA_APP
ARG JAVA_ENV
ENV JAVA_APP ${JAVA_APP}
ENV http_proxy http://fop:80
ENV JAVA_ENV ${JAVA_ENV}
COPY ./target/$JAVA_JAR /app.jar
EXPOSE 80
ENTRYPOINT ["/run.sh"]

修改容器运行脚本/run.sh,增加以下配置,确保java程序http请求走代理

-Dhttp.proxyHost=fop -Dhttp.proxyPort=80

代理测试

1、首先echo $http_proxy,检查系统全局代理是否生效;

2、通过curl -v www.baidu.com ,查看http请求信息,判断是否经过fop代理服务;

3、通过postman检测接口,判断程序是否经过代理服务;

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: