You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/EN_US/ContainerizedHPCC/ContainerizedMods/CustomConfig.xml
+122Lines changed: 122 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -857,6 +857,128 @@ thor: []
857
857
</sect2>
858
858
</sect1>
859
859
860
+
<sect1id="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
+
<sect2id="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
+
<sect2id="DFSClientCerts-GenerateCA">
870
+
<title>Step 1: Create a Certificate Authority (CA)</title>
871
+
<para>Use <emphasisrole="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
+
<sect2id="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 <emphasisrole="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
+
<sect2id="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
+
<sect2id="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
+
<sect2id="DFSClientCerts-HelmValues">
954
+
<title>Step 5: Helm Chart Configuration</title>
955
+
<para>In your <emphasisrole="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
+
<sect2id="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>
0 commit comments