您可以做的最好的事情是在同一个项目中部署这 2 个 pod,这样您就可以在内部保持通信:
$ oc new-project test
$ oc new-app registry:5000/frontend-image
$ oc new-app registry:5000/backend-image
这将自动创建一个部署配置并创建您的 pod + 容器 + 一个复制控制器(为了高可用性,它会检查 pod 是否仍在运行)+ 一个服务。
服务是一个重要方面。这实际上是一个负载均衡器,它将在多个 Pod 之间分配流量。 oc new-app 将检查暴露了哪些端口并在端口上方创建服务。
因此,例如,您可以将前端 pod 扩展到 3 个,然后服务会将访问者 1 分配到 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.
进入您的容器并尝试通过以下方式进行身份验证:
您将定义您的用户、密码和主机(主机 = 服务名称)。这也适用于您的服务 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>