Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Pause Progress] Client proxy support tls certs #1014

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
13 changes: 13 additions & 0 deletions api/v1/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (

vmeta "github.com/vertica/vertica-kubernetes/pkg/meta"
"github.com/vertica/vertica-kubernetes/pkg/paths"
"github.com/vertica/vertica-kubernetes/pkg/secrets"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/api/resource"
Expand Down Expand Up @@ -800,6 +801,18 @@ func (v *VerticaDB) IsMonolithicDeploymentEnabled() bool {
return !v.IsNMASideCarDeploymentEnabled()
}

// IsMonolithicDeploymentEnabled returns true if NMA must run in the
// same container as vertica
func (v *VerticaDB) IsProxyTLSEnabled() bool {
if !vmeta.UseVProxy(v.Annotations) {
return false
}
if v.Spec.Proxy == nil {
return false
}
return v.Spec.Proxy.TLSSecret != "" && secrets.IsK8sSecret(v.Spec.Proxy.TLSSecret)
}

// IsKSafety0 returns true if k-safety of 0 is set.
func (v *VerticaDB) IsKSafety0() bool {
return vmeta.IsKSafety0(v.Annotations)
Expand Down
1 change: 1 addition & 0 deletions api/v1/verticadb_webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ const (
trueString = "true"
VProxyDefaultImage = "opentext/client-proxy:latest"
VProxyDefaultReplicas = 1
VProxyCertsMountName = "vproxy-certs"
)

// hdfsPrefixes are prefixes for an HDFS path.
Expand Down
74 changes: 59 additions & 15 deletions pkg/builder/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,18 @@ func buildNMAVolumeMounts(vdb *vapi.VerticaDB) []corev1.VolumeMount {
return volMnts
}

// buildVProxyVolumeMounts returns the volume mounts to include
// in the server container
func buildVProxyVolumeMounts(vdb *vapi.VerticaDB) []corev1.VolumeMount {
volMnts := []corev1.VolumeMount{
{Name: vProxyVolumeName, MountPath: "/config"},
}
if vdb.IsProxyTLSEnabled() && vmeta.UseVProxyCertsMount(vdb.Annotations) {
volMnts = append(volMnts, buildVProxyCertsVolumeMount()...)
}
return volMnts
}

// buildVolumeMounts returns standard volume mounts common to all containers
func buildVolumeMounts(vdb *vapi.VerticaDB) []corev1.VolumeMount {
volMnts := []corev1.VolumeMount{
Expand Down Expand Up @@ -458,6 +470,15 @@ func buildNMACertsVolumeMount() []corev1.VolumeMount {
}
}

func buildVProxyCertsVolumeMount() []corev1.VolumeMount {
return []corev1.VolumeMount{
{
Name: vapi.VProxyCertsMountName,
MountPath: paths.VProxyCertsRoot,
},
}
}

// buildCertSecretVolumeMounts returns the volume mounts for any cert secrets that are in the vdb
func buildCertSecretVolumeMounts(vdb *vapi.VerticaDB) []corev1.VolumeMount {
mnts := []corev1.VolumeMount{}
Expand Down Expand Up @@ -526,6 +547,26 @@ func buildScrutinizeVolumes(vscr *v1beta1.VerticaScrutinize, vdb *vapi.VerticaDB
return vols
}

func buildVProxyVolumes(vdb *vapi.VerticaDB, sc *vapi.Subcluster) []corev1.Volume {
vols := []corev1.Volume{
{
Name: vProxyVolumeName,
VolumeSource: corev1.VolumeSource{
ConfigMap: &corev1.ConfigMapVolumeSource{
LocalObjectReference: corev1.LocalObjectReference{Name: sc.GetVProxyConfigMapName(vdb)},
},
},
},
}
if vmeta.UseVClusterOps(vdb.Annotations) &&
vmeta.UseVProxyCertsMount(vdb.Annotations) &&
vdb.Spec.Proxy.TLSSecret != "" &&
secrets.IsK8sSecret(vdb.Spec.Proxy.TLSSecret) {
vols = append(vols, buildVProxySecretVolume(vdb))
}
return vols
}

func buildDefaultScrutinizeVolume() corev1.Volume {
return buildEmptyDirVolume(scrutinizeMountName)
}
Expand Down Expand Up @@ -784,6 +825,17 @@ func buildNMACertsSecretVolume(vdb *vapi.VerticaDB) corev1.Volume {
}
}

func buildVProxySecretVolume(vdb *vapi.VerticaDB) corev1.Volume {
return corev1.Volume{
Name: vapi.VProxyCertsMountName,
VolumeSource: corev1.VolumeSource{
Secret: &corev1.SecretVolumeSource{
SecretName: vdb.Spec.Proxy.TLSSecret,
},
},
}
}

// buildEmptyDirVolume returns a generic 'emptyDir' volume
func buildEmptyDirVolume(volName string) corev1.Volume {
return corev1.Volume{
Expand Down Expand Up @@ -901,16 +953,7 @@ func buildVProxyPodSpec(vdb *vapi.VerticaDB, sc *vapi.Subcluster) corev1.PodSpec
TerminationGracePeriodSeconds: &termGracePeriod,
ServiceAccountName: vdb.Spec.ServiceAccountName,
SecurityContext: vdb.Spec.PodSecurityContext,
Volumes: []corev1.Volume{
{
Name: vProxyVolumeName,
VolumeSource: corev1.VolumeSource{
ConfigMap: &corev1.ConfigMapVolumeSource{
LocalObjectReference: corev1.LocalObjectReference{Name: sc.GetVProxyConfigMapName(vdb)},
},
},
},
},
Volumes: buildVProxyVolumes(vdb, sc),
}
}

Expand Down Expand Up @@ -1021,9 +1064,7 @@ func makeVProxyContainer(vdb *vapi.VerticaDB, sc *vapi.Subcluster) corev1.Contai
Ports: []corev1.ContainerPort{
{ContainerPort: VerticaClientPort, Name: "vertica"},
},
VolumeMounts: []corev1.VolumeMount{
{Name: vProxyVolumeName, MountPath: "/config"},
},
VolumeMounts: buildVProxyVolumeMounts(vdb),
}
}

Expand Down Expand Up @@ -1786,9 +1827,12 @@ func buildNMATLSCertsEnvVars(vdb *vapi.VerticaDB) []corev1.EnvVar {

// buildVProxyTLSCertsEnvVars returns environment variables about proxy certs
func buildVProxyTLSCertsEnvVars(vdb *vapi.VerticaDB) []corev1.EnvVar {
if vmeta.UseVProxyCertsMount(vdb.Annotations) && secrets.IsK8sSecret(vdb.Spec.Proxy.TLSSecret) {
if vdb.IsProxyTLSEnabled() {
return []corev1.EnvVar{
// TODO: use proxy certs
// Provide the path to each of the certs that are mounted in the container.
{Name: VProxyRootCAEnv, Value: fmt.Sprintf("%s/%s", paths.VProxyCertsRoot, paths.HTTPServerCACrtName)},
{Name: VProxyCertEnv, Value: fmt.Sprintf("%s/%s", paths.VProxyCertsRoot, corev1.TLSCertKey)},
{Name: VProxyKeyEnv, Value: fmt.Sprintf("%s/%s", paths.VProxyCertsRoot, corev1.TLSPrivateKeyKey)},
}
}
return []corev1.EnvVar{
Expand Down
1 change: 1 addition & 0 deletions pkg/paths/paths.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ const (
EulaAcceptanceScript = "/opt/vertica/config/accept_eula.py"
CertsRoot = "/certs"
NMACertsRoot = "/certs/nma"
VProxyCertsRoot = "/certs/vproxy"
Krb5Conf = "/etc/krb5.conf"
Krb5Keytab = "/etc/krb5/krb5.keytab"
DBAdminSSHPath = "/home/dbadmin/.ssh"
Expand Down
Loading