docker下部署kong+consul+konga 报错问题处理

前言:

由于在docker下部署一些项目比较特殊,特别是网络这一块,如果没有搞清楚,是很容易出问题的。

先上docker-compose 编排

这里的docker-compose for kong可以在 kong-compose 获取代码

复制代码
version: '3.9'

x-kong-config:
  &kong-env
  KONG_DATABASE: ${KONG_DATABASE:-off}
  KONG_PG_DATABASE: ${KONG_PG_DATABASE:-kong}
  KONG_PG_HOST: ip # ip地址
  KONG_PG_USER: kong      # 用户名直接写死为 kong
  KONG_PG_PASSWORD: ggbhack  # 密码直接写死为 ggbhack

volumes:
  kong_data:
    driver: local
    driver_opts:
      type: none
      device: ./kong_data
      o: bind
  kong_prefix_vol:
    driver: local
    driver_opts:
      type: none
      device: ./kong_prefix_vol
      o: bind
  kong_tmp_vol:
    driver: local
    driver_opts:
      type: none
      device: ./kong_tmp_vol
      o: bind

networks:
  kong-net:
    external: false
    # driver: bridge

services:
  kong-migrations:
    image: "${KONG_DOCKER_TAG:-kong:latest}"
    command: kong migrations bootstrap
    profiles: ["database"]
    depends_on:
      - db
    environment:
      <<: *kong-env
    networks:
      - kong-net
    restart: on-failure

  kong-migrations-up:
    image: "${KONG_DOCKER_TAG:-kong:latest}"
    command: kong migrations up && kong migrations finish
    profiles: ["database"]
    depends_on:
      - db
    environment:
      <<: *kong-env
    networks:
      - kong-net
    restart: on-failure

  kong:
    image: "${KONG_DOCKER_TAG:-kong:latest}"
    user: "${KONG_USER:-kong}"
    container_name: kong
    environment:
      <<: *kong-env
      KONG_ADMIN_ACCESS_LOG: /dev/stdout
      KONG_ADMIN_ERROR_LOG: /dev/stderr
      KONG_PROXY_LISTEN: "${KONG_PROXY_LISTEN:-0.0.0.0:8000}"
      KONG_ADMIN_LISTEN: "${KONG_ADMIN_LISTEN:-0.0.0.0:8001}"
      KONG_ADMIN_GUI_LISTEN: "${KONG_ADMIN_GUI_LISTEN:-0.0.0.0:8002}"
      KONG_PROXY_ACCESS_LOG: /dev/stdout
      KONG_PROXY_ERROR_LOG: /dev/stderr
      KONG_PREFIX: ${KONG_PREFIX:-/var/run/kong}
      KONG_DECLARATIVE_CONFIG: "/opt/kong/kong.yaml"
      KONG_DNS_RESOLVER: "ip:8600"  # 使用 consul 服务作为 DNS 解析器
    networks:
      - kong-net
    ports:
      - "${KONG_INBOUND_PROXY_LISTEN:-0.0.0.0}:8000:8000/tcp"
      - "${KONG_INBOUND_SSL_PROXY_LISTEN:-0.0.0.0}:8443:8443/tcp"
      - "8001:8001/tcp"
      - "8444:8444/tcp"
      - "8002:8002/tcp"
    healthcheck:
      test: ["CMD", "kong", "health"]
      interval: 10s
      timeout: 10s
      retries: 10
    restart: on-failure:5
    read_only: true
    volumes:
      - kong_prefix_vol:${KONG_PREFIX:-/var/run/kong}
      - kong_tmp_vol:/tmp
      - ./config:/opt/kong
    security_opt:
      - no-new-privileges
  consul:
    image: hashicorp/consul:latest
    container_name: consul
    profiles: ["database"]
    ports:
      - "8500:8500" # Consul UI 和 API
      - "8600:8600/udp" # DNS 解析端口(UDP)
    environment:
      CONSUL_BIND_INTERFACE: eth0
    command: agent -server -ui -bootstrap-expect=1 -client=0.0.0.0
    volumes:
      - ./consul/data:/consul/data
      - ./consul/config:/consul/config
    networks:
      - kong-net

  db:
    image: postgres:9.5
    container_name: kong-db
    profiles: ["database"]
    environment:
      POSTGRES_DB: ${KONG_PG_DATABASE:-kong}
      POSTGRES_USER: kong  # 用户名 kong
      POSTGRES_PASSWORD: ggbhack  # 密码 ggbhack
    healthcheck:
      test:
        [
          "CMD",
          "pg_isready",
          "-d",
          "${KONG_PG_DATABASE:-kong}",
          "-U",
          "kong"  # 使用 kong 作为数据库用户
        ]
      interval: 30s
      timeout: 30s
      retries: 3
    restart: on-failure
    stdin_open: true
    tty: true
    networks:
      - kong-net
    volumes:
      - kong_data:/var/lib/postgresql/data
    ports:
      - 5432:5432
  konga:
    image: pantsel/konga:latest
    container_name: konga
    environment:
      KONGA_HOST: "http://kong:8001"  # Kong Admin API 地址
      DB_ADAPTER: "postgres"         # 数据库适配器类型
      DB_URI: "postgres://kong:password@db:5432/kong"  # Konga 使用的数据库 URI
    ports:
      - "1337:1337"  # Konga Web UI 端口
    networks:
      - kong-net
    depends_on:
      - kong
      # - db
    restart: always

遇到的问题

报错 访问接口 ip:port/g/v1/goods 【这是我go搭建的 微服务其中的一个服务接口】

Error

failed the initial dns/balancer resolve for 'goods-web.service.consul' with: failed to receive reply from UDP server ip(外网ip):8600: connection refused.

request_id: b0d489023418a7508565f5411b5a5f6c

总结下来就是 dns解析失败

nacos 配置

consul 状态

service+routes 定义

解决方案

① 确保 以上启动正常,并且kong和consul在同一个 编排下

② 我使用的是外网访问 - 将 consul 开放出去【一开始我开放的是tcp,后面改为了udp】这里是关键 - 之后就正常访问啦

我在网上找了,也没有找到什么方案 - 问题的关键还是在配置上;弄了几个小时,终于搞定

相关推荐
邂逅星河浪漫5 小时前
【Docker + DockerCompose】安装步骤+演示
docker·容器·docker-compose
智能化咨询6 小时前
开源的容器化平台:Docker高级应用与实战案例
docker
std8602110 小时前
容器化入门:一文掌握Docker安装与核心概念
运维·docker·容器
桥边驿语人14 小时前
Docker 容器无法访问外网的问题排查与解决指南
运维·docker·容器
清静诗意15 小时前
在 Ubuntu 上通过 Docker 与 Docker Compose 部署项目的完整指南
linux·ubuntu·docker
小Lu的开源日常17 小时前
如何使用 GitHub Action 发布 Docker 镜像
docker·开源·github
神秘人X70718 小时前
docker安装
docker·容器·eureka
失因18 小时前
Docker 容器与镜像
java·运维·spring cloud·docker·容器
耳东哇18 小时前
sentinel docker gateway k8s 集群 主从
docker·gateway·sentinel
费益洲1 天前
Docker 网络详解:(二)虚拟网络环境搭建与测试
docker·容器