# 如何使用Knox代理连接开启Kerberos认证的Impala ## 前言 在企业级大数据环境中,Impala作为高性能的SQL查询引擎,常与Kerberos安全认证结合使用。而Apache Knox作为API网关,可提供统一的安全访问入口。本文将详细介绍如何通过Knox代理安全连接启用Kerberos认证的Impala服务。 --- ## 一、环境准备 ### 1.1 基础组件要求 - **Hadoop集群**:已启用Kerberos认证 - **Impala服务**:已配置Kerberos并正常运行 - **Apache Knox**:1.4.0或更高版本 - **Kerberos客户端工具**:`kinit`等 ### 1.2 网络配置确认 确保Knox服务器可以访问: - KDC(Key Distribution Center) - Impala Daemon和StateStore服务 - 默认端口: - Knox: 8443 - Impala: 21050 --- ## 二、Kerberos配置 ### 2.1 创建服务主体 ```bash # 为Knox创建Kerberos主体 kadmin -q "addprinc -randkey knox/hostname@REALM" # 为Impala创建主体(如未存在) kadmin -q "addprinc -randkey impala/impala-host@REALM"
# 生成Knox的keytab kadmin -q "xst -k /etc/security/keytabs/knox.service.keytab knox/hostname" # 生成Impala的keytab(如需要) kadmin -q "xst -k /etc/security/keytabs/impala.keytab impala/impala-host"
编辑$KNOX_HOME/conf/topologies/impala-kerberos.xml
:
<topology> <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.hadoop.gateway.shirorealm.KnoxLdapRealm</value> </param> </provider> </gateway> <service> <role>IMPALA</role> <url>jdbc:impala://impala-host:21050</url> </service> </topology>
在$KNOX_HOME/conf/gateway-site.xml
中添加:
<property> <name>gateway.hadoop.kerberos.secured</name> <value>true</value> </property>
检查impalad
启动参数包含:
--principal=impala/impala-host@REALM --keytab_file=/etc/security/keytabs/impala.keytab --be_principal=impala/impala-host@REALM
使用Impala Shell测试直接连接:
kinit -kt /path/to/user.keytab user@REALM impala-shell -k -i impala-host
kinit -kt /path/to/user.keytab user@REALM
使用JDBC连接字符串:
jdbc:impala://knox-host:8443/;AuthMech=1; KrbRealm=REALM; KrbHostFQDN=knox-host; KrbServiceName=impala; SSL=1; SSLTrustStore=/path/to/truststore.jks;
from impala.dbapi import connect conn = connect( host='knox-host', port=8443, auth_mechanism='GSSAPI', kerberos_service_name='impala', use_ssl=True, ca_cert='/path/to/knox-cert.pem' ) cursor = conn.cursor() cursor.execute('SHOW TABLES') print(cursor.fetchall())
GSSException: No valid credentials provided
现象:SSL handshake failed
解决方案:
# 导出Knox证书 openssl s_client -connect knox-host:8443 | openssl x509 > knox-cert.pem
通过Knox网关连接Kerberos化的Impala服务,既保障了安全性,又提供了统一的访问入口。实际部署时建议结合企业PKI体系进行SSL证书管理,并通过负载均衡实现高可用。遇到问题时,可参考各组件日志(Knox日志位于$KNOX_HOME/logs/
)进行深入排查。 “`
注:实际部署时需替换以下变量: - hostname
:实际主机名 - REALM
:Kerberos领域(如EXAMPLE.COM) - 文件路径根据实际环境调整
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。