Openshift 3.X-后端和前端之间的通信

问题描述 投票:1回答:1

我有两个docker映像,一个是Web服务器,另一个是后端Rest应用程序。 我将这些映像部署在Openshift集群中。 我想配置运行Web服务器的Pod,以访问运行后端Rest应用程序的Pod,但是我不知道如何指定前端Pod,使其必须与后端服务进行通信。 我只能访问Pod ip,但这不是我想要的,因为我想保持可扩展性优势。

我试图这样访问它:

  1. 通过定义的路由:svc-backend.router.default.svc.cluster.local
  2. 通过他的服务名称:svc-backend.environment.svc.cluster.local
  3. 通过他的IP地址(内部):172.30.214.192
  4. 通过主主机+服务名称:master.svc-backend.environment.svc.cluster.local

没有什么可悲的。 谁能向我解释如何在Pod和服务之间进行openshift交流?

networking service openshift communication pod
1个回答
2
投票

最好的办法是在同一个项目中部署这两个Pod,以便您可以在内部保持通信:

$ oc new-project test
$ oc new-app registry:5000/frontend-image
$ oc new-app registry:5000/backend-image

这将自动创建一个deploymentconfig并创建您的pod +容器+复制控制器(为了获得高可用性,它将检查pod是否仍在运行)+服务。

服务是重要的方面。 这实际上是一个负载平衡器,它将在多个Pod之间分配流量。 oc new-app将检查哪些端口公开,并在这些端口上方创建服务。 因此,例如,您可以将前端pod扩展到3,然后该服务会将visitor1分配给pod1,将另一个访问者分配给pod2等。服务是稳定的,因此其IP不会改变。 服务IP以172.30.xx.xx开头。 因此,发送到该IP的流量将被转发到您的Pod。 因此,为了节省内部网络,最好连接服务。 您可以连接到将转换为服务IP的服务名称。 (如果在某些情况下必须重新创建服务,则可以使用相同的名称来创建它,这样就不必更改appconfigs了)。

例如,我有一个与mysql数据库连接的应用程序。 在我的应用程序的conf中,我指向与主机mysql连接。 这是我的MySQL服务的名称。

             connection: {
                 host: 'mysql',
                 user: 'xx-user',
                 password: 'xx',
                 database: 'db',
charset: 'utf8'

您可以检查服务:

$ oc get svc

或在网络控制台中

在此处输入图片说明

因此,对于您的应用程序,您必须指向后端的服务名称。 (我首先必须启动数据库,因为否则,我的应用程序部署将因为找不到数据库而失败)。 因此,您首先必须部署后端+创建服务,并在前端的配置中指向该服务名称。

有时您无法在内部保留所有内容。 比您必须在服务上创建路由。 这会将您的服务暴露给外部,并且您可以通过路由进行通信。 比您必须在配置中指向那些路由。 路由将由OpenShift路由器转换,并且路由器会将其转发到正确的服务。 如果情况不清楚,请提供一些反馈。

编辑1:

nslookup mysql                                                          
Server:         172.30.0.1                                                      
Address:        172.30.0.1#53                                                   

Name:   mysql.test.svc.cluster.local                                       
Address: 172.30.195.xx   

编辑2:在OpenShift中启动mysql(使用临时模板:user = test,password = test,database = test。进入容器并尝试通过以下方式进行身份验证:您将定义用户,密码和主机(host =服务名称)。这也将与您的服务IP:172.30.xxx)一起使用

sh-4.2$ mysql -utest -ptest -hmysql                                     
Warning: Using a password on the command line interface can be insecure.        
Welcome to the MySQL monitor.  Commands end with ; or \g.                       
Your MySQL connection id is 48880                                               
Server version: 5.6.26 MySQL Community Server (GPL)                             

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.    

Oracle is a registered trademark of Oracle Corporation and/or its               
affiliates. Other names may be trademarks of their respective                   
owners.                                                                         

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  

mysql> 
© www.soinside.com 2019 - 2024. All rights reserved.