您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何使用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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。