Charles Connell created HBASE-28931:
---------------------------------------
Summary: RPC TLS certificate is not reloaded when in Kubernetes
Secret directory
Key: HBASE-28931
URL: https://issues.apache.org/jira/browse/HBASE-28931
Project: HBase
Issue Type: Bug
Reporter: Charles Connell
Assignee: Charles Connell
At my company we have an issue with our HBase servers not reloading TLS
certificate files after they change on disk. We run our HMasters inside
Kubernetes Pods, and define our certificate contents as Kubernetes Secrets.
Then, the Secrets are projected into the HMaster containers as files. When the
value of a Secret changes, the file changes automatically. However, Kubernetes
does some complicated indirection, and does not change the files directly. It
swaps a new directory in with new files in it.
HBase sets up a WatchService on the directory containing the TLS cert. For
example, at my company, the cert is at
{{{}/etc/hadoop/conf/ssl/cert/server-chain.pem{}}}. Then, events from that
WatchService are delivered to a [handler
method|https://github.com/apache/hbase/blob/836630422df2776287a860eff9d7104c3eca0582/hbase-common/src/main/java/org/apache/hadoop/hbase/io/crypto/tls/X509Util.java#L530]
which contains this check:
{code:java}
Path eventFilePath = dirPath.resolve((Path) event.context());
if (filePath.equals(eventFilePath)) {
shouldResetContext = true;
}{code}
Debug logs show why this conditional is never true:
2024-10-21T17:48:13,659 [FileChangeWatcher-server-chain.pem] DEBUG
org.apache.hadoop.hbase.io.FileChangeWatcher: Got file changed event:
ENTRY_CREATE with context: ..2024_10_21_17_48_13.2471317370
2024-10-21T17:48:13,659 [FileChangeWatcher-server-chain.pem] DEBUG
org.apache.hadoop.hbase.io.FileChangeWatcher: Got file changed event:
ENTRY_CREATE with context: ..2024_10_21_17_48_13.2471317370
2024-10-21T17:48:13,660 [FileChangeWatcher-server-chain.pem] DEBUG
org.apache.hadoop.hbase.io.crypto.tls.X509Util: Ignoring watch event and
keeping previous default SSL context. Event kind: ENTRY_CREATE with context:
..2024_10_21_17_48_13.2471317370
....
The watch events have a variety of files attached to them, but none of them are
{{{}server-chain.pem{}}}, so HBase thinks they are not relevant.
I propose that we simply remove the condition inspecting the file name that was
changed, and always reload the SSL context if a watcher event fires.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)