in pkg/controller/ingress/ingress_controller.go [493:584]
func (r *ReconcileIngress) buildReverseProxyResources(instance *extensionsv1beta1.Ingress) []metav1.Object {
resourceName := createReverseProxyResourceName(instance.Name)
configMap := &corev1.ConfigMap{
TypeMeta: metav1.TypeMeta{
APIVersion: "v1",
Kind: "ConfigMap",
},
ObjectMeta: metav1.ObjectMeta{
Name: resourceName,
Namespace: instance.Namespace,
},
Data: map[string]string{
"nginx.conf": buildNginxConfig(instance),
},
}
replicas := int32(getNginxReplicas(instance))
defaultMode := int32(420)
deploy := &appsv1.Deployment{
TypeMeta: metav1.TypeMeta{
APIVersion: "apps/v1",
Kind: "Deployment",
},
ObjectMeta: metav1.ObjectMeta{
Name: resourceName,
Namespace: instance.Namespace,
},
Spec: appsv1.DeploymentSpec{
Replicas: &replicas,
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{"deployment": resourceName},
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"deployment": resourceName}},
Spec: corev1.PodSpec{
Volumes: []corev1.Volume{
corev1.Volume{
Name: "config",
VolumeSource: corev1.VolumeSource{
ConfigMap: &corev1.ConfigMapVolumeSource{
DefaultMode: &defaultMode,
LocalObjectReference: corev1.LocalObjectReference{
Name: configMap.Name,
},
},
},
},
},
Containers: []corev1.Container{
{
Name: "nginx",
Image: getNginxImage(instance),
VolumeMounts: []corev1.VolumeMount{
{
MountPath: "/etc/nginx",
Name: "config",
},
},
},
},
},
},
},
}
service := &corev1.Service{
TypeMeta: metav1.TypeMeta{
APIVersion: "v1",
Kind: "Service",
},
ObjectMeta: metav1.ObjectMeta{
Name: resourceName,
Namespace: instance.Namespace,
},
Spec: corev1.ServiceSpec{
Ports: []corev1.ServicePort{
corev1.ServicePort{
Name: "http",
Protocol: "TCP",
Port: int32(getNginxServicePort(instance)),
},
},
Selector: map[string]string{"deployment": resourceName},
SessionAffinity: corev1.ServiceAffinityNone,
Type: corev1.ServiceTypeNodePort,
},
}
return []metav1.Object{configMap, deploy, service}
}