云原生训练营 -Week08-2

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 云原生训练营 -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 里面去。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
Cloud Native
云原生训练营 -Week02
云原生训练营 -Week02
43 0
|
Kubernetes Cloud Native Java
云原生训练营大作业
云原生训练营大作业
116 0
|
Cloud Native Docker 容器
云原生训练营 -Week03
云原生训练营 -Week03
60 0
|
4月前
|
多模数据库 Cloud Native NoSQL
Nosql学习之路:云原生多模数据库Lindorm训练营第一弹来啦
Lindorm训练营系列将通过一系列由浅入深的高质量课程和丰富的动手实验,将理论与实践结合,带你从入门到成为高阶开发者。参营学习还有机会获得惊喜彩蛋~
|
12月前
|
人工智能 Kubernetes Cloud Native
火热开营丨快来报名云原生 AI 工程化实践训练营-探索系列
火热开营丨快来报名云原生 AI 工程化实践训练营-探索系列
|
Cloud Native 安全
云原生训练营 - Week12
云原生训练营 - Week12
72 0
|
Prometheus Kubernetes Cloud Native
云原生训练营 -Week10
云原生训练营 -Week10
90 0
|
Kubernetes Cloud Native 网络性能优化
云原生训练营 -Week08
云原生训练营 -Week08
93 0
|
消息中间件 Cloud Native Linux
云原生人才培养计划2.0 之 「消息产品全家桶训练营」开营启动!
2021年8月,阿里云联合Linux基金会发布云原生人才培养计划2.0,协同开源生态力量,为云原生领域提供更具专业性的定向人才培养方式,帮助云原生时代的开发者更好地享受云红利,创造新价值。今年12月,开发者社区与阿里云消息产品团队开设的RocketMQ训练营,在极短时间内就有近万名开发参与,受到开发者的喜爱,基于用户需要,开发者社区发起「消息产品全家桶训练营」,邀请消息产品线负责人隆基出品,10+
141 0
云原生人才培养计划2.0  之 「消息产品全家桶训练营」开营启动!
|
消息中间件 存储 Cloud Native
云原生人才培养计划2.0 之 消息产品「全家桶训练营」重磅来袭
今年12月,开发者社区与阿里云消息产品团队再次联合出品消息产品全家桶训练营,本次训练营覆盖了 RocketMQ、Kafka、RabbitMQ、MNS、EventBridge 多种消息产品及接入场景,10+消息团队专家授课,帮助开发者在不同的业务场景用好消息。
云原生人才培养计划2.0 之 消息产品「全家桶训练营」重磅来袭

热门文章

最新文章