# 如何使用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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。