代码之家  ›  专栏  ›  技术社区  ›  ev0lution37

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

  •  3
  • ev0lution37  · 技术社区  · 7 年前

    我的用例需要通过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代理路由url时( https://proxier-1-0.192.168.99.100.nip.io ),它会正确加载nginx的标准索引。html位置。

    • 然而,当我试图通过代理点击app1时 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的路由器或服务,但我不知道如何进行故障排除,因为两者都没有日志。有什么想法吗?

    2 回复  |  直到 7 年前
        1
  •  5
  •   PhilipGough    7 年前

    当您想要向在同一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 有关网络的更多详细信息

        2
  •  1
  •   ev0lution37    7 年前

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

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

    这正好适合我的需要,而且效果很好。