我已经使用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是一个垃圾主机名。
下面是describe命令
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。我猜这是由于通配符的主机,因为Ingress控制器基于主机名路由请求。我通过网络搜索,但是在此附近却找不到任何东西。不胜感激。
答案 0 :(得分:2)
您的入口似乎格式错误,您在规则下拥有一个数组,但是您的主机必须与http:是同一对象的一部分。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-test
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: www.random.com
# Not i removed the dash before http
http:
paths:
- backend:
serviceName: secondapp
servicePort: 80
path: /
未测试,但这应该可以解决问题