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

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

相关推荐
木雷坞4 小时前
视觉算法环境 Docker 镜像拉取失败排查
运维·人工智能·docker·容器
瀚高PG实验室5 小时前
安全版V4.5版本docker容器license过期问题处理步骤
安全·docker·容器·瀚高数据库
java_logo5 小时前
SiYuan 思源笔记 Docker 部署终极指南:Windows+Linux 双平台
windows·笔记·docker·思源笔记·思源笔记部署·docker部署思源笔记·思源笔记文档
Hello.Reader5 小时前
Ubuntu 上正确安装 Kali 虚拟机、Docker 与 kail 工具指南
linux·ubuntu·docker
筱_智6 小时前
Docker学习-超详细-通俗易懂(从入门到精通)
学习·docker·容器
EAIReport7 小时前
Docker与K8s核心解析:共同性、差异性及实战适配指南
docker·容器·kubernetes
江湖有缘7 小时前
容器化部署|Docker搭建Blinko轻量笔记系统
笔记·docker·容器
炸裂狸花猫9 小时前
开源身份认证与访问管理平台 - Keycloak(二)
docker·云原生·容器·kubernetes·开源·keycloak·sso
炸裂狸花猫9 小时前
开源身份认证与访问管理平台 - Keycloak(一)
docker·云原生·kubernetes·开源·devops
rustfs9 小时前
MinIO 国产平替,RustFS 发布 Beta 版本啦
分布式·docker·云原生·rust·开源