This is an automated email from the ASF dual-hosted git repository.

jojochuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone-site.git


The following commit(s) were added to refs/heads/master by this push:
     new a57598253 HDDS-15286. [Docs] Httpfs with load balancer (#429)
a57598253 is described below

commit a57598253ca3c7c9bd0fb32aa830854214b5ed36
Author: Wei-Chiu Chuang <[email protected]>
AuthorDate: Tue Jun 2 23:58:46 2026 -0700

    HDDS-15286. [Docs] Httpfs with load balancer (#429)
    
    Co-authored-by: Cursor <[email protected]>
---
 .../01-client-interfaces/05-httpfs.md              |  4 +
 .../02-configuration/03-security/02-kerberos.md    |  4 +
 .../04-performance/10-httpfs-load-balancer.md      | 99 ++++++++++++++++++++++
 .../01-client-interfaces/05-httpfs.md              |  4 +
 .../02-configuration/03-security/02-kerberos.md    |  4 +
 .../04-performance/10-httpfs-load-balancer.md      | 99 ++++++++++++++++++++++
 6 files changed, 214 insertions(+)

diff --git a/docs/04-user-guide/01-client-interfaces/05-httpfs.md 
b/docs/04-user-guide/01-client-interfaces/05-httpfs.md
index 915c34809..e12c19f2d 100644
--- a/docs/04-user-guide/01-client-interfaces/05-httpfs.md
+++ b/docs/04-user-guide/01-client-interfaces/05-httpfs.md
@@ -18,6 +18,10 @@ HttpFS can be used to access data in Ozone using HTTP 
utilities (such as curl an
 
 The **WebHDFS** client FileSystem implementation can be used to access HttpFS 
using the Ozone filesystem command line tool (`ozone fs`) as well as from Java 
applications using the Hadoop FileSystem Java API.
 
+:::note
+If HttpFS is fronted by a **load balancer** and you use Kerberos (SPNEGO), 
clients obtain tickets for the load balancer’s hostname. Configure the HttpFS 
HTTP principal and keytab accordingly; see [HttpFS behind a load balancer 
(Kerberos)](../../administrator-guide/configuration/performance/httpfs-load-balancer).
+:::
+
 ## Getting started
 
 To try it out, follow the 
[instructions](../../quick-start/installation/docker) to start the Ozone 
cluster with Docker Compose.
diff --git 
a/docs/05-administrator-guide/02-configuration/03-security/02-kerberos.md 
b/docs/05-administrator-guide/02-configuration/03-security/02-kerberos.md
index 17a533756..76a588cef 100644
--- a/docs/05-administrator-guide/02-configuration/03-security/02-kerberos.md
+++ b/docs/05-administrator-guide/02-configuration/03-security/02-kerberos.md
@@ -63,6 +63,10 @@ The HttpFS gateway offers an HDFS-compatible REST API 
(`webhdfs`). It requires K
 | `httpfs.hadoop.authentication.kerberos.principal` | The Kerberos principal 
used by HttpFS to connect to the HDFS NameNode (Ozone Manager). e.g., 
`${user.name}/${httpfs.hostname}@${kerberos.realm}`. |
 | `httpfs.hadoop.authentication.kerberos.keytab` | The Kerberos keytab file 
for the principal used to connect to the HDFS NameNode (Ozone Manager). e.g., 
`${user.home}/httpfs.keytab`. |
 
+:::note
+For HttpFS placed behind a **load balancer** with Kerberos (SPNEGO), the HTTP 
principal must match the **load balancer hostname** that clients use, not only 
the backend HttpFS host. See [HttpFS behind a load balancer 
(Kerberos)](../performance/httpfs-load-balancer).
+:::
+
 ## Recon Server
 
 Recon provides monitoring and management capabilities and can be secured using 
Kerberos authentication for its web UI and REST endpoints.
diff --git 
a/docs/05-administrator-guide/02-configuration/04-performance/10-httpfs-load-balancer.md
 
b/docs/05-administrator-guide/02-configuration/04-performance/10-httpfs-load-balancer.md
new file mode 100644
index 000000000..bc32356d8
--- /dev/null
+++ 
b/docs/05-administrator-guide/02-configuration/04-performance/10-httpfs-load-balancer.md
@@ -0,0 +1,99 @@
+---
+sidebar_label: HttpFS load balancer (Kerberos)
+---
+
+# HttpFS Gateway behind a load balancer (Kerberos)
+
+Clients that use HTTP SPNEGO (negotiate authentication) obtain a Kerberos 
service ticket for the **hostname they connect to**. If HttpFS is reachable 
only through a load balancer, that hostname is the load balancer’s DNS name—not 
the individual HttpFS gateway hosts. Requests then fail with **401 
Authentication required** unless each HttpFS instance is configured to use the 
**same HTTP service principal** as the one clients expect for the load balancer.
+
+Direct access to a single HttpFS host often works because the default 
principal matches that host (for example `HTTP/<httpfs-hostname>@REALM`). The 
same WebHDFS calls through the load balancer fail until the client-facing 
principal and keytab are aligned with the load balancer name.
+
+:::caution
+Running HttpFS behind a load balancer with Kerberos is a valid pattern 
(similar to HDFS HttpFS), but **your organization should validate** the full 
stack—clients, TLS, load balancer forwarding, and delegation tokens—in its own 
environment. Treat this page as operational guidance, not a product 
certification matrix.
+:::
+
+## Prerequisites
+
+- A stable DNS name for the load balancer that clients use in URLs: 
`<load-balancer-host>`.
+- Cluster Kerberos realm: `<CLUSTER_REALM>` (for example `EXAMPLE.COM`).
+- The OS user that runs the HttpFS process (often `hdfs`) must be able to read 
the keytab file you deploy.
+
+## Kerberos principal and keytab
+
+1. Create (or use) a service principal in the standard HTTP SPNEGO form:
+
+   `HTTP/<load-balancer-host>@<CLUSTER_REALM>`
+
+2. Export a keytab that contains this principal and distribute it to **each** 
host that runs the Ozone HttpFS Gateway. Use the **same filesystem path** on 
every host so one configuration snippet applies everywhere. Example path (your 
environment may differ):
+
+   `/var/lib/hadoop-ozone/keytabs/httpfs.keytab`
+
+3. When exporting the keytab, avoid creating a new random key version 
unexpectedly (for example on MIT Kerberos use `kadmin`’s `ktadd` with 
**`-norandkey`** when adding an existing key to the keytab so the KDC key 
version stays consistent with what clients and other hosts expect, per your 
operational procedures).
+
+## Configuration (`httpfs-site.xml`)
+
+Set the **client-facing** HTTP Kerberos principal and keytab to the load 
balancer principal and the deployed keytab. Prefer the canonical Hadoop 
property names:
+
+| Property | Value |
+| -------- | ----- |
+| `hadoop.http.authentication.kerberos.principal` | 
`HTTP/<load-balancer-host>@<CLUSTER_REALM>` |
+| `hadoop.http.authentication.kerberos.keytab` | Path to the keytab on the 
host (for example `/var/lib/hadoop-ozone/keytabs/httpfs.keytab`) |
+
+Example fragment:
+
+```xml
+<property>
+  <name>hadoop.http.authentication.kerberos.principal</name>
+  <value>HTTP/<load-balancer-host>@<CLUSTER_REALM></value>
+</property>
+<property>
+  <name>hadoop.http.authentication.kerberos.keytab</name>
+  <value>/var/lib/hadoop-ozone/keytabs/httpfs.keytab</value>
+</property>
+```
+
+The older names `httpfs.authentication.kerberos.principal` and 
`httpfs.authentication.kerberos.keytab` are **deprecated** aliases for the same 
settings; prefer `hadoop.http.authentication.kerberos.*` for new configuration. 
See the [configuration appendix](../appendix) for reference.
+
+Apply these settings in `httpfs-site.xml` on **every** HttpFS Gateway host, 
deploy the keytab at the same path on each host, then restart HttpFS.
+
+The **internal** HttpFS-to-Ozone Manager authentication 
(`httpfs.hadoop.authentication.*`) is separate; this page only changes what 
clients use when they talk to the **HTTP** endpoint in front of the load 
balancer.
+
+## Multiple HttpFS instances behind one load balancer
+
+If more than one HttpFS gateway sits behind the same VIP, they should behave 
consistently for HTTP authentication cookies. Configure a **shared** signature 
secret so `hadoop-auth` cookies validate on any instance. See 
`hadoop.http.authentication.signature.secret.file` in the [configuration 
appendix](../appendix).
+
+## TLS and clients
+
+- Prefer **HTTPS** between clients and the load balancer when using 
Kerberos/SPNEGO. Some clients (including `curl`) do not follow authentication 
handshakes correctly when redirects move from HTTPS to HTTP, which can break 
SPNEGO.
+- Terminating TLS on the load balancer and using HTTP or HTTPS to the HttpFS 
backends is common; ensure your load balancer forwards headers and protocols in 
a way compatible with your HttpFS and TLS settings.
+
+## Common mistakes
+
+- **Wrong principal**: Principal still references the backend host while 
clients use the load balancer DNS name.
+- **Keytab not readable** by the user running HttpFS (for example permissions 
or SELinux contexts).
+- **Realm mapping**: The load balancer hostname must resolve to the correct 
realm in **`krb5.conf`** (for example `[domain_realm]`). If the client cannot 
obtain a service ticket for `HTTP/<load-balancer-host>@<CLUSTER_REALM>`, enable 
trace logging (below) and verify KDC and DNS SRV records if you use them.
+- **Key version mismatch** after re-exporting keytabs without coordinating 
`kvno` across hosts.
+
+## Debugging
+
+- Run a client with `export KRB5_TRACE=/dev/stdout` to trace ticket requests 
and failures.
+- Compare behavior **directly** to an HttpFS backend versus **through** the 
load balancer to isolate hostname and principal mismatches.
+- Check HttpFS and load balancer access logs for repeated 401 responses and 
failed `Negotiate` exchanges.
+
+## How SPNEGO sees the load balancer
+
+```mermaid
+sequenceDiagram
+  participant Client
+  participant LB as LoadBalancer
+  participant HttpFS as HttpFS_Gateway
+  Client->>LB: HTTPS WebHDFS SPNEGO
+  Note over Client: Service ticket for HTTP_lbHost_REALM
+  LB->>HttpFS: Forward request
+  HttpFS->>Client: SPNEGO completes using LB principal in keytab
+```
+
+## See also
+
+- [Configuring Kerberos](../security/kerberos#httpfs-gateway) — HttpFS-related 
Kerberos properties overview
+- [HttpFS Gateway](../../../user-guide/client-interfaces/httpfs) — REST API 
introduction and examples
diff --git 
a/versioned_docs/version-2.1.0/04-user-guide/01-client-interfaces/05-httpfs.md 
b/versioned_docs/version-2.1.0/04-user-guide/01-client-interfaces/05-httpfs.md
index 915c34809..e12c19f2d 100644
--- 
a/versioned_docs/version-2.1.0/04-user-guide/01-client-interfaces/05-httpfs.md
+++ 
b/versioned_docs/version-2.1.0/04-user-guide/01-client-interfaces/05-httpfs.md
@@ -18,6 +18,10 @@ HttpFS can be used to access data in Ozone using HTTP 
utilities (such as curl an
 
 The **WebHDFS** client FileSystem implementation can be used to access HttpFS 
using the Ozone filesystem command line tool (`ozone fs`) as well as from Java 
applications using the Hadoop FileSystem Java API.
 
+:::note
+If HttpFS is fronted by a **load balancer** and you use Kerberos (SPNEGO), 
clients obtain tickets for the load balancer’s hostname. Configure the HttpFS 
HTTP principal and keytab accordingly; see [HttpFS behind a load balancer 
(Kerberos)](../../administrator-guide/configuration/performance/httpfs-load-balancer).
+:::
+
 ## Getting started
 
 To try it out, follow the 
[instructions](../../quick-start/installation/docker) to start the Ozone 
cluster with Docker Compose.
diff --git 
a/versioned_docs/version-2.1.0/05-administrator-guide/02-configuration/03-security/02-kerberos.md
 
b/versioned_docs/version-2.1.0/05-administrator-guide/02-configuration/03-security/02-kerberos.md
index 553b5096f..38a40ee9f 100644
--- 
a/versioned_docs/version-2.1.0/05-administrator-guide/02-configuration/03-security/02-kerberos.md
+++ 
b/versioned_docs/version-2.1.0/05-administrator-guide/02-configuration/03-security/02-kerberos.md
@@ -63,6 +63,10 @@ The HttpFS gateway offers an HDFS-compatible REST API 
(`webhdfs`). It requires K
 | `httpfs.hadoop.authentication.kerberos.principal` | The Kerberos principal 
used by HttpFS to connect to the HDFS NameNode (Ozone Manager). e.g., 
`${user.name}/${httpfs.hostname}@${kerberos.realm}`. |
 | `httpfs.hadoop.authentication.kerberos.keytab` | The Kerberos keytab file 
for the principal used to connect to the HDFS NameNode (Ozone Manager). e.g., 
`${user.home}/httpfs.keytab`. |
 
+:::note
+For HttpFS placed behind a **load balancer** with Kerberos (SPNEGO), the HTTP 
principal must match the **load balancer hostname** that clients use, not only 
the backend HttpFS host. See [HttpFS behind a load balancer 
(Kerberos)](../performance/httpfs-load-balancer).
+:::
+
 ## Recon Server
 
 Recon provides monitoring and management capabilities and can be secured using 
Kerberos authentication for its web UI and REST endpoints.
diff --git 
a/versioned_docs/version-2.1.0/05-administrator-guide/02-configuration/04-performance/10-httpfs-load-balancer.md
 
b/versioned_docs/version-2.1.0/05-administrator-guide/02-configuration/04-performance/10-httpfs-load-balancer.md
new file mode 100644
index 000000000..bc32356d8
--- /dev/null
+++ 
b/versioned_docs/version-2.1.0/05-administrator-guide/02-configuration/04-performance/10-httpfs-load-balancer.md
@@ -0,0 +1,99 @@
+---
+sidebar_label: HttpFS load balancer (Kerberos)
+---
+
+# HttpFS Gateway behind a load balancer (Kerberos)
+
+Clients that use HTTP SPNEGO (negotiate authentication) obtain a Kerberos 
service ticket for the **hostname they connect to**. If HttpFS is reachable 
only through a load balancer, that hostname is the load balancer’s DNS name—not 
the individual HttpFS gateway hosts. Requests then fail with **401 
Authentication required** unless each HttpFS instance is configured to use the 
**same HTTP service principal** as the one clients expect for the load balancer.
+
+Direct access to a single HttpFS host often works because the default 
principal matches that host (for example `HTTP/<httpfs-hostname>@REALM`). The 
same WebHDFS calls through the load balancer fail until the client-facing 
principal and keytab are aligned with the load balancer name.
+
+:::caution
+Running HttpFS behind a load balancer with Kerberos is a valid pattern 
(similar to HDFS HttpFS), but **your organization should validate** the full 
stack—clients, TLS, load balancer forwarding, and delegation tokens—in its own 
environment. Treat this page as operational guidance, not a product 
certification matrix.
+:::
+
+## Prerequisites
+
+- A stable DNS name for the load balancer that clients use in URLs: 
`<load-balancer-host>`.
+- Cluster Kerberos realm: `<CLUSTER_REALM>` (for example `EXAMPLE.COM`).
+- The OS user that runs the HttpFS process (often `hdfs`) must be able to read 
the keytab file you deploy.
+
+## Kerberos principal and keytab
+
+1. Create (or use) a service principal in the standard HTTP SPNEGO form:
+
+   `HTTP/<load-balancer-host>@<CLUSTER_REALM>`
+
+2. Export a keytab that contains this principal and distribute it to **each** 
host that runs the Ozone HttpFS Gateway. Use the **same filesystem path** on 
every host so one configuration snippet applies everywhere. Example path (your 
environment may differ):
+
+   `/var/lib/hadoop-ozone/keytabs/httpfs.keytab`
+
+3. When exporting the keytab, avoid creating a new random key version 
unexpectedly (for example on MIT Kerberos use `kadmin`’s `ktadd` with 
**`-norandkey`** when adding an existing key to the keytab so the KDC key 
version stays consistent with what clients and other hosts expect, per your 
operational procedures).
+
+## Configuration (`httpfs-site.xml`)
+
+Set the **client-facing** HTTP Kerberos principal and keytab to the load 
balancer principal and the deployed keytab. Prefer the canonical Hadoop 
property names:
+
+| Property | Value |
+| -------- | ----- |
+| `hadoop.http.authentication.kerberos.principal` | 
`HTTP/<load-balancer-host>@<CLUSTER_REALM>` |
+| `hadoop.http.authentication.kerberos.keytab` | Path to the keytab on the 
host (for example `/var/lib/hadoop-ozone/keytabs/httpfs.keytab`) |
+
+Example fragment:
+
+```xml
+<property>
+  <name>hadoop.http.authentication.kerberos.principal</name>
+  <value>HTTP/<load-balancer-host>@<CLUSTER_REALM></value>
+</property>
+<property>
+  <name>hadoop.http.authentication.kerberos.keytab</name>
+  <value>/var/lib/hadoop-ozone/keytabs/httpfs.keytab</value>
+</property>
+```
+
+The older names `httpfs.authentication.kerberos.principal` and 
`httpfs.authentication.kerberos.keytab` are **deprecated** aliases for the same 
settings; prefer `hadoop.http.authentication.kerberos.*` for new configuration. 
See the [configuration appendix](../appendix) for reference.
+
+Apply these settings in `httpfs-site.xml` on **every** HttpFS Gateway host, 
deploy the keytab at the same path on each host, then restart HttpFS.
+
+The **internal** HttpFS-to-Ozone Manager authentication 
(`httpfs.hadoop.authentication.*`) is separate; this page only changes what 
clients use when they talk to the **HTTP** endpoint in front of the load 
balancer.
+
+## Multiple HttpFS instances behind one load balancer
+
+If more than one HttpFS gateway sits behind the same VIP, they should behave 
consistently for HTTP authentication cookies. Configure a **shared** signature 
secret so `hadoop-auth` cookies validate on any instance. See 
`hadoop.http.authentication.signature.secret.file` in the [configuration 
appendix](../appendix).
+
+## TLS and clients
+
+- Prefer **HTTPS** between clients and the load balancer when using 
Kerberos/SPNEGO. Some clients (including `curl`) do not follow authentication 
handshakes correctly when redirects move from HTTPS to HTTP, which can break 
SPNEGO.
+- Terminating TLS on the load balancer and using HTTP or HTTPS to the HttpFS 
backends is common; ensure your load balancer forwards headers and protocols in 
a way compatible with your HttpFS and TLS settings.
+
+## Common mistakes
+
+- **Wrong principal**: Principal still references the backend host while 
clients use the load balancer DNS name.
+- **Keytab not readable** by the user running HttpFS (for example permissions 
or SELinux contexts).
+- **Realm mapping**: The load balancer hostname must resolve to the correct 
realm in **`krb5.conf`** (for example `[domain_realm]`). If the client cannot 
obtain a service ticket for `HTTP/<load-balancer-host>@<CLUSTER_REALM>`, enable 
trace logging (below) and verify KDC and DNS SRV records if you use them.
+- **Key version mismatch** after re-exporting keytabs without coordinating 
`kvno` across hosts.
+
+## Debugging
+
+- Run a client with `export KRB5_TRACE=/dev/stdout` to trace ticket requests 
and failures.
+- Compare behavior **directly** to an HttpFS backend versus **through** the 
load balancer to isolate hostname and principal mismatches.
+- Check HttpFS and load balancer access logs for repeated 401 responses and 
failed `Negotiate` exchanges.
+
+## How SPNEGO sees the load balancer
+
+```mermaid
+sequenceDiagram
+  participant Client
+  participant LB as LoadBalancer
+  participant HttpFS as HttpFS_Gateway
+  Client->>LB: HTTPS WebHDFS SPNEGO
+  Note over Client: Service ticket for HTTP_lbHost_REALM
+  LB->>HttpFS: Forward request
+  HttpFS->>Client: SPNEGO completes using LB principal in keytab
+```
+
+## See also
+
+- [Configuring Kerberos](../security/kerberos#httpfs-gateway) — HttpFS-related 
Kerberos properties overview
+- [HttpFS Gateway](../../../user-guide/client-interfaces/httpfs) — REST API 
introduction and examples


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to