【问题标题】:Kubernetes Ingress describe is not showing hostnameKubernetes Ingress 描述未显示主机名
【发布时间】:2020-02-06 01:36:05
【问题描述】:

我已经使用 EC2(不使用 EKS)在 AWS 中配置了 2 个节点 Kubernetes 集群。我已经使用 Traefik 1.7 版配置了一个 Ingress 控制器。我尝试使用主机在入口控制器中设置规则。但是当我在 Ingress 上进行描述时,我的主机总是设置为通配符。

下面是 Ingress YAML

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-test
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: www.random.com
  - http:
      paths:
      - backend:
          serviceName: secondapp
          servicePort: 80
        path: /

这里的 www.random.com 是一个垃圾主机名。

下面是描述命令

Name:             ingress-test
Namespace:        default
Address:
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host  Path  Backends
  ----  ----  --------
  *
        /   secondapp:80 (192.168.1.132:80)
Annotations:
  kubernetes.io/ingress.class:  traefik

我可以从 EC2 的外部 IP 访问此应用程序的网页,但 Ingress 控制器没有根据主机进行任何过滤。因此,通过在标题中指定主机来使用 curl 访问此页面无效,即:curl -H "Host: www.random.com" http://&lt;external_ip&gt;。此外,我无法从外部 IP 访问 Traefik GUI。我猜这是因为通配符主机,因为入口控制器路由请求基于主机名。我通过网络搜索,但可以找到任何关于此的内容。将不胜感激。

【问题讨论】:

  • 这真的是describe 的完整输出吗?当然,一个问题是- http: ...,你不应该在那里拥有-。现在你有两个不同的规则,一个只设置了host,一个只设置了http。您可能想要一个同时设置 httphost 字段的规则。
  • 感谢您的指出,这很有效。是的,这就是 describe 命令的完整输出。

标签: kubernetes traefik kubernetes-ingress traefik-ingress


【解决方案1】:

您的入口格式似乎不正确:您在rules 下有一个数组;但是,您的 host 需要与您的 http: 属于同一对象

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-test
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: www.random.com
    # Note I removed the dash before http
    http:
      paths:
      - backend:
          serviceName: secondapp
          servicePort: 80
        path: /

这是未经测试的,但应该可以解决问题

【讨论】:

  • 很高兴能帮上忙!如果答案对您有用,请记住接受它! :)
猜你喜欢
  • 2021-10-07
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 2018-10-07
  • 2017-12-26
  • 1970-01-01
相关资源
最近更新 更多