一些云提供商在实现零信任安全的方法上也提供了定制化的解决方案 。例如,GCP 为其用户提供身份意识代理(IAP),可用于代替典型的 VPN 实现 。
所有都处理好之后,下一步是根据你的用例在集群本身内设置网络 。
这牵涉到以下任务:
- 设置集群内的服务发现(可由 CoreDNS 处理)
- 如果需要的话,设置一个服务网格(如 LinkerD、Istio、Consul 等)
- 设置 Ingress controller 和 API 网关(例如:Nginx、Ambassador、Kong、Gloo 等)
- 设置使用 CNI 的网络插件,方便集群内的联网
- 设置网络策略,调节服务间的通信,并根据需要使用各种服务类型暴露服务
- 使用 GRPC、Thrift 或 HTTP 等协议和工具,设置不同服务之间的服务间通信
- 设置 A/B 测试,如果你使用像 Istio 或 Linkerd 这样的服务网格,实现起来可以更容易
而云计算中网络的有趣之处在于,它不局限于你所在地区的云服务商,而是可以根据需要跨越多个地区的多个服务商 。这就是 Kubefed 或 Crossplane 这样的项目可以提供帮助的地方 。
如果你想探索更多关于设置 VPC、子网和整体网络时的一些最佳实践,我建议你访问下方网页,同样的概念也适用于你加入的任何云提供商:
https://cloud.google.com/solutions/best-practices-vpc-design
Kubernetes如果你使用的是 GKE、EKS、AKS 这样的托管集群,Kubernetes 是自动管理的,从而降低了用户操作的复杂程度 。
如果你自己管理 Kubernetes,你需要处理很多事情,比如,备份和加密 etcd 存储,在集群中的各个节点之间建立网络,定期为你的节点打上最新版本的操作系统补丁,管理集群升级以与上游的 Kubernetes 版本保持一致 。基于此,只有当你拥有一个专门的团队来维护这些事情的时候,才建议这样做 。
Site Reliability Engineering (SRE)当你维护一个复杂的基础设施时,拥有合适的可观察性堆栈是非常重要的,这样你就可以在用户注意到错误之前就检测到错误以及预测可能的变化,进而识别异常,并有余力深入钻研问题到底在哪里 。
现在,这就需要你有代理,将指标暴露为特定的工具或应用来收集分析(可以遵循 pull 或 push 机制) 。而如果你使用的是带有 sidecars 的服务网格,它们往往会自带指标,而不需要自定义配置 。
在任意场景下,都可以使用 Prometheus 这样的工具作为时序数据库,为你收集所有的指标,以及借助类似于 OpenTelemetry 的工具,使用内置的 exporter 从应用程序和各种工具中公开指标 。借助 Alertmanager 之类的工具可以向多个渠道发送通知和告警,Grafana 将提供可视化仪表板,给用户提供整个基础设施的完整可见性 。
综上,这就是 Prometheus 的可观察性的解决方案:
文章插图
来源:https://prometheus.io/docs/introduction/overview/拥有这样复杂的系统,还需要使用日志聚合系统,这样所有的日志就可以流到一个地方,便于调试 。大部分企业倾向于使用 ELK 或 EFK 堆栈,Logstash 或 FluentD 根据你的限制条件为你做日志聚合和过滤 。但日志领域也有新的玩家,比如 Loki 和 Promtail 。
下图说明了类似 FluentD 的日志聚合系统如何简化你的架构:
文章插图
来源:https://www.fluentd.org/architecture但是,如果要追踪跨越多个微服务和工具的请求呢?这是分布式跟踪开始发挥作用的地方,特别是考虑到微服务的复杂性 。像 Zipkin 和 Jaeger 这样的工具一直是这个领域的先驱,最近进入这个领域的新兴工具是 Tempo 。
虽然日志聚合会给出各种来源的信息,但它不一定能给出请求的上下文,这才是做跟踪真正有帮助的地方 。但是请记住,在你的堆栈中添加跟踪会给你的请求增加很大的开销,因为上下文必须和请求一起在服务之间传播 。
下图是一个典型的分布式跟踪架构:
文章插图
来源:https://www.jaegertracing.io/docs/1.21/architecture/
推荐阅读
- 高德地图AR驾车导航新升级 实现全面机型覆盖
- Python网络编程实现自动化,简化Telnet网络配置工作
- 一文带你了解搜索功能设计
- 翡翠|一文读懂翡翠的种
- IP代理技术是如何实现IP地址的切换与隐藏?
- Python实现钉钉/企业微信自动打卡
- 还不知道ReentrantLock的实现流程,那你就out了
- 一文看懂 HashMap 中的红黑树实现原理
- nginx加vpn实现访问内网的云服务器
- Go语言实现海量日志收集系统