我在 Ingress 中输入了错误。我使用了端口80
,但服务正在监听8080
。
我花了一些时间才发现错别字。
据我所知,Kubernetes 在这种情况下不会创建错误消息。Kubernetes 仅创建所需状态。它不会检查所需状态是否有意义。没关系。
是否有一个工具可以检查连接(入口 --> 服务 --> 部署 --> pod)是否有效?
我所说的“有效”是指:是否有与选择器匹配的相关对象。
例子:
selector:
app: foobar
如果没有与选择器匹配的相关对象,那么我会收到警告。
示例 2:您在 Ingress 中使用ingressClassName
,但此类不存在。
答案1
是否有一个工具可以检查连接(入口 --> 服务 --> 部署 --> pod)是否有效?
没有具体的可以实现这一目的的工具,但我认为以一种有用的方式实现这一目的会很困难。
创建资源时,通常可以从 API 获得两种响应:(a) 成功,或 (b) 失败,您会收到错误消息。可以实现准入控制器执行此类检查,但无法发出“警告”。因此,请考虑这样一种情况:您正在执行应用程序资源的初始部署:它们很可能被“无序”部署,例如,您在相应的服务之前创建 Ingress 对象。使用我们假设的准入控制器,这将导致 Ingress 部署失败,这不是我们想要的。
您可以编写一个工具,向其提供一组清单作为输入,然后它会在本地执行验证,但这只有在您部署的资源形成“封闭集”时才有用:如果您要添加 Ingress,但相应的服务已存在于集群中而不是本地文件中,则此想法行不通。如果您依赖于部署资源后动态添加到资源中的标签或其他元数据,它也会失败。
所以唯一真正的选择是编写某种工具来检查你的资源后它们已经部署,因此 (a) 所有内容都存在于 API 中,并且 (b) 任何动态修改都已发生。这可能是可行的,但我认为执行传统的服务可用性检查会更有效 - 也就是说,如果您正在部署一个提供 Web 服务的应用程序,则有一个监控框架,如果不可用(这可能是由于标签选择器中的拼写错误、缺少资源或出于各种其他原因而发生的),它会https://example.com
提醒您。https://example.com
这并不能给您提供您可能希望的相同粒度,但实现起来很简单,并且解决了“我的部署是否成功”的一般问题。