1

我有一个使用 Kops 在 AWS 上部署的基于 Kubernetes gossip 的工作集群。我一直在研究使用这两种方法的入口。

https://github.com/kubernetes/ingress-nginx

https://github.com/appscode/voyager

我按照在单独的集群上使用两者的步骤进行操作。我现在不使用 RBAC。到目前为止,使用ingress-nginx. 根据我在网站上阅读的内容,我对 voyager 的期望更高。

create -f my-ingress.yml 设置后,我在 yml 文件中使用以下内容运行了这个命令 kubectl

    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

当使用与 ingress-nginx 不同的 voyager 时,我在“kubectl describe ing <ingressname>”的输出中看不到负载均衡器外部 url 但没关系。我想出了如何访问它。Voyager 为这个负载均衡器创建了一个服务。我到达了该服务的外部端点 url。

问题是,在 voyager 中,与 ingress-nginx 不同,我只能访问根目录下的映射,即 / 而不能访问 /web 或 /exp 下的映射。

请建议。

R

尝试了codefx的建议。问题仍然存在于航海者中。我试着上下移动路径。根 ie / 仍然有效。但是对于其他 2 个路径 /web 和 /exp,这 2 个错误消息之一基本上存在变体。

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

4

1 回答 1

0

这里有2个问题:

  • 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

使用 Voyager CRD 的 Ingress YAML(注意 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 月)

于 2017-10-22T19:41:05.840 回答