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

记录docker使用kong consul postgresql配置dns异常解决

docker 部署 postgresql、kong、consul,kong 使用postgresql数据库作为数据存储,使用consul 作为服务发现

1 KONG_DNS_RESOLVER 配置问题

想要通过docker 内置的dns可以不需要配置pgsql的ip 和 consul的ip,通过dns服务发现容器名动态获取这两个容器的ip进行连接,需要解决以下两个问题:

1  KONG_DNS_RESOLVER 只能接收ipv4的地址,无法配置dns域名进行服务发现2 如果KONG_DNS_RESOLVER 配置了consul的dns ip,那么就无法通过dns发现pgsql的地址,出现以下问题: [lua] balancer.lua:540: could not obtain list of upstreams: [postgres] [cosocket] DNS resolution failed: dns server error: 2 server failure. Tried: ["(short)kong-database:(na) - cache-miss","kong-database:33 - cache-miss/scheduled/querying/dns server error: 2 server failure","kong-database:1 - cache-miss/scheduled/querying/dns server error: 2 server failure","kong-database:5 - cache-miss/scheduled/querying/dns server error: 2 server failure"], context: ngx.timer并且我们的需要是只配置域名,通过dns进行动态解析ip
2 处理KONG_DNS_RESOLVER 配置

我们可以通过go编写一个可执行程序用来dns获取pgsql的ip和consul的ip配置到环境变量中,然后再进行启动,也可以使用其他方法,只要是在kong启动前将pgsql 和consul的ip配置到环境变量中即可,由于kong容器中缺少一些软件,如dig、ping等,无法直接通过命令行去获取到pgsql 、consul的ip,这里就使用go编译成可执行文件去获取

package mainimport ("fmt""net""os"
)func main() {args := os.Args[1:]domain := "kong-database"if len(args) > 0 {domain = args[0]}// 解析域名获取IP地址ips, err := net.LookupIP(domain)if err != nil {fmt.Fprintf(os.Stderr, "解析域名失败: %v\n", err)os.Exit(1)}// 提取第一个IPv4地址(跳过IPv6)var ip stringfor _, addr := range ips {if addr.To4() != nil {ip = addr.String()break}}// 检查是否找到有效IPif ip == "" {fmt.Fprintf(os.Stderr, "未找到 %s 的IPv4地址\n", domain)os.Exit(1)}fmt.Printf(ip)
}

docker kong容器yml配置

version: '3.8'networks:base_service_database-net:external: truedriver: overlayservices:consul:image: consul:1.15.4restart: alwayscontainer_name: consulnetworks:- base_service_database-netports:- "8500:8500"- "8600:8600/udp"volumes:- /etc/localtime:/etc/localtime- /data/docker/consul/data:/consul/dataenvironment:- TZ=Asia/Shanghaideploy:placement:constraints:- node.hostname == managerkong-database:image: postgres:16container_name: kong-databaserestart: alwaysnetworks:- base_service_database-netenvironment:- POSTGRES_USER=kong- POSTGRES_DB=kong- POSTGRES_PASSWORD=kong- TZ=Asia/Shanghaivolumes:- /data/docker/postgresql/data:/var/lib/postgis/data- /data/docker/postgresql/data:/var/lib/postgresql/dataports:- "5348:5432"deploy:placement:constraints:- node.hostname == manager  ##kong数据库的初始化kong-migration:container_name: kong-migrationimage: kong:3.9.1-ubuntunetworks:- base_service_database-netdepends_on:- kong-databaserestart: on-failureenvironment:- KONG_PG_HOST=kong-database- KONG_DATABASE=postgres- KONG_PG_USER=kong- KONG_PG_PASSWORD=kong- KONG_CASSANDRA_CONTACT_POINTS=kong-databasedeploy:placement:constraints:- node.hostname == manager  #command: sh -c "kong migrations bootstrap && kong migrations up"kong:container_name: kongimage: kong:3.9.1-ubunturestart: alwaysnetworks:- base_service_database-netvolumes:- /data/docker/kong/get_consul_ip:/get_consul_ip- /data/docker/kong/get_kongdatabase_ip:/get_kongdatabase_ipcommand: sh -c "export KONG_DNS_RESOLVER="$$(./get_consul_ip):8600,127.0.0.11:53" && export KONG_PG_HOST="$$(./get_kongdatabase_ip)" && /docker-entrypoint.sh kong docker-start"depends_on:- kong-migration- consulenvironment:- TZ=Asia/Shanghai- KONG_DATABASE=postgres
#        - KONG_PG_HOST=kong-database- KONG_PG_USER=kong- KONG_PG_PASSWORD=kong- KONG_CASSANDRA_CONTACT_POINTS=kong-database- KONG_PROXY_ACCESS_LOG=/dev/stdout- KONG_ADMIN_ACCESS_LOG=/dev/stdout- KONG_PROXY_ERROR_LOG=/dev/stderr- KONG_ADMIN_ERROR_LOG=/dev/stderr- KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl- KONG_PROXY_LISTEN=0.0.0.0:8000, 0.0.0.0:8443 ssl- KONG_ADMIN_GUI_LISTEN=0.0.0.0:8002, 0.0.0.0:8445 sslports:- "8000:8000" # Proxy- "8443:8443" # Proxy SSL- "8001:8001" # Admin API- "8444:8444" # Admin API SSL- "8002:8002" # Kong Manager- "8445:8445" # Kong Manager SSLdeploy:placement:constraints:- node.hostname == manager
http://www.xdnf.cn/news/1285417.html

相关文章:

  • SQL180 每类试卷得分前3名
  • 【Redis在在线表单提交防重复机制中的应用策略】
  • 移动端调用大模型详解
  • Web学习笔记5
  • [git] 重配ssh key | 解决冲突
  • 一键生成 Android 适配不同分辨率尺寸的图片
  • Wireshark专家模式定位网络故障:14种TCP异常深度解剖
  • Ceph存储池参数中pg_num和pgp_num的关系
  • 终端安全检测和防御技术
  • 华为发布AI推理新技术,降低对HBM内存依赖
  • 负载均衡详解
  • 纯CSS+JS制作抽奖大转盘
  • C#教程之NPOI读写excel文件XLS,XLSX格式
  • 【vue(二)Vuex】
  • damn the jvm again(2)
  • 《Qwen2.5-VL 》论文精读笔记
  • 【测试】Bug+设计测试用例
  • 【Bug经验分享】由jsonObject-TypeReference引发的序列化问题
  • 无人机在环保监测中的应用:低空经济发展的智能监测与高效治理
  • 从0开始的中后台管理系统-5(菜单的路径绑定以及角色页面的实现)
  • Javase 之 字符串String类
  • 《飞算Java AI:从安装到需求转实战项目详细教学》
  • 机器学习算法篇(十):TF-IDF算法详解与应用实战
  • 线性代数 · 矩阵 | 最小多项式
  • IoTDB与传统数据库的核心区别
  • Spring Boot项目使用WebClient调用第三方接口详细教程
  • Elasticsearch Node.js 客户端连接指南(Connecting)
  • 一起来聊聊GPT-5
  • 面试经典150题[001]:合并两个有序数组(LeetCode 88)
  • 从零开始手搓一个GPT大语言模型:从理论到实践的完整指南(一)