Ingress 流量接入管理
Ingress 基本概念
Ingress 是 Kubernetes 提供的一种 7 层流量接入方式,它通过连接外部负载均衡器与容器内部服务的方式对流量进行管理,相比 LoadBalancer Service,Ingress 可以简化主机对外开放端口的管理,同时利用外部负载均衡的能力提供更完善了路由和安全规则。
Ingress 公开了从集群外到集群内部的 HTTP 和 HTTPS 路由。流量路由由 Ingress 资源上定义的规则控制。下面是一个将所有流量都发送到同一个 Service 的简单 Ingress 示例。
可以将 Ingress 配置为服务提供外部可访问的 URL、负载均衡流量、终止 SSL/TLS,以及提供基于名称的虚拟主机等能力。 Ingress 控制器 通常负责通过负载均衡器来实现 Ingress,尽管它也可以配置边缘路由器或其他前端来帮助处理流量。
Ingress 不会公开任意端口或协议。 将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。
详情请参考官方文档:Kubernetes Ingress
Ingress 主要有两部分组成:
- Ingress 对象:提供 Ingress kubernetes 对象,能够通过 yaml 进行创建和更新,用于将服务与域名对应起来;
- Ingress Controller:部署在集群中的公共组件,将 Ingress 服务的配置转化成外部负载均衡的配置,对负载均衡器进行管理和更新。
NginxIngressController 是社区最常用的 IngressController,能够满足用户基础及高级功能需求。包括:7 层 HTTP 流量转发及负载均衡、简单路由服务、基于域名的扇出路由、配置 HTTPS、Websocket、会话粘滞等。详细功能列表及使用方式可参考官方文档:NginxIngressController
环境准备
CNAP 通过组件中心提供了在用户集群中部署 NginxIngressController 的功能,同时 NginxIngressController 需要通过一个 LoadBalancer 类型的 Service 作为集群的流量入口。创建 LoadBalancer Service 会同步在公有云创建普通型 BLB 承接 4 层流量并绑定 EIP。在使用 NginxIngressController 后,单个用户集群仅需创建一个 BLB 及 EIP 即可实现对集群内所有 Service 的流量接入,维护成本低,使用更方便。
部署 NginxIngressController
- 进入“组件中心”,选择“添加组件”
- 选择“NginxIngressController”
- 填写组件信息
组件信息包括:
- 组件名称:支持小写字母、数字、- 字符,首尾必须字母或数字,长度在 2-26
- 组件描述:长度小于 140 个字符的任意字符串
- 集群:该下拉框会展示所有用户当前可用的集群
- 副本数:期望部署的 Nginx 实例的副本数
-
访问类型:
- 公网访问:会创建 BLB 及 EIP,可在集群外通过 EIP 访问
- VPC 内访问:仅创建 BLB,仅可在集群所在 VPC 内利用 Ingress 实现流量接入
-
规则类型:
- IPv4:默认值,为用户创建 IPv4 类型的 EIP 及 BLB
- IPv6:要求用户所选择的集群支持 IPv6,为用户创建 IPv6 类型的 EIP 和 BLB
-
BLB 类型:
- 新建:为用户新建 BLB
- 已有:可在下拉框中选择一个已存在的 BLB
- 所在网络:用户可选择目标的 VPC 及子网
- 高级配置:高级配置目前支持配置节点选择器, 用户可以配置控制 Nginx 实例的运行节点
- 确认部署状态
填写组件信息并确认后,CNAP 发起在集群中部署 NginxIngressController, 部署过程一般需要持续 3~5 分钟,且组件状态为 “部署中”。 当完成部署后,组件状态变更为“运行中”,且组件列表会展示为 IngressController 创建的 EIP。
新建应用路由
在完成部署 NginxIngressController 后,用户可以在“应用托管” - “流量接入” 界面下新建应用路由,用于配置将流量指向目标的部署组访问方式(Service)。
- 进入“新建应用路由”界面
注意需要选择目标部署组所在的工作空间
- 填写基本信息
- 名称:应用路由规则名称
- 别名:应用路由规则的别名
- 环境名称:用户需要选择工作空间下的环境
- 集群:如果环境已绑定集群,那么该项不可编辑;否则用户可以在该下拉框选择集群并与环境绑定
- 描述:应用路由规则的描述
- 填写路由规则
一个应用路由可以包含多条路由规则,每条路由规则主要包括:
- 域名:填写该应用路由所关联的域名
- 协议:HTTP 或 HTTPS,如果用于选择 HTTPS 则需要选择托管在百度证书服务上的 TLS 证书
-
路径:路由规则对应的路径信息
- 子路径:非必填,为相对于根域名的路径
- 访问方式:从下拉列表选择流量接入的目标访问方式(Service)
- 端口:从下拉列表选择访问方式向外暴露的端口
- 根据需要填写高级配置
高级配置主要包括:
- 超时
- 重定向
- 限速
- 认证
- 会话粘滞
- 灰度发布
- 跨域资源共享
- 自定义
具体的配置项及可选值请参考:NginxIngressController 配置
- 根据 Yaml 确认配置正确性
用户在编辑应用路由过程中可以随时点击查看 Yaml 来查看当前应用路由配置项所对应的 Yaml 内容,在 Yaml 查看界面也可以通过点击 返回表单以表单形式编辑路由规则:
- 点击“提交”完成路由规则创建
- 根据配置的路由规则及 NginxIgressController 的访问 IP 即可验证路由转发规则