网络流程:
DNS负责将域名解析为IP地址,ALB可以在多个服务实例之间分配流量,APISIX作为API网关处理更细粒度的流量管理,Service在Kubernetes中为Pod提供稳定的访问入口,而Kubernetes则负责整个应用的部署、扩展和运维。通过这些技术的协同工作,可以实现高效、可扩展和高可用的云原生应用。
前置知识点:
CDN:
- 作用:(缓存)就近获取缓存资源
- 具体概念:在多个地理位置部署服务器节点,将内容缓存到离用户更近的服务器上,从而加快内容的加载速度和提高可用性。
- 缓存资源类型:CDN通常用于加速静态资源的分发,如图片、视频和JavaScript文件等
DNS服务器:(区别CDN)
- 作用:将域名解析为IP地址
- 具体概念:负责将域名解析为IP地址,以便用户可以通过易于记忆的域名访问网站。DNS服务器会缓存域名解析结果,以提高解析效率和减少延迟。
- 实际上:域名与IP地址映射关系
ALB:
- 作用:负载均衡,转发,安全防护
- 具体概念:应用程序层面工作的负载均衡器,它可以在多个目标(如EC2实例、容器和IP地址)之间自动分配传入的流量。ALB会监控已注册目标的健康状况,并仅将流量传输到运行状况良好的目标。它可以根据传入流量随时间的变化对负载均衡器进行扩展,并支持将请求根据URL路径、主机头等条件路由至不同的目标组
- 安全防护:1.网络访问控制
-
设置 IP 白名单和黑名单:
- 通过配置 ALB 的访问控制列表(ACL),明确指定允许或拒绝访问的 IP 地址范围。你可以将已知的可信来源 IP 地址添加到白名单中,阻止来自特定恶意 IP 地址的访问请求。
- 定期更新黑名单,以应对不断变化的网络威胁。可以使用网络安全情报服务来获取最新的恶意 IP 地址列表。
-
限制访问来源:
- 对于特定的应用场景,可以限制 ALB 只接受来自特定网络区域或云服务提供商内部网络的流量。例如,如果你的应用只面向企业内部用户,可以限制访问来源为企业内部 IP 地址范围。
- 考虑使用虚拟私有云(VPC)来进一步隔离和控制网络访问。确保 ALB 部署在 VPC 中,并配置适当的网络访问策略。
2.加密与认证
-
启用 SSL/TLS 加密:
- 强制所有传入和传出的流量通过 SSL/TLS 进行加密,以保护数据在传输过程中的安全性。ALB 支持多种 SSL/TLS 证书类型,包括自签名证书、由证书颁发机构(CA)颁发的证书等。
- 定期更新 SSL/TLS 证书,确保证书的有效性和安全性。同时,配置证书的自动更新机制,以减少证书过期带来的风险。
-
实施客户端认证:
- 除了服务器端的认证,还可以考虑实施客户端认证。这要求客户端提供有效的数字证书或其他认证凭证,以验证其身份。通过客户端认证,可以进一步增强应用的安全性,防止未经授权的访问。
APISIX:
- 作用:网关,路由转发
- APISIX是一个动态、实时、高性能的API网关,提供丰富的流量管理功能,如负载均衡、动态上游、灰度发布、服务熔断、身份认证等。它可以处理南北向流量和东西向流量,并可以作为Kubernetes Ingress Controller使用。APISIX支持多协议、全动态能力、精细化路由、安全防护和运维友好的特性。
- 特点:
- 丰富的流量管理功能 :
- 负载均衡 :有效分配请求流量到多个后端服务实例,提高系统的可用性和可靠性。通过智能的负载均衡算法,可以根据不同的指标进行请求分发,确保每个实例都能得到合理的负载。
- 动态上游 :能够动态地调整上游服务的配置,适应不断变化的业务需求。当后端服务发生变化时,APISIX 可以快速响应并更新路由规则,保证请求的正确转发。
- 灰度发布:支持渐进式的发布策略,允许在不影响整体系统的情况下,逐步将新功能或更新推送给用户。通过控制流量的比例,可以对新版本进行测试和验证,降低发布风险。
- 服务熔断:当后端服务出现故障时,能够快速熔断连接,避免故障扩散。APISIX 可以监测后端服务的健康状况,并在出现问题时自动中断请求,保护系统的稳定性。
- 身份认证 :提供多种身份认证方式,确保只有授权用户能够访问 API。这有助于保护系统的安全性,防止未经授权的访问和数据泄露。
- 高性能 :APISIX 作为一个动态、实时的 API 网关,具备出色的性能表现。它能够快速处理大量的 API 请求,确保系统的响应速度和吞吐量,满足高并发业务场景的需求。
- 精细化路由 :能够根据不同的请求参数、头部信息等进行精细化的路由转发。这有助于实现复杂的业务逻辑,提高系统的可扩展性和灵活性。
- 安全防护:提供多种安全防护机制,如访问控制、加密传输、防止 SQL 注入和 XSS 攻击等。这有助于保护系统的安全性,防止恶意攻击和数据泄露。
服务svc:
- svc:路由,具体的请求服务
- 含义:服务(svc)在Kubernetes中是指一种抽象,它定义了一种访问Pod的方式。Service为一组Pod提供一个单一的入口地址,并且可以在Pod之间分配请求。Service可以通过Label Selector来选择特定的Pod,并且可以与Ingress、LoadBalancer等资源配合使用,以实现外部访问和负载均衡。
Kubernetes(K8S):
- 作用:集群,容器,监控pod如果挂了,可以及时提起来
- 含义:是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它提供了服务发现、负载均衡、存储编排、自动扩展和自动愈合等功能。在Kubernetes中,Service是连接外部请求与Pod的重要组件,它允许访问者通过一个固定的地址访问后端的Pod,而不管Pod的数量如何变化或Pod的IP地址如何改变
流程:
-
用户发起请求:用户通过浏览器或客户端应用发起对某个服务的请求。
-
DNS域名解析:用户的请求首先需要通过DNS系统解析成服务器的IP地址。
- 如果请求的是静态资源,可能会直接被CDN缓存并提供服务。
-
ALB负载均衡:对于动态内容的请求,会经过应用负载均衡器(ALB),它负责将流量分配到不同的服务实例上,以保证服务的高可用和扩展性。
-
APISIX网关:请求到达APISIX网关,它负责更细粒度的流量管理,如路由、过滤、认证等。
-
服务svc:在Kubernetes中,服务(svc)作为微服务的抽象,它定义了如何访问背后的Pod。服务会将请求代理到后端的Pod。
-
K8S管理服务部署和扩展:Kubernetes负责管理Pod的生命周期,包括服务的部署、扩展和自动愈合。
-
返回响应给用户:处理完请求后,结果会返回给用户,完成整个流程。
总结:
DNS负责将域名解析为IP地址,ALB可以在多个服务实例之间分配流量,APISIX作为API网关处理更细粒度的流量管理,Service在Kubernetes中为Pod提供稳定的访问入口,而Kubernetes则负责整个应用的部署、扩展和运维。通过这些技术的协同工作,可以实现高效、可扩展和高可用的云原生应用。