Ошибка входа Nginx 404 с использованием хоста и пути - PullRequest
1 голос
/ 25 октября 2019

Я использую Kubernetes в облаке Azure, и я установил zipkin. Я уже установил nginx ingress, и если я использую следующее правило хоста, оно отлично работает:


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

Что я должен сделать?

Редактировать: я пытался добавить хост и после выполнения команды описаний я получаю это

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)

РЕДАКТИРОВАТЬ: я решил мою проблему, добавив аннотацию правила перезаписи

nginx.org/rewrites: >
      serviceName=zipkin rewrite=/;

Ответы [ 3 ]

0 голосов
/ 27 октября 2019

Во-первых, предыдущий ответ неверен, вам не нужно указывать 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
0 голосов
/ 28 октября 2019

Просто для выяснения проблемы с OP.

Существуют различные контроллеры входа

Примечание:

При создании входа,Вы должны аннотировать каждый вход соответствующим классом ingress.class, чтобы указать, какой контроллер входа следует использовать, если в вашем кластере существует более одного.

Если вы не определите класс, ваш облачный провайдер может использовать вход по умолчаниюконтроллер.

В идеале все входные контроллеры должны соответствовать этой спецификации, но различные входные контроллеры работают немного по-разному.

Использование этой аннотации:

nginx.org/rewrites: >
      serviceName=zipkin rewrite=/;

Itпохоже, что вы используете NGINX Ingress Controller, предоставленный nginxinc.

Вы можете найти больше информации о Поддержка перезаписи для NGINX Ingress Controller, предоставленной nginxinc здесь .

пример:

nginx.org/rewrites: "serviceName=service1 rewrite=rewrite1[;serviceName=service2 rewrite=rewrite2;...]"

Он отличается от сообщества kubernetes в kubernetes / ingress-nginx repo . Разные входные контроллеры имеют разные конфиги и аннотации.

Итак, для этого примера:

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>
0 голосов
/ 25 октября 2019

Это потому, что вы не упомянули host здесь:

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