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

Openshift-内部NGINX代理可以';无法连接到Openshift路由主机名,nginx,proxy,routes,openshift,Nginx,Proxy,Routes,Openshift,我的用例需要通过SSL,所以不幸的是,我们不能在Openshift中本机使用基于路径的路由。我们的下一个最佳解决方案是设置一个内部NGINX代理,将流量从一个路径路由到另一个webui的Openshift路径。这样做时我会出错 这是我简化的NGINX配置: worker_processes auto; error_log /var/log/nginx/error.log; pid /etc

我的用例需要通过SSL,所以不幸的是,我们不能在Openshift中本机使用基于路径的路由。我们的下一个最佳解决方案是设置一个内部NGINX代理,将流量从一个路径路由到另一个webui的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代理路由url(
    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/
    ,我得到以下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的路由器或服务,但我不知道如何排除故障,因为两者都没有日志。有什么想法吗?

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

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

这很好地满足了我的需要,并且运行得很好。

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

OpenShift附带SDN,可实现POD之间的通信。这比通过其路由与另一个Pod通信更有效,因为这通常会在请求再次命中OpenShift路由器之前将其路由回公共互联网,并在该点通过SDN转发

可以访问服务
.svc.cluster.local
,在您的情况下,它使NGINX能够通过
服务器apps1-1-0.myproject.svc.cluster.local进行代理

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


有关网络的更多详细信息,请参见

为什么使用路由而不是内部dns?是的,你是个天才。我放弃了路由,直接通过内部DNS引用了该服务,它工作得很好。谢谢很高兴它起到了作用,发布了更详细的解释,以防其他人点击。我也有同样的问题,但我不知道我可以使用下面发布的解决方案,因为我的Nginx服务器位于一个Openshfit集群中,而代理服务器位于另一个集群中。有没有使用TLS直通路由的解决方案?我在原始帖子中有同样的问题,但我不知道我可以使用这个解决方案,因为我的Nginx服务器位于一个Openshfit集群中,而代理服务器位于另一个集群中。是否有一种解决方案使用https路由?