How to return custom user-friendly error messages in 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
The above is the detailed content of How to return custom user-friendly error messages in Kubernetes?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

This article explains Go's package import mechanisms: named imports (e.g., import "fmt") and blank imports (e.g., import _ "fmt"). Named imports make package contents accessible, while blank imports only execute t

This article explains Beego's NewFlash() function for inter-page data transfer in web applications. It focuses on using NewFlash() to display temporary messages (success, error, warning) between controllers, leveraging the session mechanism. Limita

This article details efficient conversion of MySQL query results into Go struct slices. It emphasizes using database/sql's Scan method for optimal performance, avoiding manual parsing. Best practices for struct field mapping using db tags and robus

This article demonstrates creating mocks and stubs in Go for unit testing. It emphasizes using interfaces, provides examples of mock implementations, and discusses best practices like keeping mocks focused and using assertion libraries. The articl

This article explores Go's custom type constraints for generics. It details how interfaces define minimum type requirements for generic functions, improving type safety and code reusability. The article also discusses limitations and best practices

This article details efficient file writing in Go, comparing os.WriteFile (suitable for small files) with os.OpenFile and buffered writes (optimal for large files). It emphasizes robust error handling, using defer, and checking for specific errors.

The article discusses writing unit tests in Go, covering best practices, mocking techniques, and tools for efficient test management.

This article explores using tracing tools to analyze Go application execution flow. It discusses manual and automatic instrumentation techniques, comparing tools like Jaeger, Zipkin, and OpenTelemetry, and highlighting effective data visualization
