Apache Knox 2.1.0 配置参数详解

Apache Knox 2.1.0 配置参数详解:gateway-site.xml 全量参数分类(网关服务/拓扑提供者/LDAP 认证/日志)、topology XML 结构与 ShiroProvider/AclsAuthz/SSOCookieProvider 参数、knox-env.sh JVM 内存、生产拓扑模板与排障 FAQ

Apache KnoxApache Knox2026/10/12

Apache Knox 2.1.0 配置参数详解

目标:系统梳理 Apache Knox Gateway 2.1.0 的配置体系——gateway-site.xml 网关服务参数、topology 拓扑 XML 与提供者(ShiroProvider 认证、AclsAuthz 授权、SSOCookieProvider 联合登录、WebAppSec)、演示 LDAP 与用户数据(users.ldif)、knox-env.sh JVM 内存参数、日志配置,并给出可直接落地的生产拓扑模板。已在 Ubuntu 22.04.5 + OpenJDK 1.8.0_504 + Knox 2.1.0(/opt/knox)实测环境整理,默认值均取自实测安装的配置文件。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • Java:OpenJDK 1.8.0_504
  • Apache Knox:2.1.0(hash 57793d31b8234863b242f766b8861c2023cbd72d)
  • 安装目录:/opt/knox;配置目录 /opt/knox/conf;数据目录 /opt/knox/data
  • 实测网关端口 8443、演示 LDAP 端口 33389
  • 默认拓扑:admin、manager、knoxsso、homepage、metadata、sandbox(共 6 个,knoxcli.sh list-topologies 实测列出)

二、前置条件

  • 已按《Ubuntu 22.04 安装 Apache Knox 2.1.0 指南》完成安装并启动网关(参数修改验证需要运行中的 Knox)。
  • 熟悉 XML 基本语法;理解 Knox 的「拓扑 = 提供者链 + 服务集群定义」模型。

三、参数查看与修改方式

层次文件/位置查看与修改方式
网关全局/opt/knox/conf/gateway-site.xml编辑 <property><name>…</name><value>…</value></property>,改后重启网关(部分参数支持热生效)
JVM/环境/opt/knox/bin/knox-env.shexport KNOX_GATEWAY_MEM_OPTS 等变量,改后重启网关
拓扑/opt/knox/conf/topologies/*.xml保存后 Knox 自动监测目录并重新部署(实测日志出现 monitoring/redeploy),无需重启
共享提供者/opt/knox/conf/shared-providers/*.json供 descriptors 引用的提供者模板(default-providers.json 实测内含 ShiroProvider 模板)
简化描述符/opt/knox/conf/descriptors/*.json简化版拓扑描述(服务发现场景),与 topologies/ 二选一
演示用户/opt/knox/conf/users.ldif演示 LDAP 启动时加载,改后重启 LDAP(ldap.sh stop/start)
日志/opt/knox/conf/gateway-log4j2.xmlLog4j2 配置,改后重启网关

修改后验证:

/opt/knox/bin/knoxcli.sh validate-topology --cluster sandbox   # 拓扑语法校验
/opt/knox/bin/knoxcli.sh redeploy --cluster sandbox            # 手工触发重新部署(成功无输出,返回码 0)

实测校验回显:

/opt/knox/conf/topologies/sandbox.xml
==========================================
Topology file validated successfully

四、参数总览

Knox 配置分四个层次,优先级从高到低:拓扑 XML 内联提供者 > 共享提供者 JSON(被描述符引用)> gateway-site.xml 网关全局 > 代码内置默认(gateway-default.xml,随 jar 分发)。实测 gateway-site.xml 中的参数分组:

分组代表参数数量(实测默认文件)
网络与服务gateway.port、gateway.path、gateway.gateway.conf.dir3
Kerberosgateway.hadoop.kerberos.secured、java.security.krb5.conf 等4
WebSocket/WebShellgateway.websocket.feature.enabled、gateway.webshell.*6
Cookie/首页gateway.scope.cookies.feature.enabled、knox.homepage.logout.enabled2
集群配置监测gateway.cluster.config.monitor.ambari.*2
Token 管理gateway.knox.token.*3
管理员与组gateway.knox.admin.groups、gateway.group.config.*(LDAP 组映射)10
调度白名单gateway.dispatch.whitelist(.services)2
其他gateway.service.alias.impl、gateway.application.path.alias.token-generation、gateway.xforwarded.*3

五、核心参数分类详解

5.1 网关服务参数(gateway-site.xml)

参数实测默认值说明与调优建议
gateway.port8443网关 HTTPS 监听端口;改为 443 需 root 或配置端口转发
gateway.pathgateway上下文路径,访问形如 https://host:8443/gateway/sandbox/webhdfs/v1/…(sandbox 换成对应拓扑名);可改为空串实现根路径挂载
gateway.gateway.conf.dirdeployments拓扑部署物目录(相对 data 目录),部署后的 war 存于 data/deployments
gateway.hadoop.kerberos.securedfalse后端集群启用 Kerberos 时改 true,并配置 krb5.conf(见下)
java.security.krb5.conf/etc/knox/conf/krb5.confKerberos 配置文件绝对路径
java.security.auth.login.config/etc/knox/conf/krb5JAASLogin.confJAAS 登录配置绝对路径
gateway.websocket.feature.enabledfalseWebSocket 透传(Zeppelin/Livy UI 需要);webshell 依赖此项开启
gateway.scope.cookies.feature.enabledfalse按拓扑隔离 Cookie 作用域,多拓扑防串用建议开启
gateway.cluster.config.monitor.ambari.enabledfalseAmbari/Cloudera Manager 集群配置自动监测开关
gateway.cluster.config.monitor.ambari.interval60监测轮询间隔(秒)
gateway.service.alias.implorg.apache.knox.gateway.services.security.impl.RemoteAliasService别名服务实现;接 ZooKeeper 远程别名时保留,单机可用默认本地实现
knox.homepage.logout.enabledtrueKnox 首页是否显示登出
gateway.knox.token.management.users.can.see.all.tokensadmin可在 Token 管理页查看所有 token 的用户名列表
gateway.knox.token.eviction.grace.period0token 过期后状态保留宽限期(秒),仅 server-managed 模式生效
gateway.application.path.alias.token-generationtokengentoken 生成应用路径别名
gateway.knox.admin.groupsadminKnox 管理员组;manager/admin 拓扑的 ACL 以此判定
gateway.dispatch.whitelist.servicesDATANODE,HBASEUI,HDFSUI,JOBHISTORYUI,NODEUI,YARNUI,knoxauth应用重定向白名单的服务角色范围
gateway.dispatch.whitelist^https?://(localhost|127.0.0.1|0:0:0:0:0:0:0:1|::1):[0-9].*$白名单正则;生产改为后端主机域名列表,否则 UI 跳转被拒
gateway.xforwarded.header.context.append.servicenameLIVYSERVER对列表内服务在 X-Forwarded-Context 追加服务名

JVM 内存参数(/opt/knox/bin/knox-env.sh,实测默认全部注释,本文改为网关 256–512MB):

变量作用对象实测取值
KNOX_GATEWAY_MEM_OPTS网关 JVM-Xms256m -Xmx512m
KNOX_LDAP_MEM_OPTS演示 LDAP JVM空(默认)
KNOX_CLI_MEM_OPTSknoxcli JVM空(默认)
KNOX_GATEWAY_PID_DIRPID 文件目录默认 {GATEWAY_HOME}/pids
KNOX_GATEWAY_LOG_DIR网关日志目录默认 {GATEWAY_HOME}/logs

生效验证(实测回显,jps -v):

4662 gateway.jar -Xms256m -Xmx512m -Djava.library.path=/opt/knox/ext/native

5.2 拓扑 XML 与提供者参数

拓扑文件位于 /opt/knox/conf/topologies/<名称>.xml,结构为 <topology><gateway><provider>…</provider></gateway><service>…</service></topology>。提供者按 role 顺序执行:webappsec → federation/authentication → identity-assertion → authorization → hostmap。

认证:ShiroProvider(Basic 认证 + LDAP,admin/sandbox 拓扑实测配置)

参数实测值说明
sessionTimeout30会话空闲超时(分钟)
main.ldapRealmorg.apache.knox.gateway.shirorealm.KnoxLdapRealmLDAP 认证 Realm 实现类
main.ldapRealm.userDnTemplateuid={0},ou=people,dc=hadoop,dc=apache,dc=org用户 DN 模板,{0} 为登录名
main.ldapRealm.contextFactory.urlldap://localhost:33389LDAP 服务地址(生产改企业 LDAP/AD)
main.ldapRealm.contextFactory.authenticationMechanismsimple绑定方式
urls./**authcBasic全路径启用 Basic 认证(可按路径配 authc 表单等)

授权:AclsAuthz

参数实测值说明
knox.acladmin;;分号分隔的 user;group;ip ACL,* 为任意
knox.acl.modeOR(manager 拓扑实测)多条 ACL 间的组合模式

manager 拓扑(Knox 管理台)实测使用 knox.acl = KNOX_ADMIN_USERS;KNOX_ADMIN_GROUPS;*,即授信 Knox 管理员用户/组(对应 gateway.knox.admin.groups=admin)。

联合登录:SSOCookieProvider(manager 拓扑实测)

参数实测值说明
knox.token.exp.server-managedfalseKnoxSSO cookie 校验是否用服务端管理 token 状态(2.1.0 新增参数)

配套的 knoxsso 拓扑提供表单登录(knoxauth 应用),实测访问 /gateway/manager/admin/api/v1/version 未登录时 302 跳转:

302 redirect:https://localhost:8443/gateway/knoxsso/api/v1/websso?originalUrl=https://localhost:8443/gateway/manager/admin/api/v1/version

WebAppSec(manager 拓扑实测):csrf.enabled=true(csrf.customHeader=X-XSRF-Header,GET/OPTIONS/HEAD 免校验)、xframe.options.enabled=true、xss.protection.enabled=true、strict.transport.enabled=false。

身份断言:HadoopGroupProvider(manager 拓扑实测):CENTRAL_GROUP_CONFIG_PREFIX=gateway.group.config.,将组映射配置集中到 gateway-site(见 5.3)。

服务定义(<service> 段):role 指定服务类型,url 指定后端地址。sandbox 拓扑实测片段:

<service>
    <role>WEBHDFS</role>
    <url>http://localhost:50070/webhdfs</url>
</service>

经网关访问 https://host:8443/gateway/sandbox/webhdfs/v1/?op=LISTSTATUS 时,Knox 改写 URL、附加 user.name 身份参数后转发(审计日志实测:dispatch|uri|http://localhost:50070/webhdfs/v1/?op=LISTSTATUS&user.name=admin|success|Response status: 200)。

5.3 演示 LDAP 与组映射参数

gateway-site.xml 实测内含 HadoopGroupProvider 的中央组映射配置(前缀 gateway.group.config.):

参数实测值
gateway.group.config.hadoop.security.group.mappingorg.apache.hadoop.security.LdapGroupsMapping
gateway.group.config.hadoop.security.group.mapping.ldap.bind.useruid=guest,ou=people,dc=hadoop,dc=apache,dc=org
gateway.group.config.hadoop.security.group.mapping.ldap.bind.passwordguest-password
gateway.group.config.hadoop.security.group.mapping.ldap.urlldap://localhost:33389
gateway.group.config.hadoop.security.group.mapping.ldap.search.filter.user(&(|(objectclass=person)(objectclass=applicationProcess))(cn={0}))
gateway.group.config.hadoop.security.group.mapping.ldap.search.filter.group(objectclass=groupOfNames)
gateway.group.config.hadoop.security.group.mapping.ldap.search.attr.membermember
gateway.group.config.hadoop.security.group.mapping.ldap.search.attr.group.namecn

演示用户数据(/opt/knox/conf/users.ldif 实测结构):people 分支下 guest/sam/tom/admin 四个用户,groups 分支下 analyst(sam、tom)、scientist(sam)、admin(admin)三组。认证与组的组合决定 AclsAuthz 与 manager 拓扑的访问权。

⚠️ 注意:ldap.bind.password 在默认文件中为明文,生产环境应改用凭据别名(knoxcli.sh create-alias 存入 jceks,配置里引用 ${alias=…} 形式)。

5.4 日志配置

  • /opt/knox/conf/gateway-log4j2.xml:网关 Log4j2 配置,滚动日志输出到 /opt/knox/logs/gateway.log;审计独立于 gateway-audit.log。
  • /opt/knox/logs 实测文件:gateway.log(运行日志)、gateway-audit.log(访问审计)、gateway.err/gateway.out(stdout/stderr)、ldap.log/ldap.err/ldap.out(演示 LDAP)、knoxcli.log(CLI 操作)。
  • 审计日志字段(实测样例行):时间 ||请求ID|audit|来源IP|服务角色|用户|||动作|uri|结果|详情,排障时先看 access/dispatch 两类记录定位认证与转发环节。

六、生产配置模板

适用场景:8–16GB 内存服务器、SSD 磁盘、为企业 LDAP 后端 + WebHDFS/YARN UI 提供网关入口,网关 JVM 限 256–512MB 堆。

/opt/knox/conf/gateway-site.xml 生产关键项(在默认文件基础上修改):

<configuration>
    <property><name>gateway.port</name><value>8443</value></property>
    <property><name>gateway.path</name><value>gateway</value></property>
    <property><name>gateway.websocket.feature.enabled</name><value>true</value></property>
    <property><name>gateway.scope.cookies.feature.enabled</name><value>true</value></property>
    <property><name>gateway.knox.admin.groups</name><value>knox-admin</value></property>
    <property><name>gateway.dispatch.whitelist</name><value>^https?:\/\/(nn\.hadoop\.example\.com|rm\.hadoop\.example\.com):[0-9]{1,5}$</value></property>
</configuration>

/opt/knox/conf/topologies/production.xml(企业 LDAP + Basic 认证 + ACL + WebHDFS/YARN UI 模板):

<topology>
    <name>production</name>
    <gateway>
        <provider>
            <role>authentication</role>
            <name>ShiroProvider</name>
            <enabled>true</enabled>
            <param><name>sessionTimeout</name><value>30</value></param>
            <param><name>main.ldapRealm</name><value>org.apache.knox.gateway.shirorealm.KnoxLdapRealm</value></param>
            <param><name>main.ldapRealm.userDnTemplate</name><value>uid={0},ou=people,dc=example,dc=com</value></param>
            <param><name>main.ldapRealm.contextFactory.url</name><value>ldap://ldap.example.com:389</value></param>
            <param><name>main.ldapRealm.contextFactory.authenticationMechanism</name><value>simple</value></param>
            <param><name>urls./**</name><value>authcBasic</value></param>
        </provider>
        <provider>
            <role>authorization</role>
            <name>AclsAuthz</name>
            <enabled>true</enabled>
            <param><name>knox.acl</name><value>hdfs-users;hadoop-users;10.0.0.0/24</value></param>
        </provider>
        <provider>
            <role>identity-assertion</role>
            <name>Default</name>
            <enabled>true</enabled>
        </provider>
        <provider>
            <role>hostmap</role>
            <name>static</name>
            <enabled>true</enabled>
            <param><name>localhost</name><value>nn.hadoop.example.com</value></param>
        </provider>
    </gateway>
    <service>
        <role>WEBHDFS</role>
        <url>http://nn.hadoop.example.com:50070/webhdfs</url>
    </service>
    <service>
        <role>RESOURCEMANAGER</role>
        <url>http://rm.hadoop.example.com:8088/ws</url>
    </service>
</topology>

落地与验证:

/opt/knox/bin/knoxcli.sh validate-topology --path /opt/knox/conf/topologies/production.xml
/opt/knox/bin/knoxcli.sh list-topologies
curl -s -k -u admin:q1w2e3r4 "https://localhost:8443/gateway/production/webhdfs/v1/?op=LISTSTATUS"
# 账号取能通过该拓扑认证的用户;演示目录实测 admin/q1w2e3r4,企业 LDAP 换实际账号

内存与磁盘标注:网关 JVM -Xms256m -Xmx512m(小流量网关足够,>500 QPS 建议 1–2GB 并同步调大 KNOX_GATEWAY_MEM_OPTS);data/deployments 随拓扑数增长,SSD 保留 5GB 空余;日志按 gateway-log4j2.xml 滚动策略预留 10GB。

七、常见问题

Q1:修改 gateway-site.xml 后端口没变? A:gateway.port 属启动期参数,需 gateway.sh stop/start 重启网关生效;topologies/*.xml 才是保存即自动重部署。

Q2:拓扑部署失败或服务 503? A:先校验语法 knoxcli.sh validate-topology --cluster sandbox,再看 data/deployments/sandbox.topo.16fcdcdcfd8(实测部署目录名,末尾 hash 随拓扑内容变化) 是否生成;后端地址不可达时网关本身仍正常,转发才报错——用审计日志的 dispatch 行区分网关问题与后端问题。

Q3:LDAP 认证一直失败(401)? A:逐项核对 ShiroProvider 的 contextFactory.url 可达性(curl telnet://ldap-host:389 或 nc -zv)、userDnTemplate 与目录结构是否匹配;用 knoxcli.sh user-auth-test --cluster admin --u admin --p q1w2e3r4 复现,密码错误实测输出 [LDAP: error code 49 - INVALID_CREDENTIALS: Bind failed: ERR_229 ...]。

Q4:UI 类服务跳转被拒或白页? A:gateway.dispatch.whitelist 默认只放行 localhost,生产必须加入后端主机域名;同时浏览器经网关访问 UI 需要时钟同步与 Cookie 作用域配置正确。

Q5:如何把明文密码改成别名引用? A:knoxcli.sh create-alias ldap.bind.password --cluster sandbox --value hdfsP4ss(实测示例值) 后,将配置值改为 ${alias=ldap.bind.password} 形式;凭据存于 data/security/keystores 下对应拓扑 jceks。

八、参考链接