func()

in pkg/webhook/sidecar_spec.go [149:202]


func (si *SidecarInjector) GetMetadataPrefetchSidecarContainerSpec(pod *corev1.Pod, c *Config) corev1.Container {
	if pod == nil {
		klog.Warning("failed to get metadata prefetch container spec: pod is nil")

		return corev1.Container{}
	}
	limits, requests := prepareResourceList(c)

	// The sidecar container follows Restricted Pod Security Standard,
	// see https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted
	container := corev1.Container{
		Name:            MetadataPrefetchSidecarName,
		Image:           c.ContainerImage,
		ImagePullPolicy: corev1.PullPolicy(c.ImagePullPolicy),
		SecurityContext: GetSecurityContext(),
		Resources: corev1.ResourceRequirements{
			Limits:   limits,
			Requests: requests,
		},
		VolumeMounts: []corev1.VolumeMount{},
	}

	for _, v := range pod.Spec.Volumes {
		isGcsFuseCSIVolume, isDynamicMount, volumeAttributes, err := si.isGcsFuseCSIVolume(v, pod.Namespace)
		if err != nil {
			klog.Errorf("failed to determine if %s is a GcsFuseCSI backed volume: %v", v.Name, err)
		}

		if isDynamicMount {
			klog.Warningf("dynamic mount set for %s, this is not supported for metadata prefetch. skipping volume", v.Name)

			continue
		}

		if isGcsFuseCSIVolume {
			enableMetaPrefetchRaw, ok := volumeAttributes[gcsFuseMetadataPrefetchOnMountVolumeAttribute]
			// We disable metadata prefetch by default, so we skip injection of volume mount when not set.
			if !ok {
				continue
			}

			enableMetaPrefetch, err := ParseBool(enableMetaPrefetchRaw)
			if err != nil {
				klog.Errorf(`failed to determine if metadata prefetch is needed for volume "%s": %v`, v.Name, err)
			}

			if enableMetaPrefetch {
				container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{Name: v.Name, MountPath: filepath.Join("/volumes/", v.Name), ReadOnly: true})
			}
		}
	}

	return container
}