[ 
https://issues.apache.org/jira/browse/HBASE-29762?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18045775#comment-18045775
 ] 

Balazs Meszaros commented on HBASE-29762:
-----------------------------------------

{quote}The client will scan hbase:meta to find the location of a region, and 
there is only one server name in the meta record. I do not think a coprocessor 
based solution can solve this problem? We need to do some translating at client 
side? Or maybe we should add new qualifiers in hbase:meta to support multiple 
addresses for a single region server?
{quote}
Why? Client scans {{hbase:meta}} table and the coprocessor replaces 
{{info:server}} and {{info:sn}} columns to the external addresses. Again, this 
replacement will only take place when the client asks to do it, based on a 
client connection header (HBASE-29765). So the client won't know the internal 
address, it will see only the external.

It is completely doable, because co-processors can change get/scan results. 
There are other RPCs which are more problematic, but they are not in the 
current scope:
 * {{getClusterMetrics}} (RPC behind {{status}} shell command): the coprocessor 
interface was not designed to change the response and the fields are immutable.
 * Any other RPCs where we pass {{ServerName}} object between the client and 
server side.

> Support external client connection to kubernetized HBase cluster
> ----------------------------------------------------------------
>
>                 Key: HBASE-29762
>                 URL: https://issues.apache.org/jira/browse/HBASE-29762
>             Project: HBase
>          Issue Type: New Feature
>            Reporter: Balazs Meszaros
>            Assignee: Balazs Meszaros
>            Priority: Major
>
> When HBase is deployed to kubernetes, kubernetes assigns its own hostnames to 
> HBase pods. It works fine while the clients are in the same kubernetes 
> environment, but can be an issue if they are coming from outside the 
> kubernetes environment. Kubernetes offers several methods for exposing 
> services like Istio, Load Balancers, ... Any method can be used, but these 
> methods share one thing: the external addresses are different from the 
> internal addresses.
> The goal is to support external HBase client connection to kubernetized HBase 
> clusters. The idea is to implement a co-processor which translates the 
> internal addresses to external addresses. This translation is optional based 
> on a client connection header (which is coming from a configuration property).
> This task sums up these efforts:
> * [HBASE-29763] Implement co-processor host for client-meta (Zookeeper-less 
> HBase discovery) service.
> * [HBASE-29764] Make client connection header attributes accessible inside 
> co-processors.
> * [HBASE-29765] Make client connection header attributes configurable.
> * [HBASE-29766] Implement a co-processor which intercepts client-meta calls, 
> {{hbase:meta}} table gets/scans and replaces internal addresses with external 
> addresses.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to