云原生训练营 -Week08-2

简介: 云原生训练营 -Week08-2

2. 第二部分

除了将 httpServer 应用优雅的运行在 Kubernetes 之上,我们还应该考虑如何将服务发布给对内和对外的调用方。

来尝试用 Service, Ingress 将你的服务发布给集群外部的调用方吧。

在第一部分的基础上提供更加完备的部署 spec,包括(不限于):

Service

Ingress

可以考虑的细节

如何确保整个应用的高可用。

如何通过证书保证 httpServer 的通讯安全。


Service


Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的,另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。


Kubernetes 允许将 Pod 对象通过标签(Label)进行标记,并通过 Service Selector 定义基于 Pod 标签的过滤规则,以便选择服务的上游应用实例。


当 Service 的 Selector 不为空时,k8s Endpoint Controller 会侦听服务创建事件,创建与 Service 同名的 Endpoint 对象。


Selector 能够选取的所有 PodIP 都会被配置到 addresses 属性中:

  • 如果此时 Selector 所对应的 filter 查询不到对应的 Pod,则 addresses 列表为空。
  • 默认配置下,如果此时对应的 Pod 为 not ready 状态,则对应的 PodIP 只会出现在 subsets 的 notReadyAddresses 属性中,这意味着对应的 Pod 还没有准备好提供服务,不能作为流量转发的目标。
  • 如果设置了 PublishNotReadyAddress 为 true,则无论 Pod 是否就绪都会被加入 readyAddress list。


Service、Endpoint 和 Pod 的对应关系:一个 Service 可以选择多个 Pod;一个 Pod 也可以发布成不同的服务,譬如发布 80 和 443 端口,因此 Service 和 Pod 是多对多的关系。而 Endpoint 类似于中间表,维护了 Service 和 Pod 间多对多的关联关系。当我们创建 Service 时,默认是一个 ClusterIP 类型的 Service。


service.yaml

apiVersion: v1
kind: Service
metadata:
  name: httpserver
spec:
  type: ClusterIP
  ports:
    - port: 80
      protocol: TCP
      name: http
  selector:
    app: httpserver


Ingress


Service 是工作在第四层网络协议的负载均衡技术,它只能基于数据包的五元组(通常是指源 IP 地址,源端口,目的 IP 地址,目的端口和传输层协议)信息。


这就意味着它一定是只能做一些简单的网络地址转换,但是我们很多时候的需求不止如此,譬如基于 URL 或用户的请求体进行负载均衡等。


Ingress 是一层代理,反向代理软件的能力:它可以侦听一个地址,然后这个地址接收到请求以后,它可以配置一些规则(可以理解为配置文件),反向代理软件读取配置文件加载规则,并根据规则做转发。


那么配置文件如何生成?在 kubernetes 中抽象成了一个对象,就是 Ingress,它是用户用来描述真正的高层级跳转规则的抽象。


这个抽象由 Ingress Controller 控制器来监听 Ingress 对象,读取对象的规则配置,转化成反向代理软件能识别的的配置格式,然后重启或者热加载等方式让配置生效,比如 nginx HAProxy 或者 Envoy 的配置。


如何确保整个应用的高可用


实现高可用:冗余部署+负载均衡。

Kubernetes 中的负载均衡技术:基于 L4 的服务 和 基于 L7 的 Ingress。


冗余部署:至少多部署一个节点,避免单点问题。


基于 L7 的 Ingress:

  • 外部网络到内部网络还是交给 Service 去处理,但是因为后面还有七层转发,所以四层转发就可以很简单。
  • 我们可以把很多服务挂载在一个 API 网关上面,做统一的接入。
  • 整个网站的微服务可能只用一个 ELB 上的虚 IP,所有网络流量都从统一的虚 IP 接入。
  • 接入后,请求会按照 Service 的转发机制转到 Ingress Pod 里面去。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Cloud Native
云原生训练营 -Week02
云原生训练营 -Week02
257 0
|
Kubernetes Cloud Native Java
云原生训练营大作业
云原生训练营大作业
369 0
|
Cloud Native Docker 容器
云原生训练营 -Week03
云原生训练营 -Week03
221 0
|
多模数据库 Cloud Native NoSQL
Nosql学习之路:云原生多模数据库Lindorm训练营第一弹来啦
Lindorm训练营系列将通过一系列由浅入深的高质量课程和丰富的动手实验,将理论与实践结合,带你从入门到成为高阶开发者。参营学习还有机会获得惊喜彩蛋~
|
Cloud Native 开发者
云原生应用插件扩展训练营上线,帮你开始开源社区贡献者之旅!
阿里云开发者学堂联合云原生开发平台推出了云原生应用插件扩展训练营,帮你开始开源社区贡献者之旅!
云原生应用插件扩展训练营上线,帮你开始开源社区贡献者之旅!
|
人工智能 Kubernetes Cloud Native
火热开营丨快来报名云原生 AI 工程化实践训练营-探索系列
火热开营丨快来报名云原生 AI 工程化实践训练营-探索系列
|
Cloud Native 安全
云原生训练营 - Week12
云原生训练营 - Week12
237 0
|
Prometheus Kubernetes Cloud Native
云原生训练营 -Week10
云原生训练营 -Week10
300 0
|
Kubernetes Cloud Native 网络性能优化
云原生训练营 -Week08
云原生训练营 -Week08
370 0