我使用Kops在AWS上部署了基于Kubernetes gossip的工作集群。 我一直在用这两种方法研究进入。
https://github.com/kubernetes/ingress-nginx
https://github.com/appscode/voyager
我在单独的群集上使用这两个步骤。
我现在正在使用没有RBAC。
到目前为止,使用ingress-nginx
可以更好地工作。
根据我在网站上看到的内容,我期待更多的旅行者。
设置完成后,我运行了这个命令
kubectl create -f my-ingress.yml
以及yml文件中的以下内容
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /web
backend:
serviceName: service2
servicePort: 80
- path: /
backend:
serviceName: service2
servicePort: 80
- path: /exp
backend:
serviceName: service1
servicePort: 8080
当使用voyager时,与ingress-nginx不同,我无法在" kubectl描述ing< ingressname>的输出中看到负载均衡器外部URL。 但那没关系。 我想出了如何达到它。 Voyager为此负载均衡器创建服务。 我从该服务到达了外部端点URL。
问题是voyager中的与ingress-nginx不同我只能访问root下映射的内容,而不是/ web或/exp下映射的内容。 I>
请建议。
尝试了codefx的建议。 旅行者仍然存在问题。我试着上下移动路径。根即/仍然有效。但是对于其他2个路径/ web和/ exp,基本上存在这两个错误消息之一的变体。
变体1
<html><body><h1>Whitelabel Error Page</h1>
<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>
<div id='created'>Sun Oct 22 20:32:20 UTC 2017</div>
<div>There was an unexpected error (type=Not Found, status=404).</div>
<div>No message available</div>
</body></html>
变体2
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.13.5</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
明天再试一次。 Codefx,我希望你也阅读下面的评论
答案 0 :(得分:0)
这里有两个问题:
Voyager目前不支持重写目标注释。您可以使用rewriteRule
选项实现相同的功能。但这需要使用Voyager的CRD而不是标准入口。如果没有路径重写,nginx会一直返回404.这会在此处进行跟踪:https://github.com/appscode/voyager/issues/657
在Voyager中,规则和路径的顺序很重要,因为Voyager将按照用户提供的顺序使用它们,而不是自动重新排序它们。因此,如果您将/
路径移至最后一个路径,则应该按预期执行。
以下是我测试的一个完整工作示例:
kubectl run nginx --image=nginx
kubectl expose deployment nginx --name=web --port=80 --target-port=80
kubectl run test-server --image=appscode/test-server:1.1
kubectl expose deployment test-server --name=exp --port=80 --target-port=8080
kubectl run echoserver --image=gcr.io/google_containers/echoserver:1.4
kubectl expose deployment echoserver --name=rest --port=80 --target-port=8080
Ingress YAML使用Voyager CRD(注意apiVersion):
apiVersion: voyager.appscode.com/v1beta1
kind: Ingress
metadata:
name: fanout-demo
annotations:
ingress.appscode.com/type: NodePort
ingress.appscode.com/force-service-port: "false"
spec:
rules:
- http:
paths:
- path: /web
backend:
serviceName: web
servicePort: 80
rewriteRules:
- '^([^\ ]*\ /)web(.*) \1\2'
- path: /exp
backend:
serviceName: exp
servicePort: 80
- path: /
backend:
serviceName: rest
servicePort: 80
要将CRD与kubectl一起使用,您需要使用完整的资源名称:
kubectl describe ingress.voyager.appscode.com fanout-demo
请试一试。它应该解决你的问题。
编辑: - Voyager目前支持重写目标注释。 (2018年2月)