Nginx маршрутизация для сервисов kubernetes - PullRequest
0 голосов
/ 07 февраля 2019

У меня те же требования, что и в этом посте, - https://tech.holidayextras.com/routing-to-internal-kubernetes-services-using-proxies-and-ingress-controllers-e7eb44954d53

Но я не уверен, что там упоминаются ipaddresses бэкэндов.Я предположил, что это ips моего главного и рабочего узлов в моем кластере

Мой kubernetes имеет ip главного узла как 10.118.6.35 и ip рабочего узла как 10.118.2.215, которые являются экземплярами AWS ec2.

Поэтому, когда я настроил, как показано ниже в моем nginx.conf (см. Ниже), я получаю index.html, когда я делаю curl https://10.118.6.35

Но когда я делаю https://10.118.6.35/hello-kenzan Яполучение страницы ошибки nginx по умолчанию 404 страницы Но я ожидаю, что она будет перенаправлена ​​на мои службы kubernetes, работающие в NodePort 80: 30854

Я выполнил шаги, упомянутые в этом посте.К вашему сведению, я показываю echo-ing.yaml ниже -

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: echomap
  annotations: {
    'kubernetes.io/ingress.class': nginx
   }
spec:
  rules:
  - host: ip-10-118-6-35.ec2.internal
    http:
      paths:
      - path: /hello-kenzan
        backend:
           service and: hello-kenzan
           service port: 80

И ниже - nginx.conf -

http {
       ssl_certificate ...
        ....
        ....
  server {
   listen     443 SSL;
   server_name www.ip-10.118-6-35.ec2.internal.com;
   root /usr/share/nginx/html;
   ssl_certificate ...
   ...
   ...
   include /etc/nginx/default.d/*.conf;

   location / {
   }
   error_page 404 /404.html;
      location = /40x.html {
    }
    error_page 500 502 503 504 /50x.html;
      location = /50x.html {
    }
}
upstream backend_nodes {
    server 10.118.6.35:31001;
    server 10.118.2.215:31001;
  }
upstream backend_nodes_ssl {
    server 10.118.6.35:32001;
    server 10.118.2.215:32001;
  }
server {
    listen 80;
    server_name backends.nodes;
     location / {
       proxy_pass https://backend_nodes;
      }
   }
 server {
    listen 443;
    server_name backends.nodes.ssl;
     location / {
       proxy_pass https://backend_nodes_ssl;
      }
   }
}

Пожалуйста, предложите, что дать для внутреннего узла ips

Обновление

Привет, наконец, он заработал, когда я пытаюсь использовать IP-адрес из браузера вместо имени DNS -

https://10.118.6.35/hello-kenzan <- этоработает сейчас <a href="https://myservice.myorg.com/hello-kenzan" rel="nofollow noreferrer">https://myservice.myorg.com/hello-kenzan <- это не работает, так как страница ошибки nginx временно недоступна. </p>

Но https://myservice.myorg.com <- работает, приветствуя переход на страницу индекса nginx. </p>

Это мой модифицированный nginx.conf -


 http {
           ssl_certificate ...
            ....
            ....

server {
       listen     80;
       server_name ip-10.118-6-35.ec2.internal;
       root /usr/share/nginx/html;

       include /etc/nginx/default.d/*.conf;

       location / {
       }
       location /hello-kenzan {
           proxy_pass https://backend_nodes;
          }
       error_page 404 /404.html;
          location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
          location = /50x.html {
        }
    }
      server {
       listen     443 SSL;
       server_name ip-10.118-6-35.ec2.internal;
       root /usr/share/nginx/html;
       ssl_certificate ...
       ...
       ...
       include /etc/nginx/default.d/*.conf;

       location / {
       }
       location /hello-kenzan {
           proxy_pass https://backend_nodes_ssl;
       }
       error_page 404 /404.html;
          location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
          location = /50x.html {
        }
    }
    upstream backend_nodes {
        server 10.96.88.237:80
      }
    upstream backend_nodes_ssl {
        server 10.96.88.237:443
      }

  }

Есть мысли ??

1 Ответ

0 голосов
/ 07 февраля 2019

пока вы пытаетесь использовать мастер-IP и IP-адрес узла, это абсолютно неверно в подходе nginx ingress controller.когда вы добавляете входной контроллер nginx, он делает балансировщик нагрузки позади (при использовании aws, digital ocean вы проверяете этот балансировщик нагрузки на его консоли).

you have to use the load balancer ip rather then using ip of node and master ip. 

запуск nginx входного контроллера

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml

для получения дополнительной информации посетите этот сайт, если какой-либо запрос добавит комментарий:

https://knowihave.blogspot.com/2019/02/how-to-set-up-nginx-ingress-with-cert.html

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

...