我已经设置了两个简单的Kubernetes服务和部署 - 前端和API。前端从API获取数据,因此我也将API公开,以便可以在前端数据获取调用中硬编码后端Ingress URL(如果有人知道更好的在集群内部完成此操作的方法,请告诉我)。
我正在尝试为不同的服务设置不同的主机名,但由于某种原因,只有一个主机名起作用。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-webapp-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test-webapp-frontend.com
http:
paths:
- path: /
backend:
serviceName: test-webapp-frontend-lb
servicePort: 8002
- host: test-webapp-api.com
http:
paths:
- path: /get
backend:
serviceName: test-webapp-api-lb
servicePort: 8001
运行kubectl get svc
后,我得到了以下结果:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d
test-webapp-api-lb LoadBalancer 10.107.60.163 <pending> 8001:30886/TCP 1h
test-webapp-frontend-lb LoadBalancer 10.104.100.108 <pending> 8002:31431/TCP 1h
我正在本地使用minikube来运行这个集群。通过运行minikube service test-webapp-frontend-lb
和minikube service test-webapp-api-lb
,我可以访问前端和API。
当我访问test-webapp-frontend.com
时,我可以看到前端页面,但是我无法访问test-webapp-api.com
,甚至没有默认的未找到错误,就好像这个URL根本不存在一样。
奇怪的是,如果我执行以下操作,
spec:
rules:
- host: test-webapp-frontend.com
http:
paths:
- path: /
backend:
serviceName: test-webapp-frontend-lb
servicePort: 8002
- host: test-another-frontend.com
http:
paths:
- path: /
backend:
serviceName: test-webapp-frontend-lb
servicePort: 8002
我仍然可以访问test-webapp-frontend.com
,但test-another-frontend.com
有相同的问题,完全不能访问。
我做错了什么?