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

ev0*_*n37 3 proxy routes nginx 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/;                                             
          }                                                                           
        }                                                                      
    }  
Run Code Online (Sandbox Code Playgroud)

我的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
Run Code Online (Sandbox Code Playgroud)
  • 当我点击 时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 位置。

  • 但是,当我尝试通过代理访问 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.
    
    Run Code Online (Sandbox Code Playgroud)

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

Phi*_*ugh 5

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

OpenShift 附带了一个 SDN,它支持 Pod 之间的通信。这比通过其路由与另一个 Pod 通信更有效,因为这通常会将请求路由回公共互联网,然后再次访问 OpenShift 路由器,然后通过 SDN 转发。

可以访问服务<service>.<pod_namespace>.svc.cluster.local,在您的情况下,可以通过以下方式使 NGINX 代理server apps1-1-0.myproject.svc.cluster.local

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

有关网络的更多详细信息,请参阅OpenShift 文档