使用主机和路径的Nginx入口错误404

使用主机和路径的Nginx入口错误404,nginx,kubernetes-ingress,azure-aks,Nginx,Kubernetes Ingress,Azure Aks,我在Azure云上使用Kubernetes,我已经安装了zipkin。 我已经安装了nginx入口,如果我使用以下主机规则,它可以正常工作: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test-ingress annotations: ingress.kubernetes.io/rewrite-target: / kubernetes.io/ingress.class: nginx na

我在Azure云上使用Kubernetes,我已经安装了zipkin。 我已经安装了nginx入口,如果我使用以下主机规则,它可以正常工作:


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
  namespace: nginx-ingress
spec:
    - host: zipkin.hostname.com
      http:
        paths:
          - backend:
              serviceName: zipkin
              servicePort: 9411
但这不是我想要的。我想要的是类似hostname.com/zipkin的东西

我尝试过这个,但我得到了一个404错误:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
  namespace: nginx-ingress
spec:
  rules:
  - http:
      paths:
        - path: /zipkin
          backend:
            serviceName: zipkin
            servicePort: 9411
我该怎么办

编辑: 我尝试添加主机,在执行descripe命令后,我得到了这个

Name:             NAME
Namespace:        NAMESPACE
Address:
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host           Path  Backends
  ----           ----  --------
  hostname.com
                 /zipkin   zipkin:9411 (10.244.0.63:9411)

这是因为您没有在此处提到主机:

spec:
  rules:
  -  host: hostname.com // here
     http:
      paths:
        - path: /zipkin
          backend:
            serviceName: zipkin
            servicePort: 9411

首先,前面的答案是错误的,您不需要指定
host
,除非您想设置DNS,否则它不是强制性的

其次,后端
zipkin
需要
/zipkin
URI响应,对吗?如果是这种情况,则重写注释将删除URI。因此,您需要像这样更改yaml以将
/zipkin
传递到后端

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
  namespace: nginx-ingress
spec:
  rules:
  - http:
      paths:
        - path: /zipkin
          backend:
            serviceName: zipkin
            servicePort: 9411

只是为了澄清OP的问题

有不同的

注:

创建入口时,应使用适当的ingress.class注释每个入口,以指示如果集群中存在多个入口控制器,则应使用哪个入口控制器

如果未定义类,云提供商可能会使用默认入口控制器

理想情况下,所有入口控制器都应符合本规范,但不同入口控制器的操作略有不同

使用此注释:

nginx.org/rewrites: >
      serviceName=zipkin rewrite=/;
看起来您正在使用nginxinc提供的NGINX入口控制器

您可以找到有关提供的NGINX Ingress Controller的重写支持的更多信息

例如:

nginx.org/rewrites: "serviceName=service1 rewrite=rewrite1[;serviceName=service2 rewrite=rewrite2;...]"
这与当时的库伯内特斯社区不同。 不同的入口控制器具有不同的配置和注释

所以对于这个例子:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.org/rewrites: "serviceName=my-nginx rewrite=/"
  name: test-ingress
  namespace: default
spec:
  rules:
  - host: hostname.com
    http:
      paths:
      - backend:
          serviceName: my-nginx
          servicePort: 80
        path: /zipkin
status:
  loadBalancer:
    ingress:
    - ip: xx.xxx.xxx.xx
测试它:

curl -vH 'Host:hostname.com' xx.xxx.xxx.xx/zipkin


* Connected to xx.xxx.xxx.xx (xx.xxx.xxx.xx) port 80 (#0)
> GET /zipkin HTTP/1.1
> Host:hostname.com
> User-Agent: curl/7.52.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.17.5
< Date: Mon, 28 Oct 2019 12:21:48 GMT
< Content-Type: text/html
< Content-Length: 612
< Connection: keep-alive
< Last-Modified: Tue, 22 Oct 2019 14:30:00 GMT
< ETag: "5daf1268-264"
< Accept-Ranges: bytes
<
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
curl-vH'Host:hostname.com'xx.xxx.xxx.xx/zipkin
*已连接到xx.xxx.xxx.xx(xx.xxx.xxx.xx)端口80(#0)
>GET/zipkin HTTP/1.1
>主机:hostname.com
>用户代理:curl/7.52.1
>接受:*/*
>
我已经试过了。但如果我访问hostname.com/zipkin,我会看到一个404白标签错误页面,我试图对入口进行描述,得到了这个名称:Name Namespace:Namespace Address:Default backend:Default http backend:80()规则:主机路径后端-----hostname.com/zipkin-zipkin:9411(10.244.0.63:9411)我用描述命令的格式化结果编辑了我的原始问题您想使用什么DNS?您自己的DNS或任何人?不,我想要的是/zipkin将在后端重写。我使用这个注释nginx.org/rewrites解决了我的问题:>serviceName=zipkin rewrite=/;我要补充我的问题
curl -vH 'Host:hostname.com' xx.xxx.xxx.xx/zipkin


* Connected to xx.xxx.xxx.xx (xx.xxx.xxx.xx) port 80 (#0)
> GET /zipkin HTTP/1.1
> Host:hostname.com
> User-Agent: curl/7.52.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.17.5
< Date: Mon, 28 Oct 2019 12:21:48 GMT
< Content-Type: text/html
< Content-Length: 612
< Connection: keep-alive
< Last-Modified: Tue, 22 Oct 2019 14:30:00 GMT
< ETag: "5daf1268-264"
< Accept-Ranges: bytes
<
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>