我已经设置了两个简单的kubernetes服务和部署-前端和api。前端从api获取数据,所以我也公开了api,因此我可以在前端数据访存调用中对后端入口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
有相同的问题,根本无法访问。
我在做什么错??
答案 0 :(得分:3)
似乎是DNS问题。这些主机名(例如“ test-webapp-frontend.com”)需要解析为入口控制器的IP才能将流量路由到群集中。我没有在您的输出中列出用于入口控制器的外部IP。对于minikube,您可以启用入口插件。对于minikube,DNS有点棘手,因为您没有要解析的公共IP。您可以修改etc / hosts文件来解析名称,或者改用基于路径的规则。
与此相关的一些有用链接可能是Ingress and Ingress controller how to use them with NodePort Services?或https://medium.com/@awkwardferny/getting-started-with-kubernetes-ingress-nginx-on-minikube-d75e58f52b6c