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