项目背景:
因公司业务转移至线上商城,为应对每月活动,对业务要求及时性高,被要求不间断发布与测试。并且防止商城秒杀等页面被恶意攻击。
项目实施:
技术选项:istio,flagger,kubernetes (自建),jekines,nacos
实施:
istio 自身也可以做灰度发布,主要基于他本身的 IngressRoute 的路由规则,但针对流量转移,自动回滚,部署这些是人为操作;故而找到开源的 flagger 进行流量灰度的渐进式交付,使用 Prometheus 监控接口指标判断,进行自动化灰度(金丝雀发布需要研发配合接口改造)发布和回滚.
又因 SpringColoud 微服务注册到 nacos,nacos 服务注册调用的默认方式是轮询,故和研发沟通新增类似健康检查的接口作为下线预警,在 deployment 的时候调用这个接口,实现 nacos 注册的服务权重由1变0,并在30s后下线。
安全方面:
Istio中设置黑白名单、熔断和错误访问限制是提高服务网格安全性和稳定性。
如:黑白名单
黑白名单可以通过Istio的AuthorizationPolicy资源来实现
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: whitelist-policy
namespace: default
spec:
selector:
matchLabels:
app: my-app
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/my-service-account"]