in pkg/inject/virtualgateway_envoy.go [68:113]
func (m *virtualGatewayEnvoyConfig) mutate(pod *corev1.Pod) error {
ok, envoyIdx := containsEnvoyContainer(pod)
if !ok {
return nil
}
variables := m.buildTemplateVariables(pod)
envoy := pod.Spec.Containers[envoyIdx]
vg := fmt.Sprintf("mesh/%s/virtualGateway/%s", variables.MeshName, variables.VirtualGatewayOrNodeName)
envMap := map[string]string{}
if err := updateEnvMapForEnvoy(variables, envMap, vg); err != nil {
return err
}
//we override the image to latest Envoy so customers do not have to manually manage
// envoy versions and let controller handle consistency versions across the mesh
if m.virtualGatewayImageOverride(pod) {
envoy.Image = fmt.Sprintf("%s:%s", m.mutatorConfig.sidecarImageRepository, m.mutatorConfig.sidecarImageTag)
}
for idx, env := range pod.Spec.Containers[envoyIdx].Env {
if val, ok := envMap[env.Name]; ok {
if val != env.Value {
envoy.Env[idx].Value = val
}
delete(envMap, env.Name)
}
}
env := getEnvoyEnv(envMap)
envoy.Env = append(envoy.Env, env...)
// customer can bring their own envoy image/spec for virtual gateway so we will only set readiness probe if not already set
if envoy.ReadinessProbe == nil {
envoy.ReadinessProbe = envoyReadinessProbe(m.mutatorConfig.readinessProbeInitialDelay,
m.mutatorConfig.readinessProbePeriod, strconv.Itoa(int(m.mutatorConfig.adminAccessPort)))
}
if m.mutatorConfig.enableSDS && !isSDSDisabled(pod) {
mutateSDSMounts(pod, &envoy, m.mutatorConfig.sdsUdsPath)
}
pod.Spec.Containers[envoyIdx] = envoy
return nil
}