我成功测试了minikube中的入口,完全没有问题。然后我将我的应用程序部署到ubuntu中,如果我使用的是NodePort服务,它也能很好地工作。之后,我正在考虑使用Ingress作为路由器流量的负载均衡器,以便外部URL不再是丑陋的长端口。但不幸的是,我没有成功,总是失败。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dv
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /test
backend:
serviceName: ngsc
servicePort: 3000
kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
dv * 80 12s
root@kmaster:/home/ubuntu/datavisor# kubectl describe ing dv
Name: dv
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
*
/ ngsc:3000 (192.168.1.14:3000,192.168.1.17:3000,192.168.1.18:3000)
Annotations:
ingress.kubernetes.io/rewrite-target: /
Events: <none>
然后,当我尝试访问时,出现以下错误:
curl http://cluster-ip
curl: (7) Failed to connect to <cluster-ip> port 80: Connection refused
我真正希望的是让外面暴露的网址是http://ipaddress,而不是http://ipaddress:30080
我知道我可以轻松地使用kubernete中的nginx来满足这个要求,但这并不理想,我希望kubernete能够处理它,这样即使服务端口发生了变化,一切仍然存在。
你能检查一下输出并告诉我错误是什么吗?我检查了很多文档,每个地方似乎只关注minikube,与真正的集群部署无关。我是否需要安装任何东西才能使入口工作?当我使用kubectl获取所有--all-namespaces时,我根本没有看到入口控制器。如果需要,我该如何安装?
谢谢你的建议
好吧,实际上Kubernetes没有提供任何Ingress控制器开箱即用。你必须安装Nginx Ingress或Traefik Ingress或其他任何东西。 Ingress控制器必须在群集中的某个位置运行,这是必须的。实际上,入口控制器是代理流量到您的应用程序的实际代理。
而且我认为你应该知道引擎盖下的minikube也使用了nginx-ingress-controller(参见https://github.com/kubernetes/minikube/tree/master/deploy/addons/ingress)。
在云环境中,入口控制器在云负载均衡器后面运行,该负载均衡器在集群节点之间执行负载平衡。
如果您运行本地群集 - 那么通常您的入口控制器作为NodePort服务运行,您可以创建指向您的节点IP地址的DNS记录。也可以在专用节点上运行入口控制器并使用hostNetwork: true
。这将允许使用标准的80/443端口。所以这里有很多选择。