Skip to content

Commit

Permalink
Add ability to mount self-signed certs to kfp
Browse files Browse the repository at this point in the history
Signed-off-by: ddalvi <[email protected]>
  • Loading branch information
DharmitD committed May 23, 2024
1 parent 61331d2 commit 6058013
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions backend/src/v2/compiler/argocompiler/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
package argocompiler

import (
"fmt"
"os"
"strings"

wfapi "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
"github.com/golang/protobuf/jsonpb"
Expand Down Expand Up @@ -282,6 +284,66 @@ func (c *workflowCompiler) addContainerExecutorTemplate(refName string) string {
if err := jsonpb.UnmarshalString(kubernetesConfigString, k8sExecCfg); err == nil {
extendPodMetadata(&executor.Metadata, k8sExecCfg)
}
caBundleCfgMapName := os.Getenv("ARTIFACT_COPY_STEP_CABUNDLE_CONFIGMAP_NAME")
caBundleCfgMapKey := os.Getenv("ARTIFACT_COPY_STEP_CABUNDLE_CONFIGMAP_KEY")
caBundleMountPath := os.Getenv("ARTIFACT_COPY_STEP_CABUNDLE_MOUNTPATH")
if caBundleCfgMapName != "" && caBundleCfgMapKey != "" {
caFile := fmt.Sprintf("%s/%s", caBundleMountPath, caBundleCfgMapKey)
var certDirectories = []string{
caBundleMountPath,
"/etc/ssl/certs",
"/etc/pki/tls/certs",
}
// Add to REQUESTS_CA_BUNDLE for python request library.
// As many python web based libraries utilize this, we add it here so the user
// does not have to manually include this in the user pipeline.
// Note: for packages like Boto3, even though it is documented to use AWS_CA_BUNDLE,
// we found the python boto3 client only works if we include REQUESTS_CA_BUNDLE.
// https://requests.readthedocs.io/en/latest/user/advanced/#ssl-cert-verification
// https://github.com/aws/aws-cli/issues/3425
executor.Container.Env = append(executor.Container.Env, k8score.EnvVar{
Name: "REQUESTS_CA_BUNDLE",
Value: caFile,
})
// For AWS utilities like cli, and packages.
executor.Container.Env = append(executor.Container.Env, k8score.EnvVar{
Name: "AWS_CA_BUNDLE",
Value: caFile,
})
// OpenSSL default cert file env variable.
// Similar to AWS_CA_BUNDLE, the SSL_CERT_DIR equivalent for paths had unyielding
// results, even after rehashing.
// https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_default_verify_paths.html
executor.Container.Env = append(executor.Container.Env, k8score.EnvVar{
Name: "SSL_CERT_FILE",
Value: caFile,
})
sslCertDir := strings.Join(certDirectories, ":")
executor.Container.Env = append(executor.Container.Env, k8score.EnvVar{
Name: "SSL_CERT_DIR",
Value: sslCertDir,
})
volume := k8score.Volume{
Name: volumeNameCABUndle,
VolumeSource: k8score.VolumeSource{
ConfigMap: &k8score.ConfigMapVolumeSource{
LocalObjectReference: k8score.LocalObjectReference{
Name: caBundleCfgMapName,
},
},
},
}

executor.Volumes = append(executor.Volumes, volume)

volumeMount := k8score.VolumeMount{
Name: volumeNameCABUndle,
MountPath: caFile,
SubPath: caBundleCfgMapKey,
}

executor.Container.VolumeMounts = append(executor.Container.VolumeMounts, volumeMount)

}
c.templates[nameContainerImpl] = executor
c.wf.Spec.Templates = append(c.wf.Spec.Templates, *container, *executor)
Expand Down

0 comments on commit 6058013

Please sign in to comment.