用于 kubernetes 服务的 Nginx 路由

Nginx routing for kubernetes services

我有与此 post 中提到的相同的要求 - 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 渲染 卷曲 https://10.118.6.35

但是当我这样做时 https://10.118.6.35/hello-kenzan 我收到 nginx 错误页面默认 404 页面 但我希望将它路由到我在 NodePort 80:30854

中的 kubernetes 服务 运行

我已按照 post 中提到的步骤进行操作。 仅供参考,我在下面显示 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 <- 现在有效 https://myservice.myorg.com/hello-kenzan <- 由于 nginx 错误页面暂时不可用,这无法正常工作。

但是 https://myservice.myorg.com <- 通过欢迎来到 nginx 索引页面来工作。

这是我修改的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
      }

  }

有什么想法吗??

当您尝试使用主 IP 和节点 Ip 时,nginx 入口控制器的方法是绝对错误的。当您添加入口 nginx 控制器时,它会使负载均衡器落后(如果使用 aws、数字海洋,您可以在它的控制台中检查负载均衡器)。

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

这里终于安装了证书管理器,您可以删除该部分,其他一切都很简单。