You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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来访问。

修复步骤

  1. 修改Apache配置文件(如httpd.conf或虚拟主机配置),将所有指向php的地址替换为webapp-9-php。
  2. 重新构建Apache镜像,并更新Rancher中webapp-9-apache工作负载的镜像版本。
  3. 同步检查其他服务配置:比如phpmyadmin的PMA_HOST=mysql需改为webapp-9-mysql,避免后续出现相同的DNS解析问题。

负载均衡器的正确作用

Rancher负载均衡器(对应Kubernetes的Ingress或LoadBalancer类型Service)的核心用途是:

  • 把外部流量路由到集群内的服务
  • 实现流量负载分发、SSL终止等功能
  • 对外提供统一的服务访问入口

容器间的内部通信无需经过负载均衡器,同一命名空间直接使用工作负载名即可互通,跨命名空间则需加上工作负载名.命名空间的后缀。

内容的提问来源于stack exchange,提问作者nschildre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:31:37