0

我已经使用 EC2(不使用 EKS)在 AWS 中配置了 2 个节点 Kubernetes 集群。我已经使用 Traefik 1.7 版配置了一个 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://<external_ip>。此外,我无法从外部 IP 访问 Traefik GUI。我猜这是因为通配符主机,因为入口控制器路由请求基于主机名。我通过网络搜索,但可以找到任何关于此的内容。将不胜感激任何帮助。

4

1 回答 1

4

您的入口似乎格式不正确:您在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: /

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

于 2019-10-09T06:21:57.543 回答