如何在 Kubernetes 中返回自定义的用户友好错误消息?
在 Kubernetes 中,当出现错误时,默认返回的错误消息通常是技术性的、难以理解的,对于普通用户来说并不友好。然而,通过一些简单的配置和自定义操作,我们可以在 Kubernetes 中返回自定义的用户友好错误消息。在本文中,php小编小新将为您介绍如何实现这一功能,使得用户能够更好地理解和处理错误。
问题内容
我有一个与 k8s 对话的 golang 后端。我想重新表述从 k8s 获得的错误响应并将其发送到前端。
我想为用户返回有意义的验证错误消息,当他添加无效名称时,某些内容已经存在......
我想要一些通用的东西,而不是在每个端点的控制器中硬编码。
我正在使用 kubernetes/client-go
。
- 第一个错误:
例如,假设我想向 etcd
添加一家酒店,当我尝试添加酒店名称:hotel123 时,该酒店已经存在。
- 我收到此错误消息:
\"hotel123\" 已存在
。 - 我想要的:
hotel123已经存在
。
- 第二个错误:
例如,假设我想向 etcd
添加一家酒店,当我尝试添加酒店名称:hotel_123 时,该酒店已经存在。
- 我收到此错误消息:
\"hotel_123\" 无效,无效值:\"hotel_123\"...
- 我想要什么:
hotel_123 无效
如何返回自定义用户友好的错误消息?
PS:我有多个函数,因此验证应该是通用的。
解决方法
一般来说(尽管有解决方法),如果您想捕获错误以便返回更有用的错误,则需要确保满足以下条件:
在下面的示例中,我尝试读取不存在的配置文件。我的代码检查返回的错误是否为 fs.patherror
,然后抛出它自己的更有用的错误。您可以将这个总体想法扩展到您的用例中。
package main import ( "errors" "fmt" "io/fs" "k8s.io/client-go/tools/clientcmd" ) func main() { var myerror error config, originalerror := clientcmd.buildconfigfromflags("", "/some/path/that/doesnt/exist") if originalerror != nil { var patherror *fs.patherror switch { case errors.as(originalerror, &patherror): myerror = fmt.errorf("there is no config file at %s", originalerror.(*fs.patherror).path) default: myerror = fmt.errorf("there was an error and it's type was %t", originalerror) } fmt.printf("%#v", myerror) } else { fmt.println("there was no error") fmt.println(config) } }
在调试中,您会发现 %t
格式化程序有用。
对于您的特定用例,您可以使用正则表达式来解析所需的文本。
下面的正则表达式表示:
^\w*
以任何非字母数字字符开头(\w+)
捕获后面的字母数字字符串\w*\s?
匹配非字母数字字符(is\sinvalid)
捕获“无效”
func MyError(inError error) error { pattern, _ := regexp.Compile(`^\W*(\w+)\W*\s?(is\sinvalid)(.*)$`) myErrorString := pattern.ReplaceAll([]byte(inError.Error()), []byte("$1 $2")) return errors.New(string(myErrorString)) }
正如在这个操场上看到的:
https://www.php.cn/link/4ceefb51ae9ec399a69540c895f4519f
以上是如何在 Kubernetes 中返回自定义的用户友好错误消息?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

OpenSSL,作为广泛应用于安全通信的开源库,提供了加密算法、密钥和证书管理等功能。然而,其历史版本中存在一些已知安全漏洞,其中一些危害极大。本文将重点介绍Debian系统中OpenSSL的常见漏洞及应对措施。DebianOpenSSL已知漏洞:OpenSSL曾出现过多个严重漏洞,例如:心脏出血漏洞(CVE-2014-0160):该漏洞影响OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻击者可利用此漏洞未经授权读取服务器上的敏感信息,包括加密密钥等。

本文演示了创建模拟和存根进行单元测试。 它强调使用接口,提供模拟实现的示例,并讨论最佳实践,例如保持模拟集中并使用断言库。 文章

本文探讨了GO的仿制药自定义类型约束。 它详细介绍了界面如何定义通用功能的最低类型要求,从而改善了类型的安全性和代码可重复使用性。 本文还讨论了局限性和最佳实践

本文讨论了GO的反思软件包,用于运行时操作代码,对序列化,通用编程等有益。它警告性能成本,例如较慢的执行和更高的内存使用,建议明智的使用和最佳

本文使用跟踪工具探讨了GO应用程序执行流。 它讨论了手册和自动仪器技术,比较诸如Jaeger,Zipkin和Opentelemetry之类的工具,并突出显示有效的数据可视化

本文讨论了GO中使用表驱动的测试,该方法使用测试用例表来测试具有多个输入和结果的功能。它突出了诸如提高的可读性,降低重复,可伸缩性,一致性和A
