如何在Rancher UI中配置多工作负载应用网络并解决DNS查找失败问题
问题描述
我已从Docker Hub将多个工作负载容器部署到Rancher,现需让它们通过网络互联。我已配置Load balancer,是否可通过Rancher UI的负载均衡器设置网络?
当前在命名空间webapp-9下有五个工作负载:
webapp-9-apache webapp-9-php webapp-9-mysql webapp-9-solr webapp-9-phpmyadmin
在浏览器中访问webapp-9-apache工作负载时出现以下错误:
Proxy Error Reason: DNS lookup failure for: php
我的docker-compose.yml配置如下:
version: '3.1' services: apache: build: context: . dockerfile: path/to/apache/Dockerfile image: user:webapp-9-apache ports: - 80:80 depends_on: - mysql - php volumes: - ./http:/path/to/web/ php: build: context: . dockerfile: path/to/php/Dockerfile image: user:webapp-9-php volumes: - ./http:/path/to/folder/ environment: - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_RANDOM_ROOT_PASSWORD=${MYSQL_RANDOM_ROOT_PASSWORD} depends_on: - mysql mysql: build: context: . dockerfile: path/to/mysql/Dockerfile image: user:webapp-9-mysql command: mysqld --sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" ports: - 3306:3306 environment: - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_RANDOM_ROOT_PASSWORD=${MYSQL_RANDOM_ROOT_PASSWORD} volumes: - ./data:/path/to/mysql - .docker/mysql/config:/path/to/conf.d solr: build: context: . dockerfile: path/to/Dockerfile image: user:webapp-9-solr ports: - "8983:8983" volumes: - ./solr_data:/path/to/solr command: - solr-precreate - gettingstarted phpmyadmin: build: context: . dockerfile: path/to/phpmyadmin/Dockerfile image: user:webapp-9-phpmyadmin ports: - 8090:80 environment: - PMA_HOST=mysql - PMA_PORT=3306 - PMA_USER=${MYSQL_USER} - PMA_PASSWORD=${MYSQL_PASSWORD} - UPLOAD_LIMIT=200M
解决方案
容器网络互联说明
Rancher的负载均衡器主要用于对外暴露服务,不是用来设置容器间内部网络互联的。同一命名空间下的容器默认通过Kubernetes DNS服务实现互通,你遇到的DNS解析失败问题,核心是配置中的服务名与实际Rancher工作负载的DNS名称不匹配。
问题根源
在你的docker-compose.yml里,Apache配置通过php主机名访问PHP服务,但部署到Rancher后,工作负载的DNS名称规则为:工作负载名.命名空间.svc.cluster.local,同一命名空间下可简写为工作负载名。你的PHP工作负载名为webapp-9-php,所以Apache必须用webapp-9-php而非php来访问。
修复步骤
- 修改Apache配置文件(如
httpd.conf或虚拟主机配置),将所有指向php的地址替换为webapp-9-php。 - 重新构建Apache镜像,并更新Rancher中
webapp-9-apache工作负载的镜像版本。 - 同步检查其他服务配置:比如phpmyadmin的
PMA_HOST=mysql需改为webapp-9-mysql,避免后续出现相同的DNS解析问题。
负载均衡器的正确作用
Rancher负载均衡器(对应Kubernetes的Ingress或LoadBalancer类型Service)的核心用途是:
- 把外部流量路由到集群内的服务
- 实现流量负载分发、SSL终止等功能
- 对外提供统一的服务访问入口
容器间的内部通信无需经过负载均衡器,同一命名空间直接使用工作负载名即可互通,跨命名空间则需加上工作负载名.命名空间的后缀。
内容的提问来源于stack exchange,提问作者nschildre
相关产品推荐
相关产品推荐

