Gateway API 实践之(六)FSM Gateway 的健康检查功能

2024-01-30 10:52

本文主要是介绍Gateway API 实践之(六)FSM Gateway 的健康检查功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

FSM Gateway 流量管理策略系列:

  • 故障注入
  • 黑白名单访问控制
  • 限速
  • 重试
  • 会话保持
  • 健康检查
  • 负载均衡算法
  • TLS 上游
  • 双向 TLS

网关的健康检查功能是一种自动化监控机制,用于定期检查和验证后端服务的健康状况,确保流量只被转发到那些健康且能正常处理请求的服务。这一功能在微服务或分布式系统中尤为关键,因为它通过及时识别并隔离故障或性能下降的服务,来维护系统的高可用性和弹性。

通过健康检查,网关能够保证请求负载被有效地分配到运行良好的服务上,从而提高整体系统的稳定性和响应速度。

前置条件

  • Kubernetes 集群
  • kubectl 工具

环境准备

安装 FSM Gateway

FSM Gateway 的安装,可以参考 安装文档。这里选择 CLI 的方式安装。

下载 FSM CLI。

system=$(uname -s | tr '[:upper:]' '[:lower:]')
arch=$(uname -m | sed -E 's/x86_/amd/' | sed -E 's/aarch/arm/')
release=v1.2.0
curl -L https://github.com/flomesh-io/fsm/releases/download/$release/fsm-$release-$system-$arch.tar.gz | tar -vxzf -
./$system-$arch/fsm version
sudo cp ./$system-$arch/fsm /usr/local/bin/fsm

在安装 FSM 时启用 FSM Gateway,默认情况是不启用的。

fsm install \--set=fsm.fsmGateway.enabled=true

部署示例应用

为了验证健康检查功能,需要两个不同健康状态的端点。因此我们创建了 Service pipy,并为其创建了两个返回不同响应的端点。这两个端点使用可编程代理 Pipy 来模拟的。

kubectl create namespace server
kubectl apply -n server -f - <<EOF
apiVersion: v1
kind: Service
metadata:name: pipy
spec:selector:app: pipyports:- protocol: TCPport: 8080targetPort: 8080---
apiVersion: v1
kind: Pod
metadata:name: pipy-1labels:app: pipy
spec:containers:- name: pipyimage: flomesh/pipy:0.99.0-2command: ["pipy", "-e", "pipy().listen(8080).serveHTTP(new Message({status: 200},'Hello, world'))"]---
apiVersion: v1
kind: Pod
metadata:name: pipy-2labels:app: pipy
spec:containers:- name: pipyimage: flomesh/pipy:0.99.0-2command: ["pipy", "-e", "pipy().listen(8080).serveHTTP(new Message({status: 503},'Service unavailable'))"]
EOF

创建网关和路由

接下来创建网关并为 Service pipy 创建路由。

kubectl apply -n server -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:name: simple-fsm-gateway
spec:gatewayClassName: fsm-gateway-clslisteners:- protocol: HTTPport: 8000name: httpallowedRoutes:namespaces:from: Same
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:name: fortio-route
spec:parentRefs:- name: simple-fsm-gatewayport: 8000rules:- matches:- path:type: PathPrefixvalue: /backendRefs:- name: pipyport: 8080
EOF

检查应用是否可以正常访问。通过结果可以看到,网关将请求负载均衡到了两个端点上:一个健康端点和一个不健康端点。

export GATEWAY_IP=$(kubectl get svc -n server -l app=fsm-gateway -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')curl -o /dev/null -s -w '%{http_code}' http://$GATEWAY_IP:8000/
200curl -o /dev/null -s -w '%{http_code}' http://$GATEWAY_IP:8000/
503

健康检查功能测试

接下来配置健康检查策略。

  • targetRef 指定策略作用的目标资源,在此策略中目标资源只能是 K8s core 中的 Service 。此处我们指定 命名空间 server 下的 pipy
  • ports` 服务的端口列表,由于服务可能暴露多个端口,可以为不同的端口这是重试策略。
    • port 服务端口,设置为本示例中 pipy 服务的 8080

    • config 策略的核心配置。

      • interval:健康检查间隔,表示系统对后端服务进行健康检查的时间间隔。
      • maxFails:最大失败次数,定义了在将上游服务标记为不可用之前,可以连续失败的健康检查次数。这是一个关键参数,因为它决定了系统在决定服务不健康之前的容忍度。
      • failTimeout:失败超时,定义了一个上游服务在被标记为不健康后,将被暂时禁用的时间长度。这意味着,即使服务再次变得可用,它也会在这段时间内被代理视为不可用。
      • path:健康检查路径,用于 HTTP 健康检查的路径。
      • matches:匹配条件,用于确定 HTTP 健康检查的成功或失败。此字段可以包含多个条件,例如期望的 HTTP 状态码、响应体内容等。
        • statusCodes:匹配 HTTP 响应的状态码列表,如 [200,201,204]
        • body:匹配 HTTP 响应的主体内容。
        • headers:匹配 HTTP 响应的头部信息。此字段是可选的。
          • name:它定义了你想在 HTTP 响应头部中匹配的具体字段名。例如,如果你想检查 Content-Type 头部的值,你会设置 nameContent-Type。此字段只在 Type 设置为 headers 时有效,其他情况下不应该设置。此字段是可选的。
          • value:期望的数据。定义了预期的匹配值。例如,

详细的策略配置可以参考官方文档 HealthCheckPolicy。

kubectl apply -n server -f - <<EOF
apiVersion: gateway.flomesh.io/v1alpha1
kind: HealthCheckPolicy
metadata:name: health-check-policy-sample
spec:targetRef:group: ""kind: Servicename: pipynamespace: serverports:- port: 8080config: interval: 10maxFails: 3failTimeout: 1path: /healthzmatches:- statusCodes: - 200- 201
EOF

此时,我们尝试多次请求可以发现都会收到 200 的响应,说明不健康的端点已经被网关隔离了。

curl -o /dev/null -s -w '%{http_code}' http://$GATEWAY_IP:8000/
200curl -o /dev/null -s -w '%{http_code}' http://$GATEWAY_IP:8000/
200curl -o /dev/null -s -w '%{http_code}' http://$GATEWAY_IP:8000/
200

关于 Flomesh
Flomesh(易衡科技)成立于 2018 年,自主研发并开源了高性能可编程代理 Pipy(https://github.com/flomesh-io/pipy)。以 Pipy 为基础,Flomesh 研发了软件负载均衡、服务网格两款软件产品。为工信部认证的可信云产品、可信开源项目。

Flomesh 核心竞争力来自完全自研的核心组件 Pipy,该组件高性能、高可靠、低延迟、可编程、可扩展、低依赖,采用 C++ 开发,内置自研的 JS 引擎,支持适用 JS 脚本做扩展开发。支持包括 x86、arm、龙芯、海光等硬件 CPU 架构;支持 Linux、FreeBSD、OpenWrt 等多种核心的操作系统。

Flomesh 成立以来,以技术为根基、以客户为导向,产品被应用在头部股份制商业银行总行、大型保险公司、运营商总部以及研究院等众多客户和多个场景。
在这里插入图片描述

这篇关于Gateway API 实践之(六)FSM Gateway 的健康检查功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/660009

相关文章

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

通过C#和RTSPClient实现简易音视频解码功能

《通过C#和RTSPClient实现简易音视频解码功能》在多媒体应用中,实时传输协议(RTSP)用于流媒体服务,特别是音视频监控系统,通过C#和RTSPClient库,可以轻松实现简易的音视... 目录前言正文关键特性解决方案实现步骤示例代码总结最后前言在多媒体应用中,实时传输协议(RTSP)用于流媒体服

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与