使用Voyager的Kubernetes扇出进入似乎无法正常工作

时间:2017-10-21 16:48:04

标签: amazon-web-services kubernetes kops

我使用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>

请建议。

- [R

尝试了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,我希望你也阅读下面的评论

1 个答案:

答案 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月)