当前位置: 首页 > news >正文

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】这里是关键 - 之后就正常访问啦

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

相关文章:

  • 蓝桥杯班级活动
  • Springboot集成Spring AI和Milvus,验证RAG构建过程
  • 【Java线程中断】线程中断后为什么要调用interrupt()?
  • 超低失真、超高清晰度的远心工业镜头
  • 20250217-POMO笔记
  • STM32 CubeMx配置串口收发使用DMA并调用Idle模式(二)
  • 详解CountDownlatch
  • MaxKB + Ollama + DeepSeek本地部署
  • 输入网址到网页显示,发生了什么?
  • 人工智能框架:连接理论与实践的桥梁
  • VAS1260IB05E 集成内部开关驱动器的汽车级LED硬灯带高效解决方案
  • Gentleman:优雅的Go语言HTTP客户端工具包
  • 【GESP】2024年12月图形化一级 -- 火箭回收
  • Anchor-Based 与 Anchor-Free
  • 通过VSCode直接连接使用 GPT的编程助手
  • python003-python电影数据分析及可视化系统建设(源码+数据库+部署讲解等)
  • iOS开发书籍推荐 - 《高性能 iOS应用开发》(附带链接)
  • 深度求索-DeepSeek-R1本地部署指南
  • UART(一)——UART基础
  • 遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)
  • 塑料机械怎么做网站/指数搜索
  • 济南 网站 建设/东莞网站提升排名
  • 做淘宝客要自己的网站/百度推广怎么赚钱
  • 重庆做网站changeke/搜索引擎优化文献
  • 学校 网站源码/怎么推广自己的微信号
  • 学做西餐的网站/制作网站的全过程