apisix 2.2, 在etcd使用了自签名证书的情况下, 启动时会报错: got malformed version message: "" from etcd 尽管apisix的配置项 etcd.ssl.verify 已经为 false 了.

找到apisix对应部分的代码后发现, 在初始化etcd连接的时候, 使用的是curl命令来连接etcd. 而curl命令没有加上-k参数来忽略ssl证书校验.

解决方法

修改对应部分代码

出现问题的代码在 apisix/cli/etcd.lua 这个文件中. 共有三个位置: 即: 第136行, 第173行, 第201行. 需要手动在这三个位置的curl命令中加入 -k 参数来忽略证书校验.


https://github.com/apache/apisix/blob/2.2/apisix/cli/etcd.lua#L136 修改前:

LUA
local cmd = str_format("curl -s -m %d %s", timeout * 2, uri)
点击展开查看更多

修改后:

LUA
local cmd = str_format("curl -k -s -m %d %s", timeout * 2, uri)
点击展开查看更多

https://github.com/apache/apisix/blob/2.2/apisix/cli/etcd.lua#L173 修改前:

LUA
local cmd_auth = "curl -s " .. uri_auth .. " -X POST -d '" ..
点击展开查看更多

修改后:

LUA
local cmd_auth = "curl -k -s " .. uri_auth .. " -X POST -d '" ..
点击展开查看更多

https://github.com/apache/apisix/blob/2.2/apisix/cli/etcd.lua#L201 修改前:

LUA
local cmd = "curl " .. uri .. token_head .. " -X POST -d '" .. post_json
点击展开查看更多

修改后:

LUA
local cmd = "curl -k " .. uri .. token_head .. " -X POST -d '" .. post_json
点击展开查看更多

如果使用的是docker, 可将etcd.lua这个文件copy出来一份, 修改后再用volumes映射到容器里面:

YAML
volumes:
  - ./etcd.lua:/usr/local/apisix/apisix/cli/etcd.lua
点击展开查看更多

然后重启apisix即可.


使用master分支或等待下次版本更新

最新的master分支中 不再使用curl来连接etcd 该问题已经解决了. https://github.com/apache/apisix/blob/master/apisix/cli/etcd.lua 但不推荐使用master分支, 因为可能存在未知的bug. 最好是等待下个版本更新.

版权声明

作者: CometDust

链接: https://blog.codu.tech/posts/2021/02/apisix-2-2-ssl-verify-invalid/

许可证: CC BY-NC-SA 4.0

如需转载, 请署名出处.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键