当我的容器被部署为Rancher工作负载时,我如何编写代码以使它们能够通信



我一直在使用Docker来容器化一个简单的PHP web应用程序,该应用程序连接到mySQL数据库并使用mySQL数据库从中提取数据。它还包括phpmyadmin作为数据库管理的UI。我已经设法在本地主机上使用Docker将其分解为3个容器,一个Apache web服务器容器、一个mySQL容器和一个phpmyadmin容器。我现在需要以工作负载的形式将这些容器部署到Rancher上,但我很难理解工作负载如何相互通信。

在Dockerfiles和php代码中,我可以引用相关容器的名称以便连接到它,例如php页面可以引用"mydb"容器的名称以连接到它($host=mydb容器名称(,并从数据库中提取数据,就像phpmyadmin Dockerfile一样,以便连接到mySQL服务器(PMA_host=mydb(。然而,在Rancher/kubernetes上,你不能在工作负载等方面做到这一点。有人能向我解释一下更改代码的方法吗?

我已经包含了一些代码,试图更清楚地描述我的问题。

SQL Dockerfile

FROM mysql:latest

ENV MYSQL_ROOT_PASSWORD=mypassword1234
ENV MYSQL_DATABASE=MY_SQL_DATABASE
ENV MYSQL_USER=user
ENV MYSQL_PASSWORD=password
EXPOSE 9906

phpmyadmin Dockerfile

FROM phpmyadmin/phpmyadmin
ENV PMA_HOST=my-own-sql-container //(Here would be where the database container name is referenced.)
EXPOSE 8080

需要连接到mySQL容器的php脚本页面示例


$host = 'my-own-sql-container'; //Should it reference something on Rancher like the hostname of an ingress?
// Database use name
$user = 'root';
//database user password
$pass = 'mypassword1234';
// database name
$mydatabase = 'MY_SQL_DATABASE';
// check the mysql connection status
$conn = new mysqli($host, $user, $pass, $mydatabase);
if($conn->error){
echo "not connected".$conn->error;
}

为了进行基于DNS的服务发现,您可以在kubernetes中创建服务对象,这些对象引用pod并可用于连接到这些pod。

文件:https://kubernetes.io/docs/concepts/services-networking/service/

相关内容

最新更新