基于基础Kong和https://github.com/revomatico/kong-oidc%E6%8F%92%E4%BB%B6%EF%BC%88%E5%9F%BA%E4%BA%8Ezmartzone/lua-resty-openidc%EF%BC%89%E6%9E%84%E5%BB%BA%E7%9A%84https://hub.docker.com/r/revomatico/docker-kong-oidc%E3%80%82
注意:通过环境变量覆盖端口等数值类型时,由于openresty中lua模板引擎的限制,必须双重引用:KONG_X_VAR="'1234'"。
镜像概述和主要用途
该镜像将Kong网关与OpenID Connect(OIDC)认证插件集成,提供API网关的身份认证和授权能力。适用于需要通过OIDC协议对接身份提供商(如Keycloak、Auth0等)的场景,可保护后端服务免受未授权访问。
核心功能和特性
- 集成Kong网关与revomatico/kong-oidc插件,支持OIDC认证流程
- 提供多种会话存储方式:Cookie、Memcached、DSHM(Hazelcast + Vertex)、SHM
- 支持会话压缩、自定义Nginx头大小等优化配置
- 兼容Kong多个版本,提供稳定的版本迭代
使用场景和适用范围
- 单实例轻量级部署(推荐SHM存储)
- Kubernetes集群环境(推荐Memcached或DSHM存储,配合Hazelcast)
- 需要通过OIDC协议进行身份认证的API网关场景
- 对会话数据安全性和性能有不同需求的应用场景
使用方法和配置说明
启用插件
通过环境变量指定启用的插件,需包含oidc:
bash
KONG_PLUGINS=bundled,oidc
会话存储配置
Cookie(默认,不推荐)
- 若会话中包含过多信息(如claims),需调整Nginx头大小:
bash
KONG_NGINX_LARGE_CLIENT_HEADER_BUFFERS='4 16k'
- 可启用会话压缩减少Cookie大小:
bash
KONG_X_SESSION_COMPRESSOR=zlib
Memcached
建议使用支持Memcache协议的Hazelcast(Kubernetes感知),而非原生Memcached。详见:<[***]>
- 参考文档:https://github.com/bungle/lua-resty-session#memcache-storage-adapter
- 切换存储方式:
bash
KONG_X_SESSION_STORAGE=memcache
- 配置参数:
KONG_X_SESSION_MEMCACHE_HOST:Memcached主机名,默认memcached
KONG_X_SESSION_MEMCACHE_PORT:端口,默认11211(数值需双重引用,如"'12345'")
KONG_X_SESSION_MEMCACHE_USELOCKING:默认off
KONG_X_SESSION_MEMCACHE_SPINLOCKWAIT:默认150
KONG_X_SESSION_MEMCACHE_MAXLOCKWAIT:默认30
KONG_X_SESSION_MEMCACHE_POOL_TIMEOUT:默认10
KONG_X_SESSION_MEMCACHE_POOL_SIZE:默认10
KONG_X_SESSION_MEMCACHE_CONNECT_TIMEOUT:默认1000(毫秒)
KONG_X_SESSION_MEMCACHE_SEND_TIMEOUT:默认1000(毫秒)
KONG_X_SESSION_MEMCACHE_READ_TIMEOUT:默认1000(毫秒)
DSHM(Hazelcast + Vertex)
依赖https://github.com/grrolland/ngx-distributed-shm%E7%9A%84dshm.lua%E5%BA%93%E3%80%82%E6%8E%A8%E8%8D%90%E9%85%8D%E5%90%88%E5%90%AF%E7%94%A8Memcache%E5%8D%8F%E8%AE%AE%E7%9A%84Hazelcast%E4%BD%BF%E7%94%A8%E3%80%82
- 参考文档:https://github.com/bungle/lua-resty-session#dshm-storage-adapter
- 切换存储方式:
bash
KONG_X_SESSION_STORAGE=dshm
- 配置参数(默认值):
X_SESSION_DSHM_REGION=oidc_sessions
X_SESSION_DSHM_CONNECT_TIMEOUT=1000
X_SESSION_DSHM_SEND_TIMEOUT=1000
X_SESSION_DSHM_READ_TIMEOUT=1000
X_SESSION_DSHM_HOST=hazelcast
X_SESSION_DSHM_PORT=4321
X_SESSION_DSHM_POOL_NAME=oidc_sessions
X_SESSION_DSHM_POOL_TIMEOUT=1000
X_SESSION_DSHM_POOL_SIZE=10
X_SESSION_DSMM_POOL_BACKLOG=10
SHM(单实例推荐)
适用于单实例部署,无需额外软件。
- 参考文档:https://github.com/bungle/lua-resty-session#shared-dictionary-storage-adapter
- 切换存储方式:
bash
KONG_X_SESSION_STORAGE=shm
- 配置参数(默认值):
KONG_X_SESSION_SHM_STORE=oidc_sessions
KONG_X_SESSION_SHM_STORE_SIZE=5m
KONG_X_SESSION_SHM_USELOCKING=no
KONG_X_SESSION_SHM_LOCK_EXPTIME=30
KONG_X_SESSION_SHM_LOCK_TIMEOUT=5
KONG_X_SESSION_SHM_LOCK_STEP=0.001
KONG_X_SESSION_SHM_LOCK_RATIO=2
KONG_X_SESSION_SHM_LOCK_MAX_STEP=0.5
通用配置
- 会话密钥:设置
KONG_X_SESSION_SECRET定义通用会话密钥
- 会话名称:默认
KONG_X_SESSION_NAME=oidc_session
Docker部署示例
docker run命令
bash
docker run -d \
-p 8000:8000 \
-p 8443:8443 \
-e "KONG_PLUGINS=bundled,oidc" \
-e "KONG_X_SESSION_STORAGE=shm" \
-e "KONG_X_SESSION_SECRET=your-secret-key" \
revomatico/docker-kong-oidc:latest
版本信息
已发布版本
- Kong v3.2.1: https://github.com/revomatico/docker-kong-oidc/blob/master/Dockerfile
- Kong v3.1.1: https://github.com/revomatico/docker-kong-oidc/blob/3.1.1-1/Dockerfile
- Kong v3.1.0: https://github.com/revomatico/docker-kong-oidc/blob/3.1.0-1/Dockerfile
- Kong v3.0.1: https://github.com/revomatico/docker-kong-oidc/blob/3.0.1-1/Dockerfile
- Kong v3.0.0: https://github.com/revomatico/docker-kong-oidc/blob/3.0.0-6/Dockerfile
- Kong v2.8.1: https://github.com/revomatico/docker-kong-oidc/blob/2.8.1-1/Dockerfile
- Kong v2.8.0: https://github.com/revomatico/docker-kong-oidc/blob/2.8.0-4/Dockerfile
- Kong v2.7.1: https://github.com/revomatico/docker-kong-oidc/blob/2.7.1-1/Dockerfile
- Kong v2.7.0: https://github.com/revomatico/docker-kong-oidc/blob/2.7.0-3/Dockerfile
- Kong v2.6.0: https://github.com/revomatico/docker-kong-oidc/blob/2.6.0-2/Dockerfile
- Kong v2.5.1: https://github.com/revomatico/docker-kong-oidc/blob/2.5.1-1/Dockerfile
- Kong v2.5.0: https://github.com/revomatico/docker-kong-oidc/blob/2.5.0-2/Dockerfile
- Kong v2.4.1: https://github.com/revomatico/docker-kong-oidc/blob/2.4.1-1/Dockerfile
- Kong v2.4.0: https://github.com/revomatico/docker-kong-oidc/blob/2.4.0-1/Dockerfile
- Kong v2.3.2: https://github.com/revomatico/docker-kong-oidc/blob/2.3.3-2/Dockerfile
- Kong v2.3.2: https://github.com/revomatico/docker-kong-oidc/blob/2.3.2-2/Dockerfile
- Kong v2.3.0: https://github.com/revomatico/docker-kong-oidc/blob/2.3.0-3/Dockerfile
- Kong v2.2.1: https://github.com/revomatico/docker-kong-oidc/blob/2.2.1-3/Dockerfile
- Kong v2.1.4: https://github.com/revomatico/docker-kong-oidc/blob/2.1.4-1/Dockerfile
- Kong v2.1.0: https://github.com/revomatico/docker-kong-oidc/blob/2.1.0-1/Dockerfile
- Kong v2.0.5: https://github.com/revomatico/docker-kong-oidc/blob/2.0.5-4/Dockerfile
- Kong v2.0.4: https://github.com/revomatico/docker-kong-oidc/blob/2.0.4-1/Dockerfile
- Kong v2.0.3: https://github.com/revomatico/docker-kong-oidc/blob/2.0.3-1/Dockerfile
- Kong v2.0.2: https://github.com/revomatico/docker-kong-oidc/blob/2.0.2-1/Dockerfile
版本更新记录
- 2023-03-08 [3.2.1-2]:将https://github.com/revomatico/kong-plugin-cookies-to-headers%E6%8F%92%E4%BB%B6%E6%9B%B4%E6%96%B0%E8%87%B31.2.0-1
- 2023-03-01 [3.2.1-1]:将Kong更新至3.2.1,调整基础镜像(因3.2.0官方镜像未发布)
- 2023-02-24 [3.1.1-1]:将Kong更新至3.1.1
- 2022-12-07 [3.1.0-1]:将Kong更新至3.1.0
- 2022-12-06 [3.0.1-1]:将Kong更新至3.0.1
- 2022-09-20 [3.0.0-6]:将kong-oidc插件更新至1.3.0-3
- 2022-09-20 [3.0.0-5]:使用适配Kong 3的kong-oidc插件1.3.0-2
- 2022-09-17 [3.0.0-4]:使用适配Kong 3的kong-oidc插件1.3.0-1,修复构建和基础测试
- 2022-09-08 [3.0.0-3]:修复luarocks文件补丁
- 2022-09-08 [3.0.0-2]:将kong-oidc插件更新至1.2.5-1
- 2022-09-08 [3.0.0-1]:将Kong更新至3.0.0
- 2022-04-06 [2.8.1-1]:将Kong更新至2.8.1
- 2022-04-03 [2.8.0-4]:将kong-oidc插件更新至1.2.4-4(感谢@ruiengana)
- 2022-04-01 [2.8.0-3]:将kong-oidc插件更新至1.2.4-3(感谢@ruiengana),将https://github.com/grrolland/ngx-distributed-shm%E6%9B%B4%E6%96%B0%E8%87%B31.0.7
- 2022-03-08 [2.8.0-2]:使用Kong官方发布镜像作为基础镜像
- 2022-03-03 [2.8.0-1]:将Kong更新至2.8.0
- 2022-02-15 [2.7.1-1]:将Kong更新至2.7.1,将kong-oidc插件更新至1.2.4-2
- 2022-01-25 [2.7.0-3]:将kong-oidc插件更新至1.2.4-1,将revomatico/kong-plugin-cookies-to-headers更新至1.1-1
- 2022-01-07 [2.7.0-2]:切换至https://github.com/revomatico/kong-plugin-cookies-to-headers
- 2022-01-07 [2.7.0-1]:将Kong更新至2.6.0,将lua-resty-oidc更新至1.7.5-1,添加https://github.com/pravin-raha/kong-plugin-cookies-to-headers
- 2021-10-20 [2.6.0-2]:修复kong-oidc插件rockspec中引用master分支的问题(导致旧Dockerfile构建失败)
- 2021-09-28 [2.6.0-1]:将Kong更新至2.6.0,不再移除kong-plugin-session(因该插件已集成至Kong仓库)
- 2021-09-08 [2.5.1-1]:将Kong更新至2.5.1
- 2021-07-14 [2.5.0-2]:将kong-oidc版本更新至1.2.3-2,实现https://github.com/revomatico/kong-oidc/pull/8
- 2021-07-14 [2.5.0-1]:将Kong更新至2.5.0
- 2021-05-13 [2.4.1-1]:将Kong更新至2.4.1
- 2021-04-14 [2.4.0-1]:将Kong更新至2.4.0,将基础镜像改为kong/kong,将https://github.com/Kong/kong-plugin-session%E6%9B%B4%E6%96%B0%E8%87%B32.4.5
- 2021-04-12 [2.3.3-3]:添加基于docker-compose和postgres数据库的基础测试
- 2021-03-16 [2.3.3-2]:添加可插拔压缩器zlib依赖(#17)
- 2021-03-10 [2.3.3-1]:将Kong更新至2.3.3
- 2021-02-25 [2.3.2-2]:移除NET_BIND_SERVICE权限以简化安全环境部署,改进测试脚本
- 2021-02-17 [2.3.2-1]:将Kong更新至2.3.2
- 2021-02-17 [2.3.0-3]:将kong-oidc版本更新至1.2.3-1,实现PR https://github.com/revomatico/kong-oidc/pull/3%E5%92%8Chttps://github.com/revomatico/kong-oidc/pull/4
- 2021-01-21 [2.3.0-2]:添加通过`KONG_X_SE