如何解决K8s - 无法从集群外部访问应用程序
我正在学习在私有集群上部署应用程序。应用程序在 pod 中启动并运行,并且可以从节点本身访问。我也创建了一个入口控制器服务,但我不确定出了什么问题。 nginx-ingress 服务的外部 IP 总是返回 404。有什么解决办法吗?
正在运行的服务:
应用服务:
Nginx 服务:
应用程序入口:
解决方法
您的 Nginx Ingress 控制器目前似乎没有为 Ingress 提供服务。如果入口由控制器提供服务,它的 status.loadBalancer
下应该至少有一个 IP 地址(这应该是为其提供服务的入口控制器使用的外部 IP),而在您的情况下,它看起来是空的这个:
status:
loadBalancer: {}
这方面最常见的问题是 Ingress 没有定义 Ingress Class 或者集群中没有默认的 Ingress Class。
首先,执行 k get IngressClass
并查看是否定义了任何 Ingress Class。在您的集群中。 根据 Kubernetes 版本和 Ingress Controller 版本,它可以使用 IngressClass 对象或简单地使用注释(或两者)。
我会尝试简单地在 Ingress kubernetes.io/ingress.class: nginx
下添加注释 metadata
,因为 nginx 类通常是由 Nginx Ingress Controller 定义的类。或者,如果您的 Ingress Controller 使用不同的 Ingress Class,我会尝试在注释中指定它,然后您的设置应该工作。
如果您对 Ingress Class 的目的感到好奇,它主要用于将 Ingress 资源定义与 Ingress 控制器相关联。在 Kubernetes 集群上,可能有多个 Ingress Controller,每个控制器都有自己的 Ingress class,Ingress 资源通过匹配请求的 Ingress class 与其中之一相关联。
如果没有指定 ingress class,则 Ingress 使用默认的 class,这意味着 IngressClass 被注释为集群的默认 class。
有关更多信息,请查看此处的文档 ( https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。