最近更新时间:2024.04.26 15:29:02
首次发布时间:2024.04.26 15:29:02
分布式云原生平台提供的注册节点服务通过在注册节点池部署 Nginx Ingress Controller,为边缘单元下的服务提供外部访问及负载均衡等功能,能够有效解决云边协同场景中边缘节点下服务呈现本单元访问闭环的情况。本文为您介绍注册节点安装 Ingress Nginx 的详细使用方法。
分布式云原生平台的注册节点服务,提供远程节点接入和管理能力,解决企业自有 IDC 闲散服务器无法高效利用和运维的难题,以及存在大量局点的服务器管理与应用发布升级问题。
通过使用分布式云原生平台的注册节点服务,可省去搭建和维护本地 Kubernetes 集群的成本,将本地或 IDC 中的服务器注册到云上,提供统一的节点管理与应用发布能力。
部署 Ingress ,需要考虑以下几个方面:ingress-controller 作为 Pod 运行时,应当采用什么方式部署?Ingress 解决了如何把请求路由到集群内部的问题,那如何暴露给外部?云边协同场景下,因云边网络连通限制,ingress-controller 是否需要在边缘单元内部署?
综上所述,Ingress-Nginx 的常见工作模式和适用性如下:
使用 Deployment 部署 ingress-controller,然后创建一个 type 为 LoadBalancer 的 service 关联这组 Pod,最后为 LoadBalancer 的 service 自动创建一个负载均衡器,并绑定公网地址。此时,只需要将域名解析指向该地址,就实现了集群服务的对外暴露。此方式适用于需要将 Ingress 部署到公有云的场景,并不适用于注册节点部署。
使用 deployment 模式结合 nodeselector 将 ingress-controller 部署到特定注册节点,并创建对应的 NodePort 类型服务,此时,Ingress 就会暴露在注册节点 IP 的特定端口上。由于 NodePort 通过随机端口暴露,可再搭建一套负载均衡器来转发请求。此方式通常适用于宿主机相对固定,IP 地址不变的场景。NodePort 方式暴露 Ingress 虽然简单方便,但 NodePort 多了一层 NAT,请求量较大时可能对性能造成一定影响。
使用 DaemonSet 模式结合 nodeselector 将 ingress-controller 部署到特定注册节点,然后使用 HostNetwork 打通 Pod 与宿主机 Node 间的网络,直接使用宿主机 80/433 端口即可访问服务。此时,ingress-controller 所在的 Node 机器类似传统架构的边缘节点(例如:机房入口的 Nginx 服务器)。此方式的整个请求链路最简单,性能相对 NodePort 模式更好。缺点是由于直接利用宿主机节点的网络和端口,一个 Node 只能部署一个 ingress-controller pod,比较适合大并发的生产环境使用。
本文从 0 到 1 为您详细介绍注册节点安装 Ingress Nginx 并通过外部访问,可参考如下步骤依次执行。
本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:创建集群。
配置项 | 说明 |
---|---|
地域 | VKE 集群所属的地域,可在顶部导航栏切换。本场景选择 华北2(北京)地域,与后续注册节点服务所属地域保持一致。 |
Kubernetes 版本 | 根据实际情况选择即可,可用于注册节点服务的控制面集群支持的 Kubernetes 版本包括:v1.20、v1.24 或 v1.26。 |
容器网络模型 | 容器集群使用的网络模型,根据实际情况选择即可,可用于注册节点服务的控制面集群支持的网络模型包括:VPC-CNI、Flannel。 |
API Server 公网访问 | 默认关闭,本场景需要开启此配置,确保后续能够通过公网连接到集群的 API Server 地址。 |
部署应用时指定注册节点服务管控 VKE 集群,并选择 Chart 模板版本,同时考虑到 Ingress-Nginx 在注册节点配置的差异性,需要手动修改 values.yaml 参数。
以容器服务应用中心的 ingress-nginx 应用模板为例(版本:v1.8.4-vke.1) ,不同部署模式下的配置参数说明如下:
配置类型 | 配置说明 |
---|---|
部署模式 | Ingress Nginx Controller 负载类型,可选 Deployment、DaemonSet。 |
服务类型 | Ingress Nginx Controller 负载服务暴露方式可调整为 NodePort 类型,如果负载通过 HostNetwork 访问,此处可以配置为 ClusterIP。 |
HostNetwork 访问 | Ingress Nginx Controller 负载实例访问方式,可配置为 |
注册节点选择 | Ingress Nginx Controller 负载实例期望调度的目标注册节点,可通过内置或者自定义注册节点标签选择。内置标签参考:
|
admissionWebhooks | 需要关闭 Ingress Nginx Controller 的 admissionWebhooks,否则会因为云上云下网络不通导致 Ingress 资源创建失败,配置如下: |
VPC-CNI 网络模型配置 | 如果使用了 VPC-CNI 模式的 VKE 集群作为注册服务管控,需要在 Controller 的 podlabels 添加以下 label,让 webhook 不要自动注入 eni-require。 |
本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:创建无状态负载。
配置项 | 说明 |
---|---|
容器镜像 | 创建工作负载所需的镜像,本场景使用 nginx,需确保此镜像已经添加到镜像仓库。 |
容器版本 | 创建工作负载所需镜像的版本,本场景使用 alpine,需确保此版本的镜像已经添加到镜像仓库。 |
强制调度 | 调度策略中需要强制调度到注册节点中,可通过以下标签配置(本场景使用第二种方式,指定注册节点池安装)。
|
说明
工作负载创建成功后,需要前往工作负载详情页,查看节点 IP,确保实例成功调度到了注册节点上运行。
说明
本场景中的域名属于测试域名,必须在本地 host 文件配置中配置以上创建 Ingress 路由规则中的「域名(dcp.node.com)」 和 「Ingress Nginx Controller 所在注册节点 IP」 的映射,否则不能访问,此步骤不能省略。
此时,可通过 Ingress 域名及端口可以成功访问注册节点上的应用。
此时,因 Controller 实例可直接通过注册节点的 80、443 端口暴露,基于以上配置的域名和 IP 映射,直接访问域名(无需指定 Service NodePort)即可访问到注册节点上的应用。
注意
本次配置需要注意:在ingressClassResource
配置项中设置name
和controllerValue
,并在同一个集群中多次部署 ingress-nginx 时,确保每次部署的name
和controllerValue
唯一。