Skip to content

Commit d68e215

Browse files
author
Panagiotatos
committed
HPCC-27274 Document Remote DFS Client Certificates
Signed-off-by: Panagiotatos <greg.panagiotatos+copilot@lexisnexisrisk.com>
1 parent 8ee0d96 commit d68e215

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed

docs/EN_US/ContainerizedHPCC/ContainerizedMods/CustomConfig.xml

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,6 +857,128 @@ thor: []
857857
</sect2>
858858
</sect1>
859859

860+
<sect1 id="DFSClientCerts" role="nobrk">
861+
<title>Configuring DFS Client Certificates for Secure External Access</title>
862+
<para>This section describes how to configure HPCC Systems<superscript>®</superscript> to require and validate client certificates for external DFS (dafilesrv) access, using Kubernetes, cert-manager, and mTLS.</para>
863+
864+
<sect2 id="DFSClientCerts-Overview">
865+
<title>Overview</title>
866+
<para>By default, dafilesrv pods in HPCC containerized deployments use internal certificates for pod-to-pod encryption. To allow secure access from external clients (e.g., remote ECL IDE, DFUPlus, or custom tools), you must configure dafilesrv to require and validate client certificates signed by a trusted Certificate Authority (CA).</para>
867+
</sect2>
868+
869+
<sect2 id="DFSClientCerts-GenerateCA">
870+
<title>Step 1: Create a Certificate Authority (CA)</title>
871+
<para>Use <emphasis role="strong">cert-manager</emphasis> to create a CA in your Kubernetes cluster. For example:</para>
872+
<programlisting>
873+
apiVersion: cert-manager.io/v1
874+
kind: ClusterIssuer
875+
metadata:
876+
name: dfs-ca-issuer
877+
spec:
878+
selfSigned: {}
879+
</programlisting>
880+
<para>Then create a CA certificate:</para>
881+
<programlisting>
882+
apiVersion: cert-manager.io/v1
883+
kind: Certificate
884+
metadata:
885+
name: dfs-ca-root
886+
spec:
887+
isCA: true
888+
commonName: dfs-ca-root
889+
secretName: dfs-ca-root
890+
issuerRef:
891+
name: dfs-ca-issuer
892+
kind: ClusterIssuer
893+
</programlisting>
894+
</sect2>
895+
896+
<sect2 id="DFSClientCerts-ServerCert">
897+
<title>Step 2: Issue Server Certificates for dafilesrv</title>
898+
<para>Issue a server certificate for dafilesrv using the CA. Example:</para>
899+
<programlisting>
900+
apiVersion: cert-manager.io/v1
901+
kind: Certificate
902+
metadata:
903+
name: dafilesrv-server
904+
spec:
905+
secretName: dafilesrv-server-tls
906+
commonName: dafilesrv.hpcc.local
907+
dnsNames:
908+
- dafilesrv.hpcc.local
909+
issuerRef:
910+
name: dfs-ca-issuer
911+
kind: ClusterIssuer
912+
</programlisting>
913+
<para>Reference this secret in your <emphasis role="strong">values.yaml</emphasis> under the <emphasis>dafilesrv.tls</emphasis> section:</para>
914+
<programlisting>
915+
dafilesrv:
916+
tls:
917+
enabled: true
918+
secret: dafilesrv-server-tls
919+
caCertSecret: dfs-ca-root
920+
</programlisting>
921+
</sect2>
922+
923+
<sect2 id="DFSClientCerts-ClientCerts">
924+
<title>Step 3: Issue Client Certificates</title>
925+
<para>Issue client certificates for each external user or tool. Example:</para>
926+
<programlisting>
927+
apiVersion: cert-manager.io/v1
928+
kind: Certificate
929+
metadata:
930+
name: dfs-client-alice
931+
spec:
932+
secretName: dfs-client-alice-tls
933+
commonName: alice
934+
issuerRef:
935+
name: dfs-ca-issuer
936+
kind: ClusterIssuer
937+
</programlisting>
938+
<para>Export the client certificate and key from the secret for use by the external client.</para>
939+
</sect2>
940+
941+
<sect2 id="DFSClientCerts-ClientConfig">
942+
<title>Step 4: Configure External Clients</title>
943+
<para>Configure your external client (e.g., dfuplus, ECL IDE, or custom application) to use the client certificate and key, and to trust the CA certificate. For example, with <emphasis>dfuplus</emphasis>:</para>
944+
<programlisting>
945+
dfuplus ...
946+
-tlsclientcert=alice.crt \
947+
-tlsclientkey=alice.key \
948+
-tlscacert=ca.crt ...
949+
</programlisting>
950+
<para>Ensure the dafilesrv endpoint is reachable and matches the certificate DNS name.</para>
951+
</sect2>
952+
953+
<sect2 id="DFSClientCerts-HelmValues">
954+
<title>Step 5: Helm Chart Configuration</title>
955+
<para>In your <emphasis role="strong">values.yaml</emphasis> overlay, enable mTLS and specify the CA and server certificate secrets:</para>
956+
<programlisting>
957+
dafilesrv:
958+
tls:
959+
enabled: true
960+
requireClientCert: true
961+
secret: dafilesrv-server-tls
962+
caCertSecret: dfs-ca-root
963+
</programlisting>
964+
<para>Apply your configuration with:</para>
965+
<programlisting>
966+
helm upgrade mycluster hpcc/hpcc -f myvalues.yaml
967+
</programlisting>
968+
</sect2>
969+
970+
<sect2 id="DFSClientCerts-Troubleshooting">
971+
<title>Troubleshooting</title>
972+
<para>If external clients cannot connect:</para>
973+
<itemizedlist>
974+
<listitem><para>Check that the client certificate is signed by the correct CA.</para></listitem>
975+
<listitem><para>Verify the dafilesrv pod logs for TLS handshake errors.</para></listitem>
976+
<listitem><para>Ensure the client is presenting its certificate and the CA is trusted by dafilesrv.</para></listitem>
977+
<listitem><para>Confirm the DNS name used matches the certificate.</para></listitem>
978+
</itemizedlist>
979+
</sect2>
980+
</sect1>
981+
860982
<sect1 id="CostTracking1">
861983
<title>Container Cost Tracking</title>
862984

0 commit comments

Comments
 (0)