Skip to main content

3 posts tagged with "Test"

View All Tags

· 4 min read
CheverJohn

I’m having trouble integrating openid-connect plugin with apisix gateway. When I have it enabled I end up getting no response from the API. Any idea what am I doing wrong or how to troubleshoot it? in slack

  1. enabled openid-connect plugin
curl [http://127.0.0.1:9080/apisix/admin/routes/5](http://127.0.0.1:9080/apisix/admin/routes/5) -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/get",
"plugins": {
"openid-connect": {
"client_id": "my-client",
"client_secret": "XXXX-XXXX-XXX",
"discovery": "[https://my-auth-server/myapi/.well-known/openid-configuration](https://my-auth-server/myapi/.well-known/openid-configuration)",
"access_token_in_authorization_header": true,
"bearer_only": true
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
  1. request to the /get endpoint results in Empty reply from server
curl -i -X GET [http://127.0.0.1:9080/get](http://127.0.0.1:9080/get) -H "Host: httpbin.org" -H "Authorization: Bearer #####token####"

curl: (52) Empty reply from server

3.   error.log has the following:

2022/03/18 21:23:09 [alert] 1#1: worker process 124 exited on signal 11
2022/03/18 21:23:09 [warn] 127#127: *723842 [lua] plugin.lua:172: load(): new plugins: {"uri-blocker":true,"fault-injection":true,"serverless-pre-function":true,"wolf-rbac":true,"datadog":true,"authz-keycloak":true,"skywalking-logger":true,"grpc-transcode":true,"splunk-hec-logging":true,"ext-plugin-pre-req":true,"ua-restriction":true,"ext-plugin-post-req":true,"response-rewrite":true,"key-auth":true,"grpc-web":true,"jwt-auth":true,"limit-count":true,"referer-restriction":true,"forward-auth":true,"udp-logger":true,"serverless-post-function":true,"basic-auth":true,"openwhisk":true,"cors":true,"limit-conn":true,"server-info":true,"azure-functions":true,"traffic-split":true,"request-validation":true,"google-cloud-logging":true,"rocketmq-logger":true,"sls-logger":true,"kafka-logger":true,"proxy-control":true,"proxy-rewrite":true,"syslog":true,"consumer-restriction":true,"echo":true,"http-logger":true,"prometheus":true,"redirect":true,"ip-restriction":true,"aws-lambda":true,"limit-req":true,"opa":true,"real-ip":true,"authz-casbin":true,"tcp-logger":true,"zipkin":true,"openid-connect":true,"gzip":true,"example-plugin":true,"request-id":true,"api-breaker":true,"hmac-auth":true,"ldap-auth":true,"proxy-mirror":true,"client-control":true,"proxy-cache":true}, context: init_worker_by_lua*
2022/03/18 21:23:09 [warn] 127#127: *723842 [lua] plugin.lua:222: load_stream(): new plugins: {"limit-conn":true,"ip-restriction":true,"mqtt-proxy":true}, context: init_worker_by_lua*

首先在我本地的 m1 上已安装的 APISIX 上看是否能重现bug。 流程如下:

  1. 进入 APISIX,使用 ./bin/apisix start 命令启动 APISIX。
  2. 直接报错 401,这个属于正常情况,因为没有做权限认证,就应该是这样的报错。

换一种重现方式:使用 docker 镜像(arm 版本) https://hub.docker.com/r/apache/apisix/tags#:~:text=3ab0b2f76959-,linux,-/arm64 首先复制命令

apache/apisix/2.12.1-alpine/images/sha256-3ab0b2f76959f057790b35adf2438fea5ae6cbc8c994aff159bf17d72654d857?context=explore
docker pull apache/apisix:2.12.1-alpine@sha256:3ab0b2f76959f057790b35adf2438fea5ae6cbc8c994aff159bf17d72654d857
docker pull nginx:stable-perl@sha256:3ab0b2f76959f057790b35adf2438fea5ae6cbc8c994aff159bf17d72654d857
docker pull nginx:stable-perl@sha256:3ab0b2f76959f057790b35adf2438fea5ae6cbc8c994aff159bf17d72654d857
docker run -itd --rm --name=dev-apisx -v /srv/[github.com/apache/apisix/conf/config.yaml:/usr/local/apisix/conf/config.yaml](http://github.com/apache/apisix/conf/config.yaml:/usr/local/apisix/conf/config.yaml) apache/apisix

修改:docker tag c8202912bb3a apache/apisix:dev 这个命令用于运行apisix,记住这边得先把 APISIX镜像的tag改了哈改成 apache/apisix:dev

docker run -itd --rm --name=dev-apisx -p 9080:9080 -v /Users/cheverjohn/home/api7/dev_cj/apisix/conf/config.yaml:/usr/local/apisix/conf/config.yaml apache/apisix:dev

上面的这条命令要好好理解,这是最终的状态。

![[dockerdestop.png]]

这边还有一个 etcd 的映射端口更改。

这一块需要思考到的地方有, etcd 由于我是本地使用 brew 命令安装的,所以它会默认由brew 守护开启,也就是无论你开关机它都会启动。这个 需要额外关闭。我是通过这条命令看到的

brew info etcd

看到可以这样关闭 etcd

brew services stop etcd
ETCD_UNSUPPORTED_ARCH="arm64" /opt/homebrew/opt/etcd/bin/etcd
ETCD_UNSUPPORTED_ARCH="arm64" /opt/homebrew/opt/etcd/bin/etcd --listen-client-urls=http://0.0.0.0:2379
ETCD_UNSUPPORTED_ARCH="arm64" /opt/homebrew/opt/etcd/bin/etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-advertise-peer-urls http://0.0.0.0:2380

其中为了确认 etcd 的安装位置,他的端口状态,会一直使用到以下命令:

lsof -i:2379

得出运行 2379 端口的进程。

lsof -p PID

根据 PID 得到进程的具体位置,根据这个操作确认到 进程的具体位置。

这里边超哥贡献了一些命令:

history | grep etcd
curl http://192.168.28.179:2379/version

期望通过这个配置,判断是否正常启动好 etcd。

还有命令:

docker logs aae1b3434ce4

这里边的 后边的数字其实是 container ID

此处码一下,希望了解清楚以下两条命令的区别:

docker ps

docker ps -a

下面的代码也要了解清楚各种参数的意思:

docker run -itd --name=dev-apisx -v /Users/cheverjohn/home/api7/dev_cj/apisix/conf/config.yaml:/usr/local/apisix/conf/config.yaml apache/apisix:dev

查看日志命令

tail -f error.log

有时候我也看到会连续执行两条命令:

docker stop 9b17b3bbb061

docker rm 9b17b3bbb061

docker rmi c8202912bb3a

检查: docker inspect apache/apisix:dev

这边配置好 etcd 和 APISIX 之后,开始 curl 请求 ifconfig | grep 192.168 找到了:curl http://192.168.101.161:2379/version

· 3 min read
CheverJohn

首先上我最终跑通一个测试的例子:

Installation

按照正常的操作,我先 clone fork 下来的仓库,然后安装相关依赖,这个我还是根据了 APISIX 2.10 的文档版本 里讲一系列步骤做的。千万注意,这个方法已经老套了,你应该用下面介绍的最新脚本的方法,如图所示:

ubuntu 安装依赖

Make deps

然后这个地方坑的就来了,在最新的github 脚本里边,是有下面的这行命令的,也就是文档内容跟最新脚本内容是不相符的。 这个需要我及时去进行修改。

sudo apt-get install -y git openresty curl openresty-openssl111-dev make gcc libpcre3 libpcre3-dev libldap2-dev unzip

事实上运行了上面的命令之后,就不会有什么找不到 ldap 之类的问题了,淦

然后我们解决了 make deps 的问题。接下来就直接是 make install,一切正常。

开始测试部分

首先根据官方的命令安装

  1. 第一是安装 perl 的包管理工具 cpanminus
apt install cpanminus
  1. 第二然后通过 cpanm 安装 test-nginx 的依赖。
sudo cpanm --notest Test::Nginx IPC::Run > build.log 2>&1 || (cat build.log && exit 1)
  1. 首先将 APISIX 加入到框架中去
export PERL5LIB=.:$PERL5LIB:/home/api7/dev_cj/apisix
  1. 然后配置OpenResty 中的 NGINX 的环境变量配置
export PATH=/usr/local/openresty/nginx/sbin:$PATH

如果你遇到这样的问题

你就需要下载子模块:

git submodule update --init --recursive

请注意,当我仅运行

apisix start

and

nohup etcd &

之后,便能够成功运行,如图

虚拟机经历了很多 虚拟机经历了很多

· 3 min read
CheverJohn

我的问题描述

  1. 无法跑测试(APISIX 的);
  2. Nginx 会启动多个进程。

然后我复现的命令如下可见

export PERL5LIB=.:$PERL5LIB:/home/api7/dev_cj/apisix

export PATH=/usr/local/openresty/nginx/sbin:$PATH

prove ....../example.t

然后就出现一个问题端口占用

解决办法:当跑测试的时候,因为 APISIX 会启动upstream 端口,所以如果不关闭 openresty 的阿虎,就会遇到端口占用的问题。

然后我运行

netstat -nultp

复现了 多个 nginx 进程的问题,

运行

ps -ef | grep nginx

发现了多个进程,意识到我的 openresty 还开着。

关闭 openresty

openresty -s stop

然后利用kill -9 杀掉了很多个进程。这边我采取了笨方法,一个进程一个进程杀掉了,可以不用 -9 ,这边 remark 一下。

kill -9 76007
kill -9 76008
kill -9 76009

APISIX 重启了一切正常

总结

ps -ef | grep nginx

这个命令还是要记记牢。

2022年 3月 8日

细节问题:没想到已经跑通测试的我,还是在新的开发机上跑测试框架遇到了问题。本次主要问题在于 一个安装包问题,所以说环境是真的无语,还是得设置到代理啊。我设置了git 的代理解决了问题, 详情方法,请参考 link ,我的主要疏忽在于,没注意端口, 因为之前实在 Windows 本上做开发的,用的是 v2ray,端口是 10808,没曾想就照着走错了,离谱啊。此处 mark 一下,需要注意。

然后还有一个点需要注意一下,make depsLUAROCKS_SERVER=https://luarocks.cn make deps 可以混着用,over。

放上遇到问题的图:

我又遇到问题啦呜呜呜

放上解决问题之后的图片:

解决问题就是爽啊!