【问题标题】:Adding host without www not working with Ingress resource添加没有 www 的主机无法使用 Ingress 资源
【发布时间】:2020-02-26 09:21:33
【问题描述】:

我有几个问题

  1. 当我们对入口资源进行更改时,是否存在必须删除资源并重新创建它的情况,或者kubectl apply -f <file_name> 是否足够?

  2. 当我添加没有www i.e. (my-domain.in) 的主机属性时,我无法访问我的应用程序,但使用www i.e. (www.my-domain.in) 它可以工作,有什么区别?

下面是我的入口资源

当我将主机设置为my-domain.in 时,我无法访问我的应用程序,但是当我将主机设置为www.my-domain.in 时,我可以访问该应用程序。

我的域在不同的提供商上,并且我添加了指向我 ALB 的 DNS 名称的 CNAME (www)。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: eks-learning-ingress
  namespace: production
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:a982529496:cerd878ef678df
  labels:
    app: eks-learning-ingress
spec:
  rules:
  - host: my-domain.in **does not work**
    http:
      paths:
        - path: /*
          backend:
            serviceName: eks-learning-service
            servicePort: 80

【问题讨论】:

  • 您不必删除 Ingress 对象来更新它,kubectl apply 是推荐的格式。它将显示ingress.networking.k8s.io/ingress unchangedingress.networking.k8s.io/ingress configured。您发布的这个 Ingress 是有效的吗?请解释所需的状态,以便我们对语法和规则进行故障排除。
  • 嗨@willrof,问题是在主机中如果我没有指定www,就像你在上面的文件中看到的那样,我的应用程序不会加载。但是当我将www 添加到主机时,它可以工作。我会更新我的问题,抱歉不清楚
  • @willrof,刚刚更新了问题的更多细节。谢谢。
  • 感谢您改进问题。我相信这是一个DNS问题。有一种方法可以测试,从 kubernetes 向外。我将发布我所有的故障排除建议作为答案,因为域问题始终是一个个案。
  • 感谢@willrof,敬请期待

标签: amazon-web-services kubernetes kubernetes-ingress


【解决方案1】:
  • 首先回答您的问题1:

    当我们对入口资源进行更改时,是否存在必须删除资源并重新创建它的情况,或者 kubectl apply -f 是否足够?

理论上,是的,kubectl apply 是正确的方式,它会显示ingress unchangedingress configured

其他有效的documented选项是kubectl edit ingress INGRESS_NAME,如果输出有效,则保存并在版本结束时应用。

我说理论是因为有 bug,所以我们不能完全抛弃它,但 bug 是最坏的情况。

  • 现在是更模糊的问题 2:

    当我添加没有 www 即 (my-domain.in) 的主机属性时,我无法访问我的应用程序,但使用 www 即 (www.my-domain.in) 它可以工作,有什么区别?

要解决它,我们需要隔离进程,就像在一个链中,我们必须找到哪个链接坏了。一个一个:

Endpoint > Domain Provider> Cloud Provider > Ingress > Service > Pod。

  1. DNS 解析(域名提供商)
  2. DNS 解析(云提供商)
  3. Kubernetes 入口(入口 > 服务 > Pod)

DNS 解析


域名提供商:

对于互联网,回答my-domain.in 的人是您的域名提供商。

  • my-domain.in 及其子域(如www.my-domain.inadmin.my-domain.in)的规则是什么? 您说“域在不同的提供商上,我添加了指向我 ALB 的 DNS 名称的 CNAME (www)。”
    • my-domain.inmy-domain.in 是否本能地重定向到 ALB 地址?
    • 它如何处理 URL 子域?请求如何传递到您的云端?

云提供商:

好的,云提供商正在正确且清晰地接收请求。

  • 您的 ALB 是否有针对子域或路径请求的通用或特定规则?
  • 使用另一台主机进行测试,另一台带有 Web 服务器的虚拟机。
  • Check ALB Troubleshooting Page

Kubernetes 入口

通常我们会从这部分开始排查问题,但由于您提到它可以与 www.my-domain.in 一起使用,我们可以假设您的服务、部署甚至入口结构都正常工作。

您可以查看Types of Ingress Docs 以获取其工作原理的一些示例。

底线:我相信您的 DNS 有 www.my-domain.in 的路由,但根域没有到您的云提供商的路由,这就是为什么它只有在您启用 www 入口时才有效。

【讨论】:

  • 非常感谢您的回答。我使用 godaddy 作为域名托管服务商,他们没有办法将裸域添加为 CNAME 记录。我发现当我在我的ALB 下为 my-domain.in 添加重定向规则以重定向到 https 时,我能够访问该应用程序。我使用 CNAME 的原因是因为 ALB 不提供 IP,否则我可以使用 A 记录而不是 CNAME。
  • 您知道是否有办法为我的ALB 获取Static IP。我会将其标记为已接受的答案,因为它指出了问题实际出在哪里,但如果没有重定向规则,我不会看到应用程序(未找到服务器)错误,这将是很好的理解
  • 我不得不添加 2 个 cmets,因为它不会让我一次全部完成,对此感到抱歉
猜你喜欢
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 2022-10-30
  • 2022-01-18
  • 2021-01-08
  • 1970-01-01
相关资源
最近更新 更多