Openshift - 内部NGINX代理无法连接到Openshift路由主机名

时间:2018-02-09 17:12:16

标签: nginx proxy routes openshift

我的用例需要传递SSL,因此我们不能在Openshift中本地使用基于路径的路由。我们的下一个最佳解决方案是设置内部NGINX代理,以将路径中的流量路由到另一个Web UI的Openshift路由。我这样做时会遇到错误。

这是我简化的NGINX配置:

    worker_processes auto;                                          
    error_log /var/log/nginx/error.log;
    pid /etc/nginx/nginx.pid;                                                                                                                                                                    

    include /usr/share/nginx/modules/*.conf;                                                                                                                                                                                     
    events {                                            
        worker_connections  1024;                                                                         
    }                                                                                                                                                                                       
    http {                                                                   
        upstream app1-ui-1-0 {                         
            server app1-1-0.192.168.99.100.nip.io:443;                                                         
        }                                                               

        server {                                                               
          listen 8443 ssl default_server;                               

          location /apps/app1/ {                                                           
              proxy_pass https://app1-ui-1-0/;                                             
          }                                                                           
        }                                                                      
    }  

我的app1路由配置如下:

    apiVersion: v1
    kind: Route
    metadata:
      name: app1-1-0
    spec:
      host: app1-1-0.192.168.99.100.nip.io
      to:
        kind: Service
        name: app1-1-0
      tls:
        insecureEdgeTerminationPolicy: Redirect
        termination: passthrough
  • 当我点击https://app1-1-0.192.168.99.100.nip.io时,应用程序正常运行。

  • 当我点击NGINX代理路由网址(https://proxier-1-0.192.168.99.100.nip.io)时,它会正确加载nginx的标准index.html位置。

  • 但是,当我尝试通过https://proxier-1-0.192.168.99.100.nip.io/apps/apps1/通过代理点击app1时,我收到以下Openshift错误:

    Application is not available
    
    The application is currently not serving requests at this endpoint. It may not have been started or is still starting.
    

通过日志和测试,我知道请求进入/apps/app1/位置块,但它永远不会到达app1的NGINX。我也确认此错误来自app1的路由器或服务,但我不知道如何排除故障,因为它们都没有日志。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

当您想要对在同一个OpenShift群集中运行的其他应用程序发出请求时,在大多数情况下,正确的解决方案是使用内部DNS。

OpenShift附带一个SDN,可以在Pod之间启用通信。这比通过其路由与另一个Pod通信更有效,因为这通常会在请求再次到达OpenShift路由器之前将请求路由回公共互联网,并且此时通过SDN转发。

可以联系到<service>.<pod_namespace>.svc.cluster.local服务,在您的情况下,NGINX可以通过server apps1-1-0.myproject.svc.cluster.local进行代理

路由通常应用于将外部流量路由到群集中。

有关网络的详细信息,请参阅OpenShift docs

答案 1 :(得分:0)

根据上面的评论,我最终放弃了路线并在NGINX的上游引用了服务的内部DNS:

upstream finder-ui-1-0 {                                                                                                                                                                 
    server apps1-1-0.myproject.svc.cluster.local:443;                                                                                                                                
}             

这非常适合我的需求并且运作良好。